How to audit a ShipBob invoice, line by line

ShipBob5 min read

A ShipBob invoice arrives as one long list. There are no section headers, no subtotals by activity, and no comparison against last month. Everything you need in order to check it is in the file, but nothing about the layout helps you check it.

Step 1: get the invoice in a form you can sort

The PDF is the worst version of your invoice. Use the API instead. ShipBob exposes billing at https://api.shipbob.com/2.0/invoices, paginated by cursor, and each invoice carries its fee lines with an amount, a quantity, a date, and a description string.

If you would rather not deal with a token, export the invoice to CSV from the merchant dashboard. Everything below works the same way. The only thing that matters is that each fee ends up as one row you can group and sum.

Step 2: collapse the description strings into fee types

The description field is free text written by whoever configured the fee. You will see Pick Fee - First Item, Pick Fee First Item, and Picking (1st item) describing the same activity in the same account across different months. If you group by the raw string, your totals move whenever someone edits a label.

Map every string to a small set of canonical types first. A workable starting set:

  • pick, split into first item and each additional item
  • pack
  • storage, split by unit: bin, shelf, pallet
  • receiving, split into per unit and per labor hour
  • returns processing
  • kitting and assembly
  • shipping postage, kept separate from shipping markup
  • surcharges: peak, card payment, everything else
  • monthly minimum
  • account or platform fee
  • credits and adjustments

Two details save you from wrong numbers later. Check the additional-item pick before the first-item pick, or Pick Fee - Additional Item collapses into the first-item bucket and you end up comparing two different rates as if they were one. And classify by the sign of the amount, not only by the words: a line called Fulfillment Adjustment Surcharge that arrives as a positive number is a charge, not an adjustment, no matter what it is called.

Step 3: the eight places errors actually hide

These are ordered by how often they turn up on a real invoice, not by how much money each one carries.

1. The same charge twice

Group lines by order reference, fee type, and amount. Two identical pick fees against the same order id on the same day is not a coincidence. Duplicates usually come from a retried sync or a manual correction that got posted instead of replacing the original.

2. A surcharge that quietly became permanent

Take every fee type that is not in your rate card and check how many months in a row it appears. A one-off accessorial is normal. The same accessorial in four consecutive invoices is a rate change nobody told you about.

3. A fee type you have never been billed before

Diff the set of fee types in this month against the union of the last six. Anything new deserves one email before it becomes the new normal. This is the cheapest check on the list and the one people skip.

4. Rates above the quote

Divide the line amount by the quantity and compare against the rate card. Do this per fee type, not on the total. A pick fee that moved from $0.20 to $0.25 is invisible in a monthly total and worth four figures a year at 8,000 orders a month.

5. Credits that were promised and never arrived

Keep a list of every credit anyone promised you in email or on a call, with a date and an amount. Then check the invoices after that date for a matching negative line. Credits agreed in a support thread and never issued are the single most recoverable category, because the promise is in writing and nobody disputes it.

6. Storage billed above what you actually stored

Compare the billed storage units against your own inventory snapshot for the same period. Storage is billed on occupancy the warehouse recorded, and occupancy records lag physical moves. Pallets consolidated mid-month are frequently billed for the whole month.

7. Receiving above the free allowance

Most contracts include a number of free receiving hours per shipment or per month. Sum the hours billed, subtract the allowance, and check that only the overage was charged.

8. Peak surcharges outside the peak window

Your contract names the window. A peak surcharge dated outside it is not a judgement call, it is a date comparison. This is the easiest finding to win an argument about, because there is nothing to interpret.

Step 4: three numbers to compute even when nothing is wrong

NumberHow to compute itWhat it tells you
Cost per orderTotal invoice minus postage, divided by order countYour real fulfillment cost, independent of shipping mix
Minimum utilizationBillable activity divided by the monthly minimumWhether you are paying for volume you never used
Shipping markupBilled postage against the carrier rate for the same serviceWhether the markup is inside the cap you agreed to

None of these three is a billing error. All three are money. Cost per order that drifts up while your order mix is unchanged is the earliest signal that something in the fee structure moved.

What to do with what you find

Write one email per invoice, not one per finding. List each disputed line with its line id, its date, its description exactly as it appears on the invoice, the amount, and one sentence saying why it is wrong. Ask for a credit on the next invoice rather than a refund: it is easier for the other side to approve and it lands faster.

Keep the arithmetic in the email. A claim that says 21 duplicated pick fees on orders listed below, $46.20 gets processed. A claim that says your invoice looks too high gets a phone call.

If you want the whole thing done for you, WareAudit connects to ShipBob and runs these checks on every invoice, then hands you the letter. There is a sample report with real engine output if you want to see the shape of it first.

Have us run these checks on your invoices.

Send three invoices and get the findings in dollars, with the lines behind each one. The first audit is free.

Get a free audit