Where billing leaks
In most warehouses, billing is reconstructed at month end from the WMS, emails and memory. Storage is easy to bill and handling is mostly captured. What leaks are the accessorials: the rush order, the relabelling job, the hold for inspection, the after-hours receiving, the pallet that had to be rebuilt. Each is small. Together they are often the difference between a client worth keeping and one that quietly costs you money.
The fix is not a better spreadsheet. It is recording each billable event when it happens, against the client and the rate that applies, so the invoice is a sum rather than a reconstruction.
Bill from events, not from memory
- 01
Receiving
Each receipt recorded with its units, pallets or cartons, and any exception: damaged, unlabelled, after hours.
- 02
Storage
Occupancy measured the way the contract says: by pallet position, by cubic volume or by bin, on the agreed snapshot days.
- 03
Handling
Picks, packs and shipments counted per order line, per unit or per carton, as each client's rate card defines.
- 04
Accessorials
Special work started from a scanner or a tablet with a reason code, so it is billable the moment it is done.
- 05
Holds and returns
Inspection holds, returns processing and disposals recorded as events with their own rates.
A rate card per client
Every 3PL contract is a little different. Rates belong in data, edited by your account managers, not in code: storage units and periods, handling units, minimums, accessorial lists and their prices, and the dates each version applies from. When a rate changes, history keeps the old one, so a past invoice can always be explained.
| Charge | Usually measured by | Watch for |
|---|---|---|
| Storage | Pallet position, cubic volume or bin, on snapshot days | Partial periods at the start and end of a contract |
| Receiving | Pallet, carton or unit | Exceptions such as floor-loaded containers |
| Pick and pack | Order, line or unit | Kits and value-added services |
| Shipping | Shipment or carton, plus carrier cost | Carrier charges passed through at cost or marked up, as agreed |
| Accessorials | Event with a reason code | Approval rules for work the client did not request in advance |
Let clients see why
Billing disputes take longer than billing. A client portal that shows each charge with the events behind it, the order, the date and the scan or the photo, settles most questions before they are asked. The same portal lets clients see their inventory, their orders in progress and their open holds, which is usually what they wanted to email about in the first place.
From invoice to the books
Once the invoice is a sum of events, it can go to the accounting system without retyping. A sync built on the QuickBooks Online API creates the invoice against the right customer and items, and payments recorded in QuickBooks flow back so account managers see who has paid. Larger operations do the same with their ERP.
Carriers and retailers
Shipping charges come from carriers, through a shipping platform or each carrier's API, and are passed to the client at cost or with an agreed markup. Retail clients often require EDI for orders, advance ship notices and invoices, each partner certifying on its own schedule. Both are worth scoping early, because they set the calendar more than the code does.
Storage snapshots and cycle counts
Storage is billed from what was on the floor on the agreed snapshot days, so the snapshot has to be right. That depends on locations being accurate, which depends on cycle counts. A billing project is often the moment a warehouse discovers how far its locations have drifted from reality.
Build the counts in: short daily counts by zone, with differences recorded and approved rather than silently corrected, and a snapshot that runs at the same time every period. When a client questions a storage charge, the answer is the snapshot and the count history behind it.
Minimums deserve the same care. A client with a monthly minimum should see on the portal how close they are to it during the month, not only on the invoice, which turns a surprise into a conversation.
Onboarding a new client
Most billing errors start on the first day of a contract. The rate card is typed in from a PDF, the client's item master arrives as a spreadsheet with missing dimensions, and nobody agrees what counts as a pallet. A billing system should make onboarding a checklist: the rate card entered and reviewed by a second person, items imported with their units of measure and dimensions validated, the accessorial list agreed and signed, and a test invoice produced from a week of sample events before the first real one.
The same checklist helps at renewal. When rates change, the new card is entered with its start date and the old one is kept, so the first invoice under the new rates can be checked line by line against the last one under the old.
What it costs, worked out now
The two worked examples below are priced by our estimator from the rate card in force when you open this page: billing from scan events in two buildings with rugged scanners and a two-way QuickBooks Online sync, and a client portal on its own with a one-way sync.
Worked example, priced now
Event-based 3PL billing across two buildings
Scan events, client rate cards, accessorials with reason codes, a client portal and two-way QuickBooks Online sync.
- Build
- ≈ US$120,000 to US$183,000, delivered within 32 weeksCAD 170,800 to 261,200
Prices in your currency are estimates from today's Bank of Canada rate. All invoicing is in CAD or USD.
Estimated effort by role
- Development
- 695 to 1063 h
- Senior backend developer
- 102 to 156 h
- Backend developer
- 101 to 155 h
- Project manager
- 96 to 147 h
- Frontend developer
- 90 to 137 h
- QA engineer
- 87 to 133 h
- Product designer
- 64 to 97 h
- Senior frontend developer
- 54 to 82 h
- Senior engineer
- 52 to 80 h
- Software architect
- 51 to 79 h
- Junior backend developer
- 51 to 77 h
- Senior product designer
- 42 to 65 h
- Junior frontend developer
- 36 to 55 h
- DevOps engineer
- 24 to 36 h
- Mobile developer
- 16 to 24 h
- Technical writer
- 15 to 23 h
- Senior mobile developer
- 12 to 18 h
- Junior mobile developer
- 7 to 11 h
How it is paid
- Deposit 20%
- CAD 34,160 to 52,240
- Discovery 1.6%
- CAD 2,732.80 to 4,179.20
- Data mapping and sandbox connection 2.4%
- CAD 4,099.20 to 6,268.80
- Discovery and site walk-through 4.4%
- CAD 7,515.20 to 11,492.80
- Design approved 6.1%
- CAD 10,418.80 to 15,933.20
- Core features 5%
- CAD 8,540 to 13,060
- Full build 3.3%
- CAD 5,636.40 to 8,619.60
- Sync built and reconciled in sandbox 7.3%
- CAD 12,468.40 to 19,067.60
- Stock, receiving and transfers 13.4%
- CAD 22,887.20 to 35,000.80
- Tracking and devices working 8.9%
- CAD 15,201.20 to 23,246.80
- Testing and fixes 1.6%
- CAD 2,732.80 to 4,179.20
- Pilot site live 4.4%
- CAD 7,515.20 to 11,492.80
- Launch 1.6%
- CAD 2,732.80 to 4,179.20
- Live cutover 2.4%
- CAD 4,099.20 to 6,268.80
- Hypercare 2.4%
- CAD 4,099.20 to 6,268.80
- Rollout 5.2%
- CAD 8,881.60 to 13,582.40
- Holdback, 30 days after launch (10%)
- CAD 17,080 to 26,120
Running it
- Hosting
- ≈ US$344 a monthCAD 490 a month
- Support
- ≈ US$2,500 a monthCAD 3,565 a month
Worked example, priced now
A client portal with charges explained
Inventory, orders, holds and invoices with the events behind each charge, and a one-way sync to QuickBooks Online.
- Build
- ≈ US$52,900 to US$81,000, delivered within 19 weeksCAD 75,400 to 115,300
Prices in your currency are estimates from today's Bank of Canada rate. All invoicing is in CAD or USD.
How it is paid
- Deposit 30%
- CAD 22,620 to 34,590
- Discovery 4.4%
- CAD 3,317.60 to 5,073.20
- Data mapping and sandbox connection 3.3%
- CAD 2,488.20 to 3,804.90
- Design approved 4.4%
- CAD 3,317.60 to 5,073.20
- Core features 13.2%
- CAD 9,952.80 to 15,219.60
- Full build 8.8%
- CAD 6,635.20 to 10,146.40
- Sync built and reconciled in sandbox 10%
- CAD 7,540 to 11,530
- Testing and fixes 4.4%
- CAD 3,317.60 to 5,073.20
- Launch 4.4%
- CAD 3,317.60 to 5,073.20
- Live cutover 3.3%
- CAD 2,488.20 to 3,804.90
- Hypercare 3.8%
- CAD 2,865.20 to 4,381.40
- Holdback, 30 days after launch (10%)
- CAD 7,540 to 11,530
Running it
- Hosting
- ≈ US$176 a monthCAD 250 a month
- Support
- ≈ US$1,000 a monthCAD 1,425 a month
Where to start
- 01
List what you do not bill today
Ask the floor leads which work they do that never reaches an invoice. That list is the business case.
- 02
Put rate cards in data
Even before new software, write each client's rates in one structured place.
- 03
Capture accessorials at the source
A reason code on a scanner or tablet beats an email at month end.
- 04
Show the client
A portal with the events behind each charge pays for itself in shorter disputes.