ERPJS + Nova Poshta Integration: Auto-Generate Waybills from Sales Orders

An online store manager opens their inbox at 9:30 AM: 25 new orders overnight. Each one needs to be picked, packed — and an express waybill created on Nova Poshta’s website. That’s 5-7 minutes per waybill: log in, fill out the form, copy the address from the order into another tab, pick a branch, describe the cargo, enter the declared value and payment type. By lunchtime, the manager hasn’t started packing yet — they’ve only created waybills.

This is a typical morning for small and mid-sized e-commerce businesses in Ukraine. 25 orders × 6 minutes = 2.5 hours daily that you can reclaim — if your accounting system is integrated directly with Nova Poshta. Let’s break down how this actually works in ERPJS — without “everything is automatic” promises, with specifics about what’s automated and what isn’t.

(A quick note for readers outside Ukraine: Nova Poshta is Ukraine’s largest private delivery service, with 38,000+ branches and parcel lockers. The same integration patterns apply to other carriers — but in this post we focus on the Ukrainian use case where ERPJS already supports the full Nova Poshta API.)

Why does manually creating waybills kill a small store’s margins?

Manual work with waybills on the Nova Poshta website isn’t a single task — it’s a chain of five steps. Each one has room for error.

How much time it actually takes:

  • Log in to the Nova Poshta cabinet — 30 seconds (sometimes session recovery is needed)
  • Transfer order data into the Nova Poshta form — 2-3 minutes (address, phone, full name, weight, cargo description)
  • Find the right branch out of 38,000+ — 30-60 seconds
  • Calculate declared value and cash-on-delivery — 30 seconds
  • Save and print the label — 30 seconds

That’s 5-7 minutes per waybill — assuming nothing breaks. Add a captcha or slow branch lookup in the cabinet and it stretches another minute or two.

Typical errors when entering data manually:

  • Wrong address. The manager copied the previous customer’s address — the parcel went to the wrong person. Forwarding costs money and time.
  • Incorrect declared value. The manager forgot to add VAT or entered the price of one unit instead of the whole order — the customer receives a parcel with an incorrect declared price, causing return-process headaches.
  • Lost waybill number. The manager created the waybill but didn’t paste the number back into the order — a week later the customer asks “where’s my parcel?” and nobody knows which waybill it is.
  • Duplicate waybill. Two managers created two waybills for the same order. One needs to be deleted, money refunded.

For a store with 30 waybills a day, that’s 2.5 hours of a manager’s work plus 1-3 errors per week. Errors cost: forwarding — 50-80 UAH; an additional customer contact — 10-15 minutes of the manager’s time; a lost customer — several hundred to several thousand UAH of forgone LTV.

How does ERPJS create a waybill from a sales order in one click?

In ERPJS, the Nova Poshta express waybill is created from a sales order or a shipment document. The manager opens the order → clicks “Create Express Waybill (NP)” → the system pulls all fields from the order data and sends the request to Nova Poshta. After 2-3 seconds the waybill is ready, the number is recorded in the order.

The key difference: the manager doesn’t leave ERPJS. No separate browser tab, no separate login, no separate copy-pastes. Everything happens in the same window where the order, the customer, the products, and the prices already are.

For details on inventory accounting from receipt to sale — see our separate post. The Nova Poshta integration is the next layer: a sale isn’t just written off from stock; it ships to the customer with a tracking number, all from one screen.

What is filled in automatically, and what does the manager enter manually?

This is the question where honesty matters more than the “everything is automatic” promise. Let’s break it down by field.

Automatic — from sender data:

  • Sender city and branch (from your company settings in the system)
  • Contact person, sender phone
  • Cargo type (default — “Goods”)
  • Who pays for delivery (from settings: you or the customer)

Automatic — from order data:

  • Declared value = order total
  • Cash-on-delivery amount = order total (if the customer pays on receipt)
  • Customer legal entity — the system recognises a business client by the presence of EDRPOU (Ukrainian company tax ID) in the contact card
  • Order number is linked to the waybill — later you can see which parcel belongs to which order

Manual — entered by the manager:

  • Recipient city (if this is a new customer not in the database)
  • Branch or full address (branch-to-branch or address delivery)
  • Recipient full name and phone (if not in the customer card)

If the customer is a returning one with address and phone already in the database, the manager has almost nothing to enter — click, verify, confirm. Creating a waybill takes 20-30 seconds instead of 5-7 minutes.

