GoatLabels GoatLabels
Your store sells. It should not also be a shipping suite.

Shipping labels for WooCommerce stores


Orders in. Labels out. Tracking back.

A stock WooCommerce store cannot print a shipping label; the usual fix is stacking plugins, each with its own settings, updates, and failure modes. GoatLabels syncs WooCommerce directly: orders flow in, each is rate-shopped across USPS, UPS, FedEx, and DHL, and tracking follows the order — no plugin chain to maintain.

Four carriers on every order, zero plugins in your store

Each synced order is quoted across USPS, UPS, FedEx, and DHL as one all-in price per carrier — nothing renders in your checkout, nothing updates in your wp-admin.

UPSFedExDHLUSPS quoted per order
Connect once Orders flow to one queue.
Four quotes All-in, per carrier.
Tracking back Written to the Woo order.

Postage from a wallet, not another renewal

Card, Apple Pay, Google Pay, ACH, or crypto fund one prepaid balance. A plugin stack renews whether you ship or not; a wallet only moves when a label is bought.

VisaMastercardAmerican ExpressApple PayGoogle PayBitcoinEthereumTether (USDT)
Prepaid balance Spent label by label.
No renewals Quiet weeks cost zero.
One ledger Every channel, one record.

Why WooCommerce ships nothing out of the box

WooCommerce is a cart, not a fulfillment system, and that is a design decision rather than an oversight. The core plugin gives you products, a checkout, and an orders screen; everything past the order — rates shown to the buyer, labels bought by you, tracking sent back — is left to the extension ecosystem, because extensions are how the WooCommerce economy works. Even the first-party answer to shipping arrives as another plugin to install, configure, and keep updated. So a new store owner discovers the gap at the worst possible moment: the first real order is sitting in the dashboard, paid and packed, and there is no button that produces a label for it.

That gap has two conventional fixes. One is to stack plugins until the store can do fulfillment, which is the path most guides describe. The other is to leave the store alone and connect it to something that already does fulfillment. This page is the case for the second, and the argument is not features — it is maintenance.

The plugin stack and where it breaks

A working label setup inside WooCommerce is usually three pieces doing three jobs. A rates plugin quotes shipping to the buyer at checkout. A carrier or label extension buys the actual postage, one carrier per extension in many cases. A printing bridge gets the purchased label from the browser to a thermal printer. Each piece has its own settings screen, its own account credentials, its own update cycle, and its own idea of what a package weighs when the product page left the weight field blank.

Each piece also has a characteristic failure. The rates plugin fails at checkout, which is the most expensive place to fail — a buyer who sees no shipping options does not file a support ticket, they leave. The carrier extension fails on update day, when a new version and your PHP or WordPress version disagree, and the fix lands on you because self-hosted means self-repaired. The printing bridge fails silently, printing yesterday's queue or nothing at all. None of these are exotic events; they are the ordinary weather of running a plugin chain, and the hours they consume are hours a one-person store does not have. The stack does not cost what the plugins cost. It costs what the plugins cost plus every update you now review before trusting your checkout to it.

The sync: orders in, tracking back, wallet postage

The alternative is to move the shipping problem out of the store entirely. Connect the WooCommerce store once and paid orders flow into a To Ship queue on GoatLabels, each one carrying the buyer, the address, and the items. From there every order is priced the same way: the address is validated before any money moves, with a residential or commercial classification shown on it, and the parcel is quoted across USPS, UPS, FedEx, and DHL as four all-in numbers. You buy the winner from a prepaid wallet funded by card, Apple Pay, Google Pay, ACH, or crypto, and the tracking number writes back to the WooCommerce order — so your store notifies the buyer exactly as it would have if the label had somehow come from inside it.

Notice what is absent from that loop: nothing was installed into the store to make it run, nothing in it has a version number you are responsible for, and no piece of it renders in your checkout where a failure would cost a sale. The store keeps doing what WooCommerce is genuinely good at — selling — and the label workflow lives where the carriers, the validation, and the wallet already are.

