WooCommerce shipping guide

How do I print USPS labels for WooCommerce orders?

WooCommerce publishes its own WooCommerce Shipping extension, which prints USPS and UPS labels from your dashboard. The other route is a shipping app connected over the WooCommerce REST API, which puts several stores in one queue and prices USPS and UPS against the same box. Both write the tracking number back to the order.

The route WooCommerce publishes itself

WooCommerce Shipping is WooCommerce's own extension. It buys and prints USPS, UPS and DHL Express labels from the WooCommerce dashboard, and when you buy a label through it the tracking number is saved to the order. If you run one store and one bench, that is a short path.

It lives inside WP admin, so the label and the order are on the same screen and the tracking follows the purchase.

What a connected shipping app adds

CapabilityWhat it changes at the bench
One queue, several storesEvery order in one list instead of one dashboard per site
USPS and UPS per orderBoth carriers priced against the same package before you buy
Tracking written backNumber and provider land on the order when the label is bought
Pick lists and packing slipsPrinted for the orders pulled from your store

The connection is REST API keys generated in WP admin, so nothing of ours is installed on your WordPress site.

What the order gives a rate engine, and what it does not

The order carries the shipping address, or the billing address when no shipping address was collected, plus the line items and the checkout shipping method the buyer chose. It does not carry a measured package. Weight and dimensions come from the box in front of you, which is why the scale sits next to the printer.

A rate quoted against a guessed weight is the usual source of a carrier adjustment after the fact.

Which orders belong in the label queue

StatusIn the queueWhy
Pending paymentNoReceived, but no payment has been made
ProcessingYesPaid and stock reduced, awaiting fulfilment
On holdSometimesAwaiting payment confirmation, so ship deliberately
CompletedNoFulfilled and complete

From a paid order to a USPS label

  1. Filter the Orders screen to Processing.

  2. Open the order and read the shipping address, checking that street line two survived checkout.

  3. Pack the box and weigh it.

  4. Rate USPS and UPS against that weight and those dimensions.

  5. Buy the label, print it, and let the tracking number go back onto the order.

Key takeaways

  • WooCommerce Shipping is WooCommerce's own extension and prints USPS, UPS and DHL Express labels.
  • A REST API connection needs no plugin of ours on your site.
  • Rate USPS and UPS against the same box before you buy.
  • The queue is processing and on-hold orders, not pending payment.
With I'd Ship That

Labels from your Woo queue, tracking back on the order

I'd Ship That for WooCommerce is in early access. You connect with REST API keys generated in WP admin, and a scheduled sync pulls processing and on-hold orders into The Workbench, which is part of Pro.

Rate USPS and UPS per order with your shipping rules and service mappings applied, buy, and we set the order to completed, write the tracking number and provider, and add a customer-visible order note. Pick lists and packing slips print for those same rows.

Create a label

Not to buy a label through a shipping app. The postage is bought through the app, the label carries your return address, and the tracking number belongs to the shipment. What you do need is an accurate weight and address, because those are what the carrier prices against and what it will re-measure if they are wrong.

That is the main reason to work outside a single dashboard. Each store connects with its own REST API keys, and the orders land in one queue with the store named on each row, so a two site operation runs one packing session rather than two.

Fix it before the label exists. A corrected address after purchase means a new label, and the carrier still bills the movement it actually made. Address validation before the buy is the cheap version of that problem.

WooCommerce sends the customer email on the status change to Completed, not on the tracking write. Because the status change and the tracking are written in the same step when the label is bought, the email the buyer receives is the one that has a tracking number behind it.