Profit
Are you losing money on shipping? Comparing costs and charges in WooCommerce
WooCommerce shows what you charged for shipping, not what you paid. Find the charge in Analytics › Revenue under Shipping for a date range, then total your carrier invoices or label purchases for the same dates. Paid minus charged is your shipping shortfall, a cost your product margin has to cover.
For many stores that number is bigger than expected, especially with free shipping thresholds or flat rates set years ago. This guide shows how to measure it monthly, how to find the orders that lose money, and what to change.
The free way: compare Analytics with your carrier bills
1. Get shipping charged from WooCommerce
- In WordPress admin, go to Analytics › Revenue.
- Pick the date range, for example Last month.
- Read the Shipping total in the summary, or use the table to see it by day, week or month.
This is the shipping customers paid at checkout across all orders with an included status. It's kept separate from net sales: net sales excludes shipping, and total sales adds it back. Shipping tax is reported with taxes, not in this column.
2. Get shipping paid from your carriers
WooCommerce doesn't know what labels cost you. Total it from wherever you buy postage:
- Label services or shipping plugins: most have a history or billing page you can export by date.
- Carrier accounts: monthly invoices, including surcharges and adjustments that arrive weeks later.
- Couriers paid by card: your card statement.
Include return labels you paid for, and add packaging (boxes, mailers, tape, void fill) if you want the full cost of getting orders out. Some stores keep packaging separate; either works as long as you're consistent.
3. Compare
| Month | Shipping charged (Analytics) | Shipping paid (carriers) | Packaging | Shortfall |
|---|---|---|---|---|
| August | $1,390 | $1,780 | $240 | −$630 |
| September | $1,410 | $1,860 | $250 | −$700 |
| October | $1,480 | $2,150 | $290 | −$960 |
In this example the store spends $960 more on shipping than it collects in October, about 5% of its $18,400 net sales. That money comes straight out of gross profit. It belongs in contribution margin, not hidden in "general expenses".
Watch the date mismatch. Analytics dates orders by its date type setting (created, paid or completed, under Analytics › Settings), while carrier invoices are dated by when labels were bought or billed. Over a month the difference is small, but a busy last week can shift costs into the next month. Compare quarters if months jump around.
Why shipping costs more than you charge
- Free shipping thresholds. Every order above the threshold ships at your expense. If most orders clear it, most of your shipping is unpaid.
- Flat rates that no longer match carrier prices. Carrier rates rise; your WooCommerce flat rate often doesn't.
- Weight and size. One flat rate for a mug and a cast-iron pan means the pan loses money every time.
- Zones. A single national rate under-charges distant regions and remote surcharges.
- Surcharges and adjustments. Fuel, residential delivery and corrected weights arrive on the invoice after the label was bought.
- Returns. Prepaid return labels are shipping cost with no matching charge.
Finding the orders that lose money on shipping
The monthly total tells you whether there's a problem. To find where, go down to order level.
- Export orders from Analytics › Orders for the month (click Download). The export includes each order's number, date, status and net sales.
- Export your label history from your carrier or label service, with the order number on each label.
- In a spreadsheet, match labels to orders by order number. You'll also need what each customer was charged for shipping: the order screen shows it, and many order export plugins include a shipping total column.
- Add a column: shipping charged − label cost. Sort by it.
Patterns usually jump out: a product that's always heavy, a zone that's always under-charged, or small orders that qualify for a free shipping coupon.
Then compare the shipping loss on each order with its gross profit. An order with $12 of gross profit and a $9 shipping loss still makes money. An order with $6 of gross profit and a $9 loss doesn't. The guide to gross margin by product shows how to get gross profit per product.
What to change
- Raise the free shipping threshold to sit above your current average order value, so it nudges baskets up instead of giving away shipping on typical orders. See how to raise average order value.
- Use shipping classes (WooCommerce › Settings › Shipping › Classes) to charge more for heavy or bulky products.
- Split zones so remote or international areas pay closer to cost.
- Recheck flat rates each time your carrier raises prices.
- Build shipping into price for products where a visible shipping fee hurts conversion. Then the cost is covered by margin on purpose, not by accident.
What Askshelf can and can't tell you
Askshelf still doesn't know what you pay for shipping. Your carrier invoices aren't in WooCommerce, so it can't tell you whether shipping loses money, and its gross profit figure leaves shipping costs out.
It can tell you what customers paid for shipping, alongside net sales and order counts, for any date range:
How much shipping did customers pay in October, compared with September?
Put that next to your carrier total for the month and the difference is your shipping shortfall.
Two newer lookups help you judge whether a product's margin can carry its shipping. Profit gives gross profit per product (with Cost of Goods Sold on), and the sales breakdown can split orders and net sales by customer country, which shows where your distant orders come from:
Which products had the lowest gross profit in October, and which countries did I ship to most?
Divide a product's gross profit by units sold, then compare that with what you pay to ship it. Askshelf is free for 10 questions a month; the profit reporting use case shows the monthly routine.
Next steps
Shipping is one of several costs between gross profit and real profit. The others are payment fees, covered in how payment fees affect WooCommerce profit, and discounts, in how discounts eat into margins. The WooCommerce profit reporting guide puts them together.
Common questions
Does WooCommerce track what I pay for shipping?
No. WooCommerce Analytics reports the shipping customers paid you. What you paid carriers lives in your carrier account, label service or invoices, so you compare the two yourself.
Is the Shipping column in WooCommerce Analytics included in net sales?
No. Net sales excludes shipping. Shipping has its own column in Analytics › Revenue, and total sales is net sales plus taxes plus shipping.
How do I know if free shipping is worth it?
Compare your shipping shortfall (what you paid minus what you charged) with the gross profit from orders that qualified for free shipping. If average order value rose enough to cover the shortfall, it's paying for itself.
See how Askshelf handles this: Profit reporting for WooCommerce