Product check — the WooCommerce sync behaviour described on this page (orders into the To Ship queue, four-carrier quotes with address validation before payment, tracking written back to the order) was verified against the shipped GoatLabels product on 2026-08-15. Plugin names and plugin prices are deliberately not printed anywhere here: the extension market repackages and reprices faster than any page can track, so the stack is described by role — rates, labels, printing — rather than by brand.

Self-hosted quirks: what the sync does and doesn't touch

Self-hosting is the reason people choose WooCommerce and the reason its shipping problem is worse than Shopify's: there is no platform operations team underneath you. So it matters exactly where a connected tool reaches into your store, and the honest answer here is: barely. The sync reads orders and writes tracking. It does not touch your theme, your checkout flow, your tax configuration, or the rest of your plugin chain, and it has no opinion about your hosting, your caching layer, or which page builder you regret installing. If your store works today, connecting it changes nothing about how the store works — it changes where the orders go next.

Two practical notes for the self-hosted reality. First, connect the live store, not a staging copy — a queue full of test orders teaches you nothing and a missed real order costs you a buyer. Second, WooCommerce is rarely anyone's only channel, and the queue is deliberately shared: the same To Ship list, the same wallet, and the same four-carrier quote handle the Etsy shop and the TikTok Shop beside the Woo store, which is what keeps a multi-channel week from becoming three fulfillment systems.

Batching a backlog by CSV

There is one WooCommerce moment the live sync does not cover: the pile that accumulated before you connected. A backlog from a launch weekend, or the open orders you are carrying out of a previous label tool, is better handled as a file — export the orders from WooCommerce, and run them as one batch with every address validated and every row quoted before anything is bought. The mapper, the saved column presets, and the row-by-row purchase are bulk shipping labels from a CSV's territory, and that page walks the whole mechanic. From then on the sync catches orders as they happen, and the file path stays in your pocket for the next backlog-shaped day. Either way, what makes the label itself cheap is the same four-carrier quote — and with no monthly minimum to print, a store that connects today and ships nothing until Friday owes nothing for the wait.

One synced store, one loop

From a paid Woo order to tracking on the same order.

The loop is deliberately short. A paid order arrives from the connected store with the buyer, address, and items already on it. The address is validated and the parcel quoted across four carriers before any money moves. The winning label is bought from the prepaid wallet, and the tracking number is written back to the WooCommerce order so your store notifies the buyer itself.

1
A paid order lands
Synced from the connected store
woo_order_1187

2x enamel mug, 1x tea sampler — ships to a validated residential address in zone 5.

Etsy
Order #2241 — same queue
TikTok Shop
Order #5090 — same queue
WooCommerce order, synced
Source
your connected store
Address
validated, residential
Items
carried over with the order
Status
in To Ship, unquoted
Orders arrive on their own — nothing to paste

The sync reads orders and writes tracking, and touches nothing else: not your theme, not your checkout, not the rest of your plugin chain.

2 Before money moves

Validated and quoted, then bought once.

Billy AI
  • Address checked with a residential or commercial classification before payment
  • USPS, UPS, FedEx, and DHL quoted as four all-in numbers on the actual parcel
  • The exact quoted amount is what leaves the prepaid wallet — nothing added after
  • A voided label credits the same balance, spendable on the corrected one
Validated. Quoted four ways. Ready to buy.
3
Label out, order closed
Tracking written back to WooCommerce
Paid from the prepaid wallet
Card, Apple Pay, Google Pay, ACH, or crypto
$12.47
USPS
Tracking on the Woo order
Your store emails the buyer, as always
$12.47

The buyer hears from your store, not from a third-party tracking domain — the notification flow you already configured does the telling.

The channels that sync, and only those

WooCommerce is a first-class sync channel.

Shopify, Etsy, WooCommerce, and TikTok Shop connect directly: orders flow into one To Ship queue and tracking pushes back when you print. That list is the whole list — no tile here is aspirational, and anything you sell outside these four arrives by paste or by CSV and draws on the same wallet.

