Short answer: how does WooCommerce shipping label automation work?
WooCommerce shipping label automation means the label is created from the order data, the tracking number is written back to the order and the customer is notified, without anyone retyping an address into a carrier portal. You get there in one of three ways: an official carrier plugin (Royal Mail Click & Drop, PostNL, DHL), a multi-carrier platform such as Sendcloud, or a direct integration with the carrier's API.
For a shop with one carrier and simple parcels, a plugin is usually enough. Once you ship with several carriers, split orders across warehouses or need returns and cash-on-delivery rules, a platform or a custom integration pays for itself in packing time.
Why does manual label creation break as you grow?
At 10 orders a day, copying addresses into a carrier portal costs perhaps half an hour. At 100 orders a day it is a full-time job, and the errors scale with it: a wrong postcode, a missing house number or a parcel booked as 1 kg when it weighs 7 kg. Each one turns into a failed delivery, a surcharge or a support ticket.
The second problem is visibility. If the tracking number lives in the carrier portal and not in WooCommerce, your support team cannot answer "where is my order?" without logging into another system. Your ERP, if you have one, never learns that the order shipped.
The third is peak season. Black Friday is exactly when the warehouse has the least time and the most temporary staff. An automated flow is the only way to keep cut-off times when order volume triples.
Which option fits: plugin, Sendcloud or a direct API?
Be honest about your volume and the number of carriers before you pay for anything.
| Option | Best for | Strengths | Limits |
|---|---|---|---|
| Official carrier plugin (e.g. PostNL for WooCommerce, Royal Mail Click & Drop channel) | One main carrier, domestic parcels | Free or cheap, quick setup, maintained by the carrier | One carrier per plugin; limited rules; plugin quality varies |
| Multi-carrier platform (Sendcloud, ShipStation) | Two or more carriers, cross-border, returns | Rules per weight, country or product; return portal; branded tracking | Monthly fee; another system in the chain; carrier contract options differ |
| Direct carrier API (custom) | Custom stores, ERP-driven warehouses, unusual rules | Full control: split shipments, multi-warehouse, ERP shipment sync | Development and maintenance cost; you own the error handling |
A few things worth knowing about the common UK and EU options:
- Royal Mail Click & Drop can connect to a WooCommerce store as a channel, and orders in the Processing status are imported on a schedule rather than instantly. If you also run another app that sends orders to Click & Drop, switch one off; two integrations create duplicate orders. See the Royal Mail help centre.
- PostNL for WooCommerce is published by PostNL itself on WordPress.org and needs an API key from the Mijn PostNL business portal.
- Sendcloud connects WooCommerce to many carriers at once, including DHL, DPD, PostNL and Royal Mail, with shipping rules and a return portal. You can use Sendcloud's rates or connect your own carrier contracts, depending on the carrier.
- DHL runs several separate businesses (Express, eCommerce, Parcel in individual countries), each with its own API and contract. Check which DHL entity you have a contract with before choosing a plugin; a plugin for DHL Parcel Germany will not book DHL Express shipments.
If your store is fully custom or your stock lives in an ERP, the plugin route often stops working. That is when a direct integration is worth it. We cover the ERP side in our guide to WooCommerce Business Central integration, and our ecommerce page lists the couriers and ERPs we connect.
What syncs, which direction, how often
Whichever option you choose, the same data has to move. This table is the checklist we use when we scope a carrier integration.
| Data | Direction | When / how often | Notes |
|---|---|---|---|
| Shipping rates and services | Carrier → store | Cached, refreshed daily | Live rate calls at checkout slow the page; cache them and fall back to a flat rate if the API is down |
| Pickup points and lockers | Carrier → store | Daily list, or map widget at checkout | Store the point ID on the order, not only the address |
| Order and recipient data | Store → carrier | When the order reaches Processing (or after picking) | Name, address, phone, email, weight, dimensions, cash-on-delivery amount |
| Label (PDF or ZPL) | Carrier → store | Immediately after creation | A6 PDF for desktop printers, ZPL for thermal printers |
| Tracking number and URL | Carrier → store | Immediately | Saved to order meta and the shipped email |
| Delivery status | Carrier → store | Webhook, or polling every 30–60 minutes | Delivered, failed attempt, returned to sender |
| Shipment confirmation | Store → ERP | When the label is created or handed over | So the ERP posts the shipment and the invoice |
| Returns | Customer → carrier → store | On request | Return label, then a status update when the parcel is scanned |
Step by step: setting up automated labels in WooCommerce
1. Clean the data before you connect anything
Every product needs a weight, and bulky items need dimensions. Go to Products, filter by product type and check the Shipping tab, or export to CSV and look for empty weight columns. A label booked at 0 kg is either rejected or surcharged later.
Check your address fields. UK addresses need a valid postcode; Dutch and German carriers expect the house number separately or at least present in the first address line. Many failed labels are simply "house number missing".
2. Pick the trigger
Decide when a label is created. Common choices are:
- automatically when the order moves to Processing (paid orders only);
- in bulk from the order list, after picking;
- from the warehouse scanner, when the parcel is packed and weighed.
Automatic creation on payment is fast, but it books labels for orders that may still be cancelled. Bulk creation after picking is the safest default for most shops.
3. Write the tracking number back
WooCommerce has long had no native tracking field, so plugins store it as order meta or order notes. Since version 10.2, core offers an opt-in Order Fulfillments feature with carrier and tracking number, still in beta, so check whether your carrier plugin uses it. Make sure the tracking number appears in the Completed email, in the customer's account page and in your ERP. If you use the WooCommerce Shipment Tracking extension or a carrier plugin, check that only one of them sends the shipped email, otherwise customers receive two.
4. Handle cash on delivery and insurance
If you offer cash on delivery, the amount sent to the carrier must match the order total in the currency the carrier expects. Partial refunds before shipping are the classic trap: the order total changes, the label still carries the old amount.
5. Test the unhappy paths
Book a label with a missing house number, an unknown postcode and an overweight parcel. Note what the carrier API returns and make sure the error shows on the order, not only in a log file. Typical messages you will see are variations of "invalid postcode", "street or house number missing", "weight exceeds service maximum" and HTTP 401 when an API key has expired.
6. Watch the background jobs
Most label plugins run through WooCommerce's Action Scheduler. Check WooCommerce → Status → Scheduled Actions for failed or pending actions after launch. A stuck queue is the most common reason labels "suddenly" stop appearing.
Pre-launch checklist
- Every product has a weight; bulky products have dimensions
- Address fields validated at checkout (postcode format, house number, phone with country code)
- Pickup-point ID stored on the order, not just the address
- Label trigger agreed with the warehouse (on payment, bulk or on packing)
- Label format matches the printer (A6 PDF or ZPL)
- Tracking number appears in the shipped email and the customer account
- Only one plugin sends the shipped email
- Cash-on-delivery amount recalculated after edits or partial refunds
- Carrier errors visible on the order and emailed to the warehouse
- Failed Scheduled Actions monitored after launch
- Shipment confirmation sent to the ERP, if you have one
- Return label flow tested end to end
What does shipping label automation cost?
There are two separate costs: what the carrier charges per parcel and what it costs to connect.
Per-parcel prices depend entirely on your contract and volume. As a rough guide for small UK shops, a tracked 48-hour parcel is often in the region of £3–£5 on a business account; treat this as an estimate and check current rates with the carrier. Multi-carrier platforms charge a monthly fee on top, ranging from a free entry plan to several hundred euros a month for high volumes and advanced rules. Check their current pricing pages.
Connecting is a one-off cost:
| Scope | Typical effort | Estimated cost |
|---|---|---|
| Configure an official plugin or Sendcloud | 1–2 days | €300–€800 |
| Direct API integration with one carrier (labels, tracking, errors) | 1–3 weeks | €800–€3,000 |
| Multi-warehouse, split shipments, ERP shipment sync | Part of a larger project | Fixed quote after discovery |
These ranges are estimates based on typical projects, not a price list. At Raao, the Starter package from €1,900 includes one courier integration and Launch from €3,900 includes two. Enterprise projects add ERP shipment sync, multi-warehouse rules and marketplaces. We integrate any carrier or platform with an API. If you are unsure which route fits your volume, a free 30-minute discovery call is usually enough to decide.
How we did it for the Miele partner store
The Miele partner store we built shows why shipping is never just a label. Stock, orders and shipments all had to agree with the ERP:
- Two-way Business Central integration for products, stock per location, orders, invoices and shipments, so the warehouse and the store see the same status.
- Delivery estimates for out-of-stock items via Tradeplace, so customers see a realistic date before they pay.
- Omnichannel assisted selling in store, with barcode scanning and payment links, feeding the same order flow.
- Customer 360 profiles with around 15 automated lifecycle email flows, so customer messages run from one place rather than from each plugin.
The lesson: decide where the truth about a shipment lives (store, ERP or carrier) before you pick a plugin. Everything else follows from that.