Skip to content
AtheronLABS

You're visiting from the United States. Prices are shown in US dollars. Not right?

labs@atheron:~/insights/3pl-billing$ bill --storage --handling --accessorials

Bill what the floor did

Not what the spreadsheet remembers.

As a 3PL, you know the work you did. The hard part is turning it into invoices: a month of picks, pallets, special projects and holds, rebuilt by hand. This guide shows you how to bill straight from your warehouse's own events.

Warehousing · Published October 2, 2026 · 5 min read

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

  1. 01

    Receiving

    Each receipt recorded with its units, pallets or cartons, and any exception: damaged, unlabelled, after hours.

  2. 02

    Storage

    Occupancy measured the way the contract says: by pallet position, by cubic volume or by bin, on the agreed snapshot days.

  3. 03

    Handling

    Picks, packs and shipments counted per order line, per unit or per carton, as each client's rate card defines.

  4. 04

    Accessorials

    Special work started from a scanner or a tablet with a reason code, so it is billable the moment it is done.

  5. 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.

What a client rate card usually holds
ChargeUsually measured byWatch for
StoragePallet position, cubic volume or bin, on snapshot daysPartial periods at the start and end of a contract
ReceivingPallet, carton or unitExceptions such as floor-loaded containers
Pick and packOrder, line or unitKits and value-added services
ShippingShipment or carton, plus carrier costCarrier charges passed through at cost or marked up, as agreed
AccessorialsEvent with a reason codeApproval 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

  1. 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.

  2. 02

    Put rate cards in data

    Even before new software, write each client's rates in one structured place.

  3. 03

    Capture accessorials at the source

    A reason code on a scanner or tablet beats an email at month end.

  4. 04

    Show the client

    A portal with the events behind each charge pays for itself in shorter disputes.

// questions

Short answers.

Do we have to replace our WMS?

Usually not. Billing can read events from the WMS you run, and add capture for the work the WMS does not record.

Can each client have different rates?

Yes. Rate cards are per client, with dates, so a change never rewrites a past invoice.

Does it work with QuickBooks Online?

Yes, built on the QuickBooks Online API. Larger operations can sync to their ERP instead.

// next

Have a project in mind?

Put it through the estimator and get a range in a few minutes. Or tell us about it, and we will come back to you with questions.

3PL billing without the month-end spreadsheet | Atheron Network Labs