Via AIorders from anywhere else: paste the order text and Billy drafts the label — the full workflow lives on the AI shipping labels page.

WooCommerce logo WooCommerce
Shopify logo Shopify
Etsy logo Etsy
TikTok Shop logo TikTok Shop
What replaces the stack

Every job the plugins did,
without the update day.

The three-plugin stack earns its keep only until you price the maintenance. Everything below ships on every plan, and none of it renders inside your store where a failure would cost a checkout.

One wallet for the store
and everything beside it

Card, Apple Pay, Google Pay, ACH, and crypto top up one prepaid balance that funds labels for WooCommerce, Etsy, TikTok Shop, and every pasted one-off alike. No monthly minimum to print — a slow month on the store is a month the shipping tooling costs you nothing.

Wallet balance
$1,247.36 USD
AI

Billy covers the sales
your store never saw

The Instagram DM, the invoice customer, the market-stall buyer who wants it posted — paste the message or the email and Billy drafts the label, with the address validated before you pay. The synced queue and the pasted one-off end in the same place: one label, one ledger line.

Billy LIVE
Where's the package to Maya?
It's in transit via UPS. Expected Friday, Aug 7.
UPS
1Z8923A6B05G4123456
In transit
Austin, TX → Dallas, TX
Ask Billy anything...

All-in prices,
not a rate card

Each carrier comes back as one number with the surcharges already inside it, and that exact number is what leaves the wallet. No gateway fee, no per-label software fee, and no markup appearing between the quote and the debit — which is what makes a four-way comparison honest.

Shipment summary
UPS Ground $12.49
Insurance $0.75
Fuel surcharge $0.32
Total $13.56

Four carriers,
chosen per order

USPS, UPS, FedEx, and DHL are quoted on every parcel, because the winner changes with weight, zone, and destination type. A store that defaults to one carrier is donating the difference on every order where a different carrier would have won.

Compare rates
UPS UPS $12.48
FedEx FedEx $13.22
DHL DHL $14.10
USPS USPS $11.79
Duties & taxes paid

An API, for stores
built by developers

Plenty of WooCommerce stores are maintained by the developer who built them. The REST API covers quote, buy, void, and tracking with signed webhooks and real idempotency keys, unlimited calls on every plan — so fulfillment can live in your own tooling instead of your client's wp-admin.

POST /v1/shipments
{
"to": { "name": "Maya" },
"from": { "name": "Alex" },
"service": "ups_ground",
"label_format": "pdf"
}
Webhook delivered
GoatLabels mobile queue showing synced WooCommerce orders with all-in carrier prices
Billy drafting a label from a pasted order on mobile

Tracking written back

Woo order #1187 · your store emails the buyer

No wp-admin at the packing table

The store stays on the server. Shipping fits in a pocket.

Nothing about running a self-hosted store implies you want to run it from a desk. Once the store is connected, the part of fulfillment you actually touch — the queue, the four quotes, the wallet, the print button — is a phone job, and the store carries on serving pages without knowing any of it happened.

Paid Woo orders appear in the queue on the phone, buyer and items already attached.
USPS, UPS, FedEx, and DHL come back as four all-in prices on one screen.
Buy from the prepaid balance — no licence check, no plugin update prompt.
One-tap print to the share sheet or a thermal printer over Wi-Fi.
Tracking writes back to the Woo order, so your store sends the notification it always sent.
The where-is-my-order email, answered out loud

Ask about a Woo order without opening wp-admin.

Chasing a tracking number normally means logging into the store, finding the order, and reading a number off it — three steps for a question that takes four seconds to ask. Say it out loud instead and Billy finds the shipment and reads its status back. Included on every plan, and it never needed a plugin to be there. This is the real product, not a render.

goatlabels.io/dashboard/shipments — Billy
Billy reading a shipment's delivery status back over the purchased labels list

Listening

"Where's the enamel mug order?"

Out for delivery

Woo order #1187 · tracking already on the order

