← Tahona Billing Docs Also: prorated storage
Reading · Leakage

The 3 to 15 percent you are not billing.

Ask a small 3PL what share of the work they do goes uninvoiced and you get a shrug and a number somewhere between "a little" and "I'd rather not know". The estimates that circulate in the industry put it between three and fifteen percent of revenue, and the range is wide because it depends on how the billing is done. A warehouse management system that bills from its own transactions leaks less. A workbook that somebody fills in on the first of the month leaks more, and leaks in predictable places.

This is a list of those places. Each one is something we have watched happen, or built a rule against, or both. None of them is a dishonest client or a lazy operator. They are all the gap between what the floor did and what the spreadsheet had a column for.

The checklist

  1. Client names that do not match. The export says HGC, the rate card says Harbor Goods Co., and 212 rows fall off the bottom of the pivot table. In Tahona Billing: an Unknown client exception, fixed once by mapping the name, remembered as an alias.
  2. Charges with no rate on the card. The warehouse started doing kitting in March. The rate card is from January. Every kitting row is work with no price. No rate exception; add the rate to the version in force from the exception itself.
  3. Labor hours that live in a different system. Kitting, rework, and special projects get logged on a timesheet, not in the WMS, and never meet the invoice. Put them in the spreadsheet template as labor.kitting.hour rows; they price like anything else.
  4. Returns nobody counted. Returns come in, get inspected and restocked, and the only record is a note on the receiving bench. returns.unit rows, with the RMA as the reference.
  5. Units past the included count. The order rate includes five units. The order had eight. The three extra are billable at the additional-unit rate, if anyone multiplies. The engine derives pick.unit.additional from the order's unit count; you never import it.
  6. Storage counted on the wrong day. A snapshot on the 1st misses everything that arrived on the 2nd and left on the 28th. Prorated by the day: pallet-days divided by days in the month. See the storage article.
  7. Minimums never applied. The contract says $500 a month minimum. The client did $340 of work. The invoice says $340 because the workbook has no row for the difference. A visible minimum shortfall line, per client, per month, with the policy the contract names.
  8. A rate change applied to the whole month. Or to none of it. A rate that changed on the 16th is two contracts in one month. Effective-dated versions; each prices the days it was in force.
  9. Re-shipped orders billed once. An order ships, comes back undeliverable, ships again. Two picks, two labels, one line on the invoice. Two rows in the export with the same reference are two rows; the usage appendix lists both.
  10. Receipts logged after the close. The truck came on the 30th, the receiving was keyed on the 2nd, and September's invoice went out on the 1st. Imports into an issued month are refused, and a row dated inside an issued month is ignored by the next run, so a late receipt has to be billed on next month's run with next month's date, or as an adjustment line. The close page counts the ignored rows so you see them.

A worked month

The demonstration client on our page, Harbor Goods Co., does 1,206 orders, 14 receipts, 38 or so pallets in storage, 31 returns, and six and a half hours of kitting in September. Here is what happens when the rate card has rates for the first three and not the last two, which is the most common shape we see.

LineQtyRateAmountOn the spreadsheet
Pallet storage, prorated daily38.4$22.00$844.80Billed
Receiving, per pallet14$12.00$168.00Billed
Pick and pack, per order1,206$3.25$3,919.50Billed
Additional units after 5912$0.50$456.00Sometimes
Returns processing31$4.00$124.00Missing
Kitting labor6.5 hr$38.00$247.00Missing
Invoice total$5,759.30
Of which recovered by adding two rates$371.006.4 percent

Three hundred and seventy-one dollars is not a dramatic number. It is six point four percent of one client in one month, which is squarely inside the range everybody quotes and nobody measures. Across twenty clients and a year, it is the salary of the person who does the billing.

How the close reports it. The leakage report shows four tiles: recovered this month (billed under rates added during the close), rates added, rows waived with a reason, and minimum shortfall billed. Below them, what is still open. The first close is usually the biggest number you will ever see on that page, which is the point.

What to do about it this month

You do not need software to run the checklist once. Take last month's export and the rate cards, and for each of the ten items ask whether the invoice could have been wrong that way. Write down the ones you cannot answer. Those are the rows a billing engine would have stopped on and asked about, which is all a billing engine is: a spreadsheet that refuses to drop a row.

The numbers are the demonstration month on the Tahona Billing page; the arithmetic is the real engine's. The rate card calculator shows the gap between a rate card and an invoice for your own client. If you run a 3PL with three to thirty clients, the pilot is open.