How do city and branch directories work — fast or with delays?

This is an important detail often overlooked when choosing a system. Nova Poshta has 38,000+ branches and parcel lockers, hundreds of cities. If your system calls the Nova Poshta API every time you pick a branch, the search lags — especially on slow internet.

ERPJS does it the other way around: directories are stored locally. When you set up the integration, the system downloads the full catalog of cities, branches, cargo types, and payer types once — and stores it in its own database. Subsequent searches are instant: the manager starts typing “Lviv” — the system shows Lviv and all its branches in a fraction of a second.

Directory updates happen either by clicking a button in the admin module or automatically on schedule (every 1-2 weeks). New branches appear in the system without manager involvement.

What this means in practice:

  • Branch search takes 2-3 seconds instead of 10-30
  • The integration doesn’t depend on Nova Poshta API availability at the moment — even if Nova Poshta has an outage, you can keep preparing orders, the waybill will be created later
  • The manager isn’t distracted from their main work by a “directory loading” wait

How are delivery statuses updated automatically?

Creating a waybill is half the job. The other half is knowing where it is now. In e-commerce this is critical: customers ask “where’s my order?”, the manager answers, marketing segments customers by delivery status.

ERPJS periodically queries Nova Poshta for the status of all active waybills. The interval is configurable — most commonly set to every 1-2 hours. The status updates in the order automatically: “Accepted for shipment”, “In transit”, “Arrived at branch”, “Delivered”.

How this looks in the workflow:

  • The manager opens an order — sees the current delivery status without switching to the Nova Poshta cabinet
  • You can build a report “all parcels in transit longer than 5 days” and proactively call those customers
  • Marketing sets up automated emails — “your parcel has arrived at the branch”, “you received it — please rate your order”
  • Accounting sees which cash-on-delivery orders have already been received — Nova Poshta will transfer the money in 2-4 days

Final statuses (delivered, returned, cancelled) stop being polled — the API load stays minimal.

Is thermal printer (ZPL) label printing supported?

Label printing is its own story. Small stores print on a regular office A4 printer — and that’s fine. Stores with 50+ parcels a day move to Zebra thermal printers (printing on 100×100 mm self-adhesive rolls) because it’s faster and cheaper — no toner, no print volume limits.

ERPJS supports both:

  • Express waybill print (A4) — standard printing on a regular office printer. Suitable for an office shipping 5-20 parcels a day.
  • Label printing for thermal printers (Zebra) — a specialised format for self-adhesive labels. The label prints in one click and is stuck directly onto the box.

The system marks each waybill as “label printed” — so you can see which orders still need a sticker and process all of them in one batch at the end of the day.

Can multiple stores or legal entities be connected?

Small businesses often have multiple legal entities: one sole proprietorship (FOP) for the marketplace channel, an LLC (TOV) for B2B sales. Each one has its own Nova Poshta cabinet and its own API key.

ERPJS lets you connect as many senders as you need. Each is a separate entry in the integration settings with its own API key, default city, branch, and settings. When creating a waybill, the manager chooses which legal entity to ship from — or it’s determined automatically based on the order (e.g., B2C → FOP, B2B → TOV).

This is especially useful when you’re scaling — adding a new brand, a new sales channel, a new legal entity. No need to switch cabinets with different passwords — it all lives in one system.

What delivery types are supported?

All main Nova Poshta modes are supported:

  • Branch-to-Branch — the standard option for most orders
  • Branch-to-Address — courier delivery to the customer’s door
  • Address-to-Branch — courier pickup from your office or warehouse
  • Address-to-Address — full courier logistics
  • Cash on delivery — the customer pays on receipt; you get the money from Nova Poshta in 2-4 days
  • Prepayment — the parcel ships already paid, without holding funds
  • Goods return — a separate document type for customer-side returns

Honest about limitations: changing the branch of an already-created waybill via the API is not exposed in the form. If a customer asks to change the pickup point after shipping, that has to be done through the Nova Poshta cabinet. This is on the roadmap for future versions.

What about bookkeeping for delivery services?

This is where honesty matters more than promises. The Nova Poshta integration records the actual delivery cost of every parcel — useful for reporting and margin analysis. But it doesn’t create automatic accounting entries for delivery services: the bookkeeper has to record the total Nova Poshta service charge in your books each month separately.

Why: the entries depend on who paid for delivery (you or the customer), the payment method (card, bank transfer), and how it’s reflected in the VAT registry. There’s no universal logic — each company has its own delivery-services accounting scheme.