Speaks plain English · finds the shipment and reads its status back · nothing installed into your store to make it work.

All-in quotes

Four prices on the order, none of them from a plugin.

Keep the two shipping numbers apart: what a buyer is charged at your checkout stays a checkout concern inside WooCommerce, and what you pay to move the parcel is settled here. This side comes back as one all-in figure per carrier with the surcharges already inside, and that exact figure leaves the wallet. The sample parcel below is an illustration.

US → DE 2.6 lbs 12×8×4 in
USPS

USPS

Priority Mail Intl

10–15 days

$7.40

$1.90 of taxes & duties included

all-in · surcharges already inside

Cheapest all-in
FedEx

FedEx

Intl Connect Plus

3–5 days

$8.90

$2.20 of taxes & duties included

all-in · surcharges already inside

DHL

DHL

Express Worldwide

1–2 days

$9.80

$2.50 of taxes & duties included

all-in · surcharges already inside

No carrier invoice the day after Void → credit straight back to your wallet Multi-currency display
Public API v1

One endpoint, zero things to update.

On a self-hosted store, every new capability normally arrives as another directory with its own version number, its own PHP expectations, and its own update day. This one arrives as an HTTP call from wherever you already run code — nothing lands in wp-content, and nothing new has to survive your next core update.

Nothing installed in the store — no plugin to review before each update
Quote, buy, void, and track over REST and JSON with one Bearer header
Signed webhooks for tracking events instead of a cron job that polls
Real idempotency keys, so a launch-day retry never buys a second label
Read the API docs Get a free API key $0 on every plan
curl https://api.goatlabels.io/api/v1/shipments
POST /api/v1/shipments
Authorization: Bearer sk_live_…
Idempotency-Key: ord_8421

{
  "to": { "name": "Joyce", "city": "Berlin", "country": "DE" },
  "parcel": { "weight": 2.6, "weight_unit": "lb" },
  "service": "fedex_intl_priority"
}
Priced against a plugin stack

Two plans, no licence renewals to diary.

A stack of extensions bills on its own calendar: each piece renews whether the store had a good month or a quiet one, and the maintenance is yours either way. A wallet only moves when a label is bought. Free covers 50 shipments a month with the store connectors, all four carriers, Billy, and the full API; Pro is an optional flat plan with unlimited shipments and cheaper label pricing.

Pro

Most popular
$40 / month
Unlimited shipments — for the drop that empties the shop in a night
Cheaper label pricing that scales down as your volume grows
Billy AI on Telegram — check an order without opening the dashboard or the store
API access still free and unlimited

Volume pricing

illustrative
less volume more volume

more volume → lower per-label rates

Free

$0 / forever

Connect the store today, ship on Friday, and owe nothing for the days in between.

50 shipments a month, no monthly minimum to print
WooCommerce sync included — orders in, tracking written back
USPS, UPS, FedEx, and DHL rate-shopped on every parcel
Billy AI unlimited in the web app — paste, screenshot, or speak
REST API with unlimited calls; fund by card, Apple Pay, Google Pay, ACH, or crypto

Billy is not an extension

The assistant that drafts a label from a pasted message or a screenshot runs unlimited on Free, in the web app. There is nothing to install into the store for it, and nothing to update after.

Web — every plan Telegram — Pro

API free on every plan

GET /api/v1/shipments

200 OK · plan: free

Unlimited calls on Free — still unlimited on Pro.

We'll beat your current rates

Bring your invoice — on Pro we work with you to beat the rates you're getting from

ShippoPirateShipShipStation
No contracts No monthly minimum to print Nothing installed in your store
USPS UPS FedEx DHL

Label prices are quoted live from USPS, UPS, FedEx, and DHL as one all-in number, and that exact amount leaves your prepaid wallet. Extension pricing is each vendor's to set and change, which is why no plugin price appears anywhere on this page. Full pricing details

Who pays the maintenance, in practice

Self-hosted means self-repaired.

