Pricing

How to build a rate card that quotes itself

Most cards describe services. Enquiries describe jobs. That gap is why your quotes need a person.

Almost every 3PL has a rate card. Almost none of them can be quoted against without a person in the loop. The reason is not missing rates — it is that the card describes services when an enquiry describes a job.

The card that cannot answer the question

Here is a rate card line most warehouses have some version of:

ServiceRateUnit
Container unload$450Per container

Now here is a real enquiry: "Two 20ft containers, palletized, arriving Thursday evening."

That line cannot price it. Is $450 the 20ft rate or the 40ft rate? Does it assume floor-loaded? Does Thursday evening attract the after-hours tier? Every one of those questions has to go to a human, which is why the quote takes until Monday.

Price the variants, not the service

A card that can be priced automatically has one row per combination that changes the number. For container work in a typical 3PL that is four attributes:

  • Container size — 20ft or 40ft
  • Load type — palletized or floor-loaded
  • SKU tier — the ceiling that sets the sort effort
  • Timing — standard hours or after hours

Which produces rows like this:

RuleRateUnit
Unload — 20ft — palletized$220Per container
Unload — 40ft — palletized$280Per container
Unload — 40ft — floor-loaded — to 5 SKUs$480Per container
Unload — 40ft — floor-loaded — to 20 SKUs$620Per container
Pallets supplied$12Per pallet
After hours$150Flat surcharge

Same business, same prices. The difference is that every question the enquiry raises is now a column, so the lookup is deterministic.

Four rules that keep it deterministic

1. A blank attribute is a wildcard. A filled one is a requirement.

If a row says 40ft and the enquiry never mentioned a size, that row must not match. It is tempting to let it through — it is also how a customer gets billed a 40ft rate for a 20ft container. Blank means "applies to any", filled means "only this".

2. Two rows that fit equally well means no row.

If two rules match a job with the same specificity, the enquiry did not say which. Picking the cheaper one is generous and wrong; picking the first one is arbitrary and wrong. The correct behaviour is to leave that line unpriced and let a person decide.

3. A SKU tier is a ceiling, not an equality.

Four distinct SKUs should bill at the five-SKU tier. A tier is the bracket a job falls into, so the lookup takes the lowest tier that is greater than or equal to the count.

4. A rate of zero is an unfilled cell, not free work.

Blank rates happen — someone added the row and never priced it. Treating $0 as a real price quotes the work at nothing. Treat it as missing and leave the line unpriced.

Customer cards and the published card

Most 3PLs have negotiated rates for their regulars and a list rate for everyone else. The lookup order that works is: this customer's own rate first, then the published rate, then unpriced.

Two details matter. First, match the customer on the verified sending address, not the display name on the email — a display name is typed by the sender, so anyone could set theirs to a regular's name and be quoted their negotiated rates. Second, when you do fall back to the list rate for a customer who has a card, say so on the draft. A silent fallback is how a regular gets quoted list price and nobody notices until they call.

Never show a total you cannot stand behind

If three lines price and one does not, do not show the sum of three. A partial total presented as "the total" is the single most dangerous number in a quote, because it looks finished. Show the priced lines, show the unpriced ones as unpriced, and leave the total empty. An empty total is a signal a human reads in a second.

The test

Take the last ten enquiries that actually arrived. For each, ask: could someone who has never met your business price it using only the card? Every time the answer is no, the reason names the column you are missing.

Rapid Ai 10x prices against exactly this structure. Adriana matches on service code plus the variant attributes, refuses to guess when two rules fit equally, falls back to the list rate rather than dead-ending — and says on the draft when she did. See the quoting agent or read the 2026 cost ranges.

Rapid Ai 10x

One platform. Every shipper. Every lane.

Find shippers. Win the contract. Fill your space. All in one place.

Start with a guided pilot on your own accounts.