What this means in practice:

  • The manager creates a waybill — the integration works automatically
  • The bookkeeper gets a monthly report from Nova Poshta and posts the summary entry
  • The integration already shows the total Nova Poshta charges for the period — useful for reconciling against the carrier’s invoice

This is the same approach most ERP systems take — automate the operational work (creating waybills, statuses) and leave the bookkeeper full control over what ends up in the General Ledger.

How to start the integration — a 30-minute setup plan

A realistic plan for connecting Nova Poshta to ERPJS — less than one workday:

Step 1 (5 minutes): get an API key. Go to your Nova Poshta cabinet → Settings → API → create a new key. Copy it.

Step 2 (5 minutes): add a sender in ERPJS. In the integration settings, paste the API key, pick a city, default branch, contact person. Save.

Step 3 (5-10 minutes): download directories. Click “Refresh NP directories” — the system pulls in all cities, branches, cargo types. This is a one-time setup.

Step 4 (10 minutes): test waybill. Create a single test order, try to create a waybill from it. Verify that the number appears and the label prints.

Step 5 (optional): enable automatic status updates. In the admin module set the status poll to every 1-2 hours. One-time setup.

After that, the integration is production-ready. Managers continue working in their familiar orders, but the “Create waybill” button removes 5-7 minutes of manual work per parcel.

What you get as a result

After a month of running the Nova Poshta integration, the store owner gets:

  • ✅ Saves 2-3 hours of manager work daily (for a store with 30 waybills/day)
  • ✅ Fewer address and data errors — everything is pulled automatically from the customer card
  • ✅ Every waybill linked to a specific order — status lookups take seconds
  • ✅ Real-time automatic delivery statuses — customers get answers fast
  • ✅ Batch label printing at end of day — the manager works in waves, not one parcel at a time
  • ✅ Support for multiple legal entities or stores in one system
  • ✅ Delivery reports for analysis: average time, returns count, geography

If you ship more than 10 parcels a day, creating waybills manually on the Nova Poshta website already costs more than an integrated system. For 30+ parcels, the integration pays off in the first week.

If you’re just launching a store or planning a migration, start with inventory accounting and a basic store accounting program, and add the Nova Poshta integration once shipping volume becomes critical for your team’s time. POS with online fiscal compliance is a separate topic — covered in our post on integrated POS.

Frequently Asked Questions

Do I need a separate Nova Poshta API key for each store?

If you have several legal entities or separate Nova Poshta cabinets — yes, each entity has its own API key. ERPJS supports multiple senders in one system: you configure each one separately, and when creating a waybill you choose which entity is shipping. If everything is under one legal entity, a single key is enough.

How long does the integration setup take from scratch?

The basic setup takes 20-30 minutes: get an API key in the Nova Poshta cabinet, paste it into ERPJS settings, pick a city and default branch, download directories. First waybills can be created right after that. Additional setup (multiple senders, automatic status polling, print templates) adds another 30-60 minutes.

What happens if the internet is temporarily down?

Creating a new waybill requires a connection to the Nova Poshta API — this won’t work without internet. But all directories (cities, branches, cargo types) are stored locally in ERPJS, so you can keep preparing orders, filling out recipient data, and printing previously-created labels — everything works offline. Creation of new waybills resumes as soon as the internet is back.

Can I print labels in batches at end of day?

Yes. The manager can create several waybills throughout the day, then print all labels in a single batch — on an office A4 printer or a Zebra thermal printer. The system tracks which orders already have a label printed, so they don’t get duplicated.

Is the history of all waybills stored for a year?

Yes. Each waybill is a document in your ERPJS system, stored together with the order, delivery status, and actual Nova Poshta service charge. You can build a “all deliveries for the period” report with filters by customer, status, or amount. History is not time-limited — it’s all yours.

Can I cancel a waybill that’s already created in ERPJS?

If the parcel hasn’t been physically handed to Nova Poshta yet — yes, you can delete the waybill through the system. If the parcel is already in transit, you have to handle it through the Nova Poshta cabinet according to their rules (usually a phone call or support request). Changing the branch on an already-dispatched parcel via the API isn’t currently supported — that’s an integration limitation for now.

Try ERPJS with Nova Poshta integration

Free tier with no time limits. Orders, inventory, NP integration, label printing, automatic status updates — everything included. Sign up →

Leave a Reply

Your email address will not be published. Required fields are marked *