The plugin stack is not expensive because of what the plugins cost. It is expensive because of who fixes it at nine on a Sunday. Four kinds of WooCommerce store where moving fulfillment out of wp-admin pays for itself in hours rather than licences.

One-person shops on shared hosting

No ops team under the store

Update day is your day

A carrier extension and a PHP version disagreeing is an ordinary Tuesday, and the repair lands on the person who was going to spend that afternoon packing. Reading orders and writing tracking from outside the store takes the whole failure class off the roster.

0 plugins to update orders in, tracking back four carriers per parcel
goatlabels.io/dashboard/shipments
GoatLabels shipments queue with purchased labels

Owners who once lost a checkout to an update

The failure that costs a sale, not a ticket

A rates plugin that stops answering does not raise an alarm — the buyer simply sees no shipping options and leaves. Nothing here renders in your checkout, so nothing here can fail in the one place a failure is invisible and final.

Checkout untouched

The sync reads orders and writes tracking. That is all it reaches.

Stores whose buyers ask in a message

Already answered on the order

hey — did my mug order go out?
Tracking is on your order · your store already emailed it

Shops that opened with a launch drop

A backlog is a file, not another extension

1

import clears the pile; the sync catches every order after it

WooCommerce shipping labels — FAQ

Does WooCommerce print shipping labels on its own?
No. Core WooCommerce handles products, checkout, and orders; label purchase is left to extensions, including WooCommerce's own first-party shipping plugin. A stock store has no path from a paid order to a printed label, which is why every WooCommerce shipping guide is really a plugin shopping list. The alternative is to leave the store stock and connect it to a label tool that already has the carriers.
How does the GoatLabels WooCommerce sync work?
Connect the store once and paid orders flow into the To Ship queue carrying the buyer, address, and items. Each order is validated, quoted across USPS, UPS, FedEx, and DHL as one all-in price per carrier, and bought from a prepaid wallet. The tracking number then writes back to the WooCommerce order. Nothing is installed into your store's checkout or theme to make this run.
Do I still need a shipping plugin after syncing?
Not for labels. The quote, the purchase, and the tracking write-back all happen outside the store, so the carrier extension and the printing bridge come out of the stack. If you show live rates to buyers at checkout, that remains a checkout concern inside WooCommerce — the sync deliberately does not touch your checkout, so keep or drop that piece on its own merits.
How does tracking get back to my WooCommerce order?
Automatically, when you buy the label. The tracking number is written to the originating order, so the store's own notification flow tells the buyer — the email comes from your store, as it would for any fulfilled order. You do not paste numbers between browser tabs, which on a busy day is exactly the step that gets skipped and generates the where-is-my-order message.
Can I mix WooCommerce orders with other channels in one wallet?
Yes — that is the normal case. Shopify, Etsy, WooCommerce, and TikTok Shop all sync into the same To Ship queue, and one prepaid balance funds every label regardless of which channel the order came from. Fund it with card, Apple Pay, Google Pay, ACH, or crypto. Orders from anywhere else arrive by paste or by CSV and draw on the same balance.

Related: shipping labels for Etsy, shipping labels for TikTok Shop, bulk labels from a CSV, and the full pricing model.

Real sellers, real words

Store owners who stopped maintaining a stack.

A video took off and I had 80 TikTok Shop orders by morning. I printed every label from my phone on the bus to the post office.
E

Early customer · TikTok

TikTok Shop seller

TikTok Shop
I run my Etsy shop from the kitchen. The AI reads the order, picks the carrier, the label prints. That's the whole workflow now.
E

Early customer · Etsy

Etsy maker

Etsy
The API is what every shipping API pretends to be. Idempotency that actually works.
S

Sasha R.

Staff engineer, marketplace

Builds on the free API
Leave the store stock. Ship anyway.

Your checkout is not the place
to run a shipping suite.

Connect the store once, let orders land in one queue, quote every parcel across USPS, UPS, FedEx, and DHL, and send tracking back where the buyer expects it.

Sign up in seconds. No card required. No monthly minimum to print, and nothing installed into your store.