Cargo-Stack

The Tender Playbook

How a freight tender is actually won — the decision, the mechanics, the judgement, and the 54 checks that run before you submit.

This is not marketing material. It is the intake ritual and the desk procedure I wrote and ran at a global forwarder, digitised into Cargo-Stack and reproduced here in full. Every number in it is the number the software uses.

Print or save as PDF — this page is laid out for it.

Part I · Before you bid

The asymmetry nobody prices in

The highest-leverage thirty minutes of a tender happen before the first rate is typed.

A material air tender costs roughly 120 person-hours across the desk. Every yes is therefore a no to something else — pricing, sourcing and account management all get borrowed from to feed it.

And the errors are not symmetric. A wrong decline costs you one cycle; you bid the next one. A wrong win costs one to three years of negative margin with no clean exit, because you are contracted to the lanes you mispriced.

That asymmetry is why the decision deserves a procedure instead of a feeling. Most tender losses are positioning losses — decided before the first rate is typed.

The scorecard · 11 weighted criteria

Score each criterion 1–5. Weights sum to 1.0. The weighted total lands you in one of four bands.

CriterionWeightWhat you are actually judging
Strategic fit15%target vertical/lane? builds the book we want?
Win probability15%incumbent? relationship? invited or fishing?
GP potential15%margin headroom at a winnable price
Customer relationship10%known buyer? past business? sponsor inside?
Revenue size10%annual revenue if won, vs effort
Operational feasibility10%can the network actually serve every lane?
Procurement / capacity5%buy rates + space sourceable at credible levels
Legal / contract risk5%liability, penalties, non-standard terms
Credit / payment risk5%payment terms, history, exposure
Systems / implementation fit5%EDI, reporting, onboarding burden
Resource / deadline feasibility5%enough desk-hours before the deadline?

The four bands

Weighted scoreVerdict
≥ 4.0BID — go hard
3.2 – 4.0BID — standard
2.5 – 3.2SELECTIVE — minimum-viable bid / winnable lanes only
-Infinity – 2.5NO-BID (override needs a written exception memo)

The nine hard stops

Any one of these ticked is a no-bid regardless of score. “We scored 4.2 but the lane is sanctioned” is not a trade-off, it is a stop. Overriding one requires a written exception memo — feelings-based overrides die in daylight; documented ones become calibration data for next year.

Sanctioned / prohibited trade lane
Unlimited liability with no negotiation path
Impossible service commitments
Customer credit risk above policy
Negative margin without strategic approval
Network gap >25% of requested scope
Required rates cannot be credibly sourced
Unethical procurement process
Inadequate data for a credible quote

Putting a number on “worth bidding”

Expected value = P(win) × annual gross profit × contract years − the cost of bidding. It will not make the decision for you, but it stops “this one feels big” from being the whole argument.

Part II · The desk procedure

Nine chapters, from the shipper’s workbook landing in your inbox to the post-mortem.

01

The lifecycle

The six phases and what actually happens in each.

Setup → Price → Check → Submit → Award → Debrief

A tender is not a form you fill once; it is a file that moves through your desk over weeks and rounds. The phase spine on the board names where a tender sits and, tapped, focuses the toolbar to just that phase’s actions so you are not staring at every button at once.

The board never hides your lanes behind a wizard. Three thousand lanes stay one scrollable workspace — the phases drive the ACTIONS, not the data. Check and Debrief are the two phases that are a discrete act (the readiness check, the post-mortem); the rest are states you work through.

Where this goes wrongMarking Submitted LOCKS every lane price. Do it only when the readiness check is clean — a locked tender that desynced from what you sent is worse than a late one.
02

Ingesting any format

Multi-sheet, matrix, transposed, split, weight-breaks — and the instructions doc.

Drop the shipper’s ACTUAL workbook

You never retype a shipper sheet. Drop their workbook and the AI maps their template — which row is the header, which columns are origin / destination / equipment / the price cell — then every row is extracted deterministically from that map. The extraction is not the AI guessing 3,000 rows; it is one AI mapping call, then exact cell-by-cell reads, so it cannot hallucinate a rate.

  • Layouts handled: one lane per row; an origin×destination matrix; a transposed sheet (attributes down, lanes across); split city/country/airport columns composed into one lane; per-equipment, per-weight-break and per-round price columns; a combined “HKG-LAX” lane in a single cell.
  • Multiple sheets: every tab with enough rows is mapped in parallel; mode tabs and region tabs all come in, info/T&C tabs are skipped by the row filter.
  • Self-heal: the classic AI misread is every column shifted one right (it read the sample’s row-number gutter as column A). If a valid map yields zero lanes, the engine retries one column left and keeps the result only if lanes appear.
Worked exampleDanaher sends a 6-tab workbook: Air, Ocean FCL, Ocean LCL, plus three region tabs, 3,000 lanes, headers on row 3 with a merged title on rows 1–2. Drop it once — all six tabs map in parallel, header row 3 detected, every lane extracted with its exact price cell so the fill-back lands in the right square.
Where this goes wrongIf the header sits on two rows (“2,3” in Winmore), or a column reads oddly, open the “mapped ✎” chip and fix it — the correction is remembered for that customer’s next tender.

The instructions document (Word / PDF)

The rate sheet is not the whole RFQ. The cover letter carries the rules you are bound by. Drop the Word or PDF and it captures the submission deadline, the currency you must quote in, how long your rate must hold, incoterms, payment terms, the transit SLA, the award methodology, the airport/gateway policy, and — the disqualifier — any “do not alter the template” rule. Those pre-fill the Commercial panel.

Where this goes wrongA technically perfect price sheet in the wrong currency, or submitted a day late, is disqualified. The readiness check reads these captured terms and blocks on a currency mismatch or a passed deadline exactly like it blocks a below-cost lane.
03

Pricing strategy

Strategy classes, scenarios, market, history, weight-break ladders, the formula engine.

Buy first, then sell — by strategy

⚡ Autofill pulls your buy from the rate library by lane. Then set the sell. Every lane carries a strategy class — target (win it), competitive (fight for it), cover (place a number you can live without), no-bid — and the bulk margin tool applies a different margin per class in one pass, so you are not pricing 3,000 lanes by hand at the same percentage.

  • The formula engine (SELL = base × mult + add, rounded) prices from buy, market, or a fixed base, scoped to all lanes or one strategy class, with one-click undo.
  • ✨ AI-suggest sells blends strategy margin, a market-anchored clamp, your own history cap on the lane, and any feedback gaps from a prior round.
  • Air weight breaks: +45 / +100 / +300 / +500 / +1000 must each cost LESS per kg than the break below — that is what a break is for. The sanity check flags an inverted ladder.
Worked exampleA lane library-buy of USD 3.80/kg on a “target” lane with an 8% strategy margin lands at 4.10; the same buy on a “cover” lane at 18% lands at 4.48. Bulk-apply by class does both groups at once; the award simulator then shows expected revenue at your win probabilities.

Scenarios: price three ways, submit one

◫ Save the whole sell column as a named snapshot — “aggressive”, “defend”, “floor” — and compare them side by side before you commit. A scenario is not a guess you lose; it is a position you can return to when round two moves the market.

04

The quality gate

The readiness check (~50 rules) and the exposure check — numbers and words.

Readiness — is the bid internally sound?

Before you send, ~50 rules run across five families — money, coverage, compliance, data, strategy. The stethoscope is not a button you press to ask; it is a live state, red with a count while anything blocks, teal when nothing does. Nobody runs a check at 5pm on deadline day; they just press Submit — so the check runs continuously.

  • Money: sell below buy; margin below floor; a decimal slipped an order of magnitude; an inverted weight-break ladder; a minimum below the first break.
  • Coverage: quoted lanes left blank; a whole award region unpriced; unit/mode mismatch (air priced per container, FCL priced per kg).
  • Compliance: the currency you quoted vs the currency the shipper requires; a transit slower than the SLA you committed to; a sanctioned-country lane.
Worked exampleA 3,000-lane bid comes back “12 blocking”. Opened: 9 lanes sell below buy (a bulk-margin pass skipped them because they had no buy yet), 2 lanes carry a decimal slip (0.48 where the market is 4.80), 1 lane is priced in HKD on a USD-required tender. Ten minutes of fixes turns a disqualified or loss-making submission into a clean one.
Where this goes wrongA blocking issue is the difference between a forwarder who KNOWS three lanes are below cost and one who finds out from the buyer twelve months into the contract.

Exposure — what did the bid FORGET to say?

The other half, and the half that costs more. Readiness asks whether the numbers are sound. Exposure reads the WORDS: free time you did not state, surcharges you did not exclude, filings you did not price, scope you did not bound. Nothing looks wrong — the margin column is green — and you have silently agreed to do something unpriced on every shipment for the whole term.

05

Submission & currency

Write back into their exact template; lock; convert on export.

Back into the shipper’s own workbook

One click writes every anchored price into the shipper’s ORIGINAL workbook — same tabs, same rows, same format — no copy-paste, no reformat, no format rejection. This is why the extraction anchored every lane to its exact price cell: the fill-back lands in the right square even in a 3,000-lane six-tab file. If their instructions said “do not alter the template”, this is how you honour it.

Submission currency — quote in one, cost in another

You price internally in your working currency but the shipper demands the bid in theirs. Set the submit currency and the FX on the Commercial panel; the shipper-file export converts every rate on the way out, so your internal HKD becomes their required USD without a second spreadsheet. The compliance rule blocks if the lanes are still in the wrong currency at submission.

Where this goes wrongA missing FX rate is a silent failure: the cell exports blank or raw. Confirm the submit-currency FX is set before you generate the shipper file, and spot-check one converted lane.
06

Rounds & feedback

Diff a new-round file; carry baselines; read feedback; best-and-final.

The round-diff engine

A tender is rarely one-and-done. When the shipper sends the next-round file, drop it and the board DIFFS it against your lanes on a unique key: lanes added (new, inserted), lanes removed (dropped from this round), lanes changed (volume or requirement moved), and the pricing columns to refill. You do not re-map or re-key — you see exactly what moved.

Baselines & feedback

Revised-round files arrive pre-filled with your last submission; the engine loads that as the baseline sell AND as prev, so you adjust rather than retype. A feedback file maps the buyer’s per-lane comments (rank, position, “reduce”) so you know exactly where you were high — and the suggest tool closes those gaps first.

Where this goes wrongKeep the losing rounds. The diff between what you bid and what won is next quarter’s edge — it is the only place the market tells you its real clearing price.
07

Award & debrief

Load the result; zero-vs-blank; actualize volume; the post-mortem that teaches.

The award file

Load the result and the board marks won lanes and your allocation %. The summary then reads participation, mode split, incumbent share and the win rate. Award volume is actualized per lane in KG (assume 100% when no split is given) so the job P&L and next round use real numbers, not the tender estimate.

Where this goes wrongZero is not blank. A lane won at 0% allocation is a loss on that lane; a blank is unknown. Enter 0 when a charge is n/a; a blank never updates. The award-integrity check flags won lanes with no volume and lanes marked won at 0%.

The debrief that feeds next year

Win or lose, capture WHY — at what price, against whom, what moved the buyer. The structured post-mortem records it and that record feeds future pricing, so the next tender for this customer starts smarter. This is where the product learns your market instead of you re-learning it every year.

08

Distribute across offices

Cascade a global tender down the org ladder and consolidate back up.

The org ladder

A multinational tender is not priced by one desk. ▤ Distribute classifies every lane to a country and region from its O/D codes, buckets the lanes by whichever axis the tender is organised on (origin country, destination region…), and lets you assign each bucket to a desk, export just that desk’s slice, and watch completion and gaps roll back up. HQ sets policy; regions own their trades; countries fill the rates.

Worked exampleA 1,200-lane global tender splits by origin country: 480 lanes to the CN desk, 300 to VN, 210 to the HK desk, the rest across EMEA. Each desk exports its slice, prices it, and drops it back; the roll-up shows CN 100% priced, VN blocking on 40 lanes — you chase one desk, not twelve hundred lanes.
Where this goes wrongNothing is ever dropped: a lane whose code cannot be classified lands in one visible “Unassigned” bucket, because a lost lane is a lost bid. Assignments are remembered per customer, so next year’s HK lanes route to the HK desk automatically.
09

Playbook: real situations

Worked plays for the tenders that actually land on your desk.

The 3,000-lane multi-sheet RFQ, wrong currency

Shipper sends a six-tab workbook, lanes priced-out in HKD columns, but the cover letter requires the bid in USD, valid 90 days, FCA, submitted in nine days. Play: drop the workbook (all tabs map, 3,000 lanes extracted) → drop the cover letter (currency USD, validity 90d, incoterm FCA, deadline captured) → ⚡ autofill buys, ✨ suggest sells → set submit-currency USD + FX → run the readiness check (it will flag any HKD-priced lane) → fix → export shipper file (converts to USD in their template) → mark submitted (locks).

Incumbent defence vs a low-baller

You hold 40 of 120 lanes as the incumbent; a competitor is buying share. Play: filter to your incumbent lanes (the incumbent column is extracted), set them “target” with a thin defence margin, set the lanes you do not hold “competitive”, and the rest “cover”. Save this as an “aggressive” scenario; save a “floor” scenario at your walk-away margin. Submit aggressive round 1; if feedback says you are high on specific lanes, apply the floor scenario to just those.

The bulky-and-dense consolidation

Two houses under one MAWB — one dense (1,000 kg in 5 m³), one light and bulky (100 kg in 4 m³). Rated apart they cost 1,000 + 668 = 1,668 chargeable kg; rated as one MAWB they cost max(1,100 gross, 9 m³×167) = 1,503 — a 165 kg consolidation dividend. If it will not fit one ULD, the MAWB/HAWB view splits it across two, keeping each house together where it fits, and the multi-ULD optimiser tells you which stack kills the most dead freight.

Part III · The 54 checks

54 checks

What the readiness check looks for, why each one matters, and how to clear it.

Money20
sell below buyblocks submission
Why it matters
You would pay to move this freight. On a one-for-all award this single lane can outrun the margin on everything else in the basket.
How to clear it
Raise the sell above the buy, or decline the lane. If the buy is wrong, fix the buy — a wrong cost makes every margin figure on this tender fiction.
export FX missingblocks submission
Why it matters
Without a locked rate the export writes your internal numbers into a foreign-currency column unchanged. HKD figures submitted as USD are 7.8× low, and that is a rate you may be held to.
How to clear it
Set FX to submit ccy in the Commercial panel — one number, and the export converts.
statistical outlier vs tender clusterblocks submission
Why it matters
A rate many times its own cluster median is almost never a pricing decision — it is a unit mix-up (45/kg typed as 4500) or a missing decimal. It passes every other rule because it is still above buy.
How to clear it
Check the unit column on this lane against its neighbours.
rate outside plausible range for its unitblocks submission
Why it matters
This is an order-of-magnitude check, not a price opinion — the band is wide enough to hold the cheapest and the dearest real rate in any currency a Hong Kong desk quotes. Falling outside it means a decimal moved: 45/kg typed as 4.5, or 4,500 typed as 45,000. It survives every other rule because it is still above buy and, on a small tender, the cluster scan has too few siblings to call it.
How to clear it
Check the decimal point and the unit column together — one of the two is wrong.
weight break invertedblocks submission
Why it matters
A higher break must cost LESS per kilo — that is what a break is for. An inverted ladder means a heavier shipment bills more per kilo than a lighter one, so either you lose money on every large shipment or the buyer's analyst spots it in eight seconds and stops trusting the whole sheet. It is the most-noticed error in air tender submissions.
How to clear it
Sort the ladder: MIN ≥ +45 ≥ +100 ≥ +300 ≥ +500 ≥ +1000 per kg. If a break genuinely rises, the ladder is wrong, not the traffic.
gateway shifted but the truck to it is not pricedblocks submission
Why it matters
These lanes fly from a different gateway than the place the shipper named — usually the right call, and usually cheaper on the air rate. But it buys a road leg that somebody has to pay for, and the charge detail on these lanes has no pre- or on-carriage line in it. Priced this way the haulage is given away on every shipment, for the length of the contract, and it is the kind of leak that only shows up in the job P&L a year later.
How to clear it
Add the pickup / drayage / RFS line for the leg between the named place and the gateway, or confirm in writing that the shipper is arranging it themselves — then note that on the lane so the next round does not have to rediscover it.
priced below the walk-away you set yourselfblocks submission
Why it matters
A walk-away is not the margin floor — the floor is policy, the walk-away is the number this desk decided, while calm, that this particular lane is not worth taking below. Crossing it without a written reason is the single most common way a tender is won at a price nobody would have agreed to on the day it was set.
How to clear it
Either put the price back above the walk-away, or write the reason on the lane — a strategic loss-leader is a decision and belongs on the record; an unexplained one is a slip that shows up as a margin surprise twelve months from now.
sell column looks like a copy of buyblocks submission
Why it matters
Several lanes have a sell exactly equal to the buy, to the cent. One lane is a decision; this many is the cost column pasted into the price column — a whole tender submitted at zero margin, and won.
How to clear it
Check which column the sell rates came from, then reprice. If some of these really are at-cost lanes, note them so the pattern is visible next round.
FX rate looks invertedblocks submission
Why it matters
Applying this rate to your own numbers produces submitted figures far outside any real price for the unit. The usual cause is the familiar direction of a pair being typed in the box that wants the other one — 7.8 where 0.128 belongs. Every rate then submits 7.8× high, you lose every lane, and the sheet looks like it was never checked.
How to clear it
The box wants: 1 internal currency = X submit currency. Multiply one of your own rates by it and read the answer out loud before you export.
margin below 8% floorreview before sending
Why it matters
Below your own floor there is nothing left to absorb a fuel move, a re-weigh, or a demurrage day — and contract lanes get all three.
How to clear it
Reprice, or raise the floor for this customer deliberately so the number on screen is the number you meant.
far from market benchmarkreview before sending
Why it matters
A rate 60% off the index is either money left on the table or a bid nobody will believe. Buyers benchmark too, and an unbelievable rate invites an audit of the whole sheet.
How to clear it
Check the unit and the currency first — most large gaps are a per-kg quoted per-shipment or vice versa, not a pricing decision.
minimum charge below its own first breakreview before sending
Why it matters
A MIN lower than the first break × its own weight can never apply, so the minimum charge is decoration. Every small shipment on this lane bills at the per-kilo rate, which for a 3kg AWB is a fraction of what the airline charges you for the same booking.
How to clear it
Set MIN to at least the first break rate × the break weight, or to your airline minimum — whichever is higher.
margin implausibly highreview before sending
Why it matters
Above 200% on a contract lane the usual cause is a unit or currency mix-up on one side of the pair, not a pricing decision. If it IS deliberate, it is a lane you will not win, and on a one-for-all award an unwinnable lane costs you the whole basket.
How to clear it
Check that buy and sell are in the same currency and the same unit before treating this as a margin.
the same gateway is charging two different amounts for the same thingreview before sending
Why it matters
Local charges belong to the gateway, not to the lane — HKG export handling is HKG export handling whether the box flies to Frankfurt or Los Angeles. Two lanes leaving the same gateway with different amounts for the same charge is almost never a pricing decision; it is a typo, a half-finished fill-down, or a tariff that was updated on some rows and not others. In a three-hundred-row grid it is invisible, and the shipper sees it before you do.
How to clear it
Pick the correct amount and apply it to every lane through that gateway. If the difference is deliberate — a different service level, a commodity surcharge — say so in the lane note so the next round does not flag it again.
priced without a costreview before sending
Why it matters
These lanes have a sell and no buy, so every margin figure on this tender — including the floor check — is blind on them. You will not know you are under water until the invoice from the co-loader arrives.
How to clear it
Put a cost in, even an estimate marked as one. A rough buy makes the margin column useful; a blank buy makes it fiction.
one rate repeated across unlike lanesreview before sending
Why it matters
The same sell rate appears on many lanes whose COSTS differ, which means the margin swings wildly across them. That is the signature of a dragged Excel cell rather than a flat-rate policy — a real flat rate is quoted where the costs are alike.
How to clear it
Spot-check three of these against their buy rates. If it is a deliberate flat rate, it is fine; if it is a drag-fill, the low-cost lanes are underpriced and the high-cost ones are losing.
air lanes with no dim factor agreedreview before sending
Why it matters
This is the largest silent leak in air tendering. At 1:6000 a 1cbm shipment is 167 chargeable kilos; at 1:5000 it is 200 — a 20% revenue difference on identical freight. If the tender does not state it, the shipper applies theirs, and theirs will be the one that suits them.
How to clear it
State the dim factor you priced at in the Commercial panel and repeat it in your cover note. If the shipper has specified one, price at theirs — but know which you used.
air lanes with no minimum chargereview before sending
Why it matters
Other lanes in this tender carry a MIN, so the column exists and these are blank rather than not asked for. Without a minimum, a 4kg shipment bills at the per-kilo rate while the airline still charges you a full AWB — the smallest shipments become the ones that lose the most.
How to clear it
Copy your airline minimum into the MIN column for these lanes.
long contract on short-validity ratesreview before sending
Why it matters
The contract runs longer than the rates behind it, and the fuel methodology is all-in rather than a floating index — so there is no mechanism to pass a GRI, a peak-season surcharge or a fuel move through to the shipper. You have quoted a year at this quarter's cost and agreed to absorb whatever the year does.
How to clear it
Either move to a floating index or an all-in with a stated review point, or put a rate validity and a re-open clause in the cover note. "Rates valid to <date>, reviewed quarterly" is normal and buyers expect it.
DG lane — verify DG fees includedworth a look
Why it matters
DG surcharges, packing checks and the declaration itself are routinely left out of a rate that was copied from the general-cargo line above it.
How to clear it
Open the charge breakdown and confirm the DG line is there before submitting.
Disqualification6
transit slower than requiredblocks submission
Why it matters
Transit is scored before price on most RFQ grids. A lane that misses the stated transit is usually removed from the comparison entirely, so the rate never gets read.
How to clear it
Find a faster routing or service, or decline. Do not submit a slower transit hoping the price carries it — it is a filter, not a trade-off.
sanctions screening neededblocks submission
Why it matters
This lane touches a country under an active sanctions regime. The screening obligation sits with the forwarder, not the shipper, and quoting first and checking later is how a small forwarder acquires a problem that outlives the tender.
How to clear it
Screen the parties and the commodity, and confirm your carrier and your insurer will carry it, before this lane goes into a submission.
declined lanes in a must-quote-all tenderblocks submission
Why it matters
Cherry-pick = N means the shipper is buying the whole basket. A declined lane is non-compliance, and most RFQ templates drop a non-compliant submission whole rather than lane by lane — so the lanes you priced well go with it.
How to clear it
Price every lane, even thinly, or tell the buyer in writing before the deadline which lanes you cannot cover and ask for a waiver. A written waiver is compliance; a blank cell is not.
deadline has passedblocks submission
Why it matters
Late submissions are dropped by the portal, not by a person, so there is nobody to appeal to.
How to clear it
Write to the buyer now and ask whether a late submission will be accepted. Ask before you finish pricing, not after.
DG commodity with no DG laneblocks submission
Why it matters
The commodity described in this tender is dangerous goods, and not one lane is flagged DG. That means general-cargo rates have been quoted for freight that needs a declaration, DG-capable carriage, and a surcharge — and the shortfall is found at the airport, by which point the rate is contracted.
How to clear it
Confirm the UN class and packing group with the shipper in writing, reprice with the DG surcharge and handling, and check your carriers actually accept it on these lanes.
transit required but not offeredreview before sending
Why it matters
The shipper asked for a transit time on this lane and the cell is empty. Transit is usually scored before price, and a blank scores zero — the rate underneath it is never compared.
How to clear it
Put the transit in. An honest slower number scores better than a blank.
Completeness10
empty sell (must-quote-all tender)blocks submission
Why it matters
This tender says cherry-pick = N, which means the shipper reads a blank lane as a failure to respond, not as a decline. Most global RFQ templates disqualify the whole submission — every lane, including the ones you priced well.
How to clear it
Price the lane, or mark it Declined so it submits as an explicit no-bid.
extraction coverage lowblocks submission
Why it matters
Rows in the shipper file never became lanes, so they are unpriced and invisible. This is the failure mode that loses a tender silently: the sheet you send back looks complete because you never saw the rows that are missing.
How to clear it
Open ⚙ mapping, check the header row and the price columns, and re-import.
lane cap reachedblocks submission
Why it matters
The importer stops at 10,000 lanes. At exactly the cap there is no way to tell a file that ended from a file that was cut off.
How to clear it
Split the workbook by sheet or region and import each part.
same lane priced twice, differentlyblocks submission
Why it matters
The same origin, destination, mode and unit appears more than once at different rates. The buyer will take the lower one and ask which is real — usually in front of the person who has to approve you. It comes from a multi-sheet import where one lane sits on two tabs.
How to clear it
Delete or decline the duplicate. If the two rates are for genuinely different services, put the difference in the service or unit column so they stop looking like the same lane.
deadline close with lanes unpricedblocks submission
Why it matters
The lanes left are the hard ones — that is why they are still blank. They need a co-loader rate, and a co-loader rate needs somebody at the other end to answer.
How to clear it
Send the gap list to your co-loaders now rather than after the rest is finished. If nothing comes back in time, decide deliberately between a padded rate and a decline — do not let the deadline decide by default.
nothing to submitblocks submission
Why it matters
The tender has no lanes in play at all — either the import found nothing or everything has been declined.
How to clear it
Re-import the shipper file and check ⚙ mapping, or confirm this tender is deliberately a no-bid and mark it so.
unpriced lanes (cherry-pick allowed)worth a look
Why it matters
Allowed, but a blank lane still tells the buyer you have no coverage there — which is what they remember when the next tender is scoped.
How to clear it
Price what you can even thinly, or decline explicitly so it reads as a choice.
same lane listed twiceworth a look
Why it matters
Harmless to price, but it inflates the lane count the tender is judged on and doubles this lane's weight in your own volume and margin totals.
How to clear it
Decline one of the two so the count and the totals are true.
no deadline recordedworth a look
Why it matters
Without a deadline nothing on this board can warn you, and the tender competes for attention with whatever is loudest that day.
How to clear it
Put the deadline in, in the shipper's timezone, and take an hour off it — portals close on their clock, not yours.
no commodity recordedworth a look
Why it matters
The commodity decides whether the rate you quoted is even the right product — DG, perishables, batteries, magnets, oversize and reefer all reprice a lane, and half of them change which carriers will take it.
How to clear it
Ask. It is one line in a reply and it is the cheapest question in the tender.
Data hygiene9
rate will submit BLANKblocks submission
Why it matters
The cell shows a number but it is stored as text — a thousands separator, a currency prefix, or a stray space. Number() cannot read it, so this lane counts as unpriced and exports EMPTY. You will look at your own sheet, see the rate, and have no idea the shipper received a blank. This is the failure mode that loses tenders in silence.
How to clear it
Retype the rate as a plain number — no comma, no currency, no space. Put the currency in the currency column where the export can convert it.
negative rateblocks submission
Why it matters
A negative rate is a sign error or a credit note that landed in a rate column. Exported into a tender grid it either voids the lane or, worse, is read as a rebate you have offered.
How to clear it
Remove the sign. If it is genuinely a rebate, it belongs in the charge breakdown, not in the rate.
origin same as destinationblocks submission
Why it matters
A lane from a port to itself is a mapping error — usually one column read twice. It submits as a real priced lane and tells the buyer nobody read the sheet.
How to clear it
Open ⚙ mapping and check which column feeds destination.
currency mismatchreview before sending
Why it matters
A tender compares numbers, not currencies. A USD figure sitting in an HKD column is read as 7.8× cheaper than it is — you win the lane and lose the money.
How to clear it
Convert the lane into the tender currency, or set the submit currency and FX in the Commercial panel so the export converts it for you.
port code does not match the modereview before sending
Why it matters
A five-character seaport code on an air lane (or a three-letter airport code on an ocean lane) means two sheets were merged and the codes came from the wrong one. The lane will match the wrong schedule, the wrong rate and the wrong transit.
How to clear it
Air lanes take IATA stations (HKG, LAX). Ocean lanes take UN/LOCODE (HKHKG, USLAX).
port field is not a codereview before sending
Why it matters
A city name, a lowercase code or a code containing 0 or 1 (UN/LOCODE excludes both, because they read as O and I) means the importer never resolved this field. It will not match a schedule, a rate or a benchmark, so this lane is priced with no reference data behind it.
How to clear it
Replace with the code — HKHKG / HKG. If the shipper's sheet uses names, map the column in ⚙ mapping so it resolves on import.
priced lane with no unitreview before sending
Why it matters
Other lanes in this tender carry a unit and this one does not, so the sheet is inconsistent rather than unit-free. A rate with no unit is not a rate: 4,500 is a normal container and an absurd kilo, and the buyer will pick whichever reading suits them.
How to clear it
Fill the unit, or map the unit column in ⚙ mapping if the shipper's sheet has one.
priced on the wrong basis for the modereview before sending
Why it matters
The unit belongs to a different mode — an air lane quoted per container, or an FCL quoted per kg. The buyer reads the number at the basis their own sheet expects, so a per-container figure read as per-kg (or the reverse) is wrong by orders of magnitude: the error that wins the lane and loses the money.
How to clear it
Set the unit to the one the mode uses — air per kg, FCL per container, LCL per cbm/RT — or fix the column in ⚙ mapping if the shipper sheet put the unit in the wrong place.
transit time implausibleworth a look
Why it matters
Over 120 days, or zero, is a typo rather than a routing. It exports into a scored column.
How to clear it
Retype the transit in days.
Strategy9
loss lane in a one-for-all awardblocks submission
Why it matters
The award methodology is one-for-all, so the buyer takes every lane or none. A lane below cost is not a lever here — there is no separate award to win with it. It is simply a loss you have agreed to carry for the length of the contract.
How to clear it
Reprice the lane above cost, or accept the loss with a number attached: lane volume × the gap × the contract months, so the decision is made with the figure in view.
price cut hard vs previous roundreview before sending
Why it matters
A cut of more than 40% between rounds is usually a reaction to feedback rather than a costed decision. It also teaches the buyer that your first number was soft, which is the position you least want going into a final round.
How to clear it
Check the margin after the cut. If the lane is now below your floor, a smaller cut with a stated reason beats a large one without.
round-2+ concession beyond any planreview before sending
Why it matters
This is a later round, and these lanes dropped more than a QUARTER below your own previous submission while the remaining margin fell under 10%. That is the shape of a 1am panic cut, not a planned concession — a BAFO price you cannot explain later is margin you never get back, for the life of the contract.
How to clear it
Re-check each lane against its floor before export. Trade, don't give: match any cut with something back (volume commitment, shorter validity, scope). If the cut was decided calmly, note the rationale on the lane so the post-mortem can tell discipline from panic.
more than half the tender not bidreview before sending
Why it matters
A submission covering under half the lanes reads as "this forwarder cannot do our business", and that is what gets remembered when the next tender's invite list is drawn up — regardless of how good the lanes you did price are.
How to clear it
Either get co-loader coverage for the gaps before the deadline, or write to the buyer and ask to be considered for the region you are strong in. Being the best on one trade lane is a position; being half-present on all of them is not.
a whole region left blank under a by-region awardreview before sending
Why it matters
This tender awards by region, so a region with no priced lane is not a gap you can fill later — it is a whole region handed to a competitor in one decision, including the lanes in it you could have won. Blank reads as "no coverage", not "no bid".
How to clear it
Price at least the anchor lanes in each region you want, or decline the region explicitly so it reads as a choice rather than a miss.
price increased vs previous roundworth a look
Why it matters
Later rounds are read as concessions. A rate that goes up without a stated reason is the commonest way a shortlisted forwarder gets dropped between rounds.
How to clear it
If the increase is real (fuel, equipment, a corrected cost) say so in the notes so the buyer has something to take to their own approver.
every lane at the same marginworth a look
Why it matters
A single margin applied across every lane reads to a buyer as a formula rather than a costed bid, and a formula invites one blanket request: take X% off everything. Lanes where you are strong should carry more, and lanes you want should carry less.
How to clear it
Differentiate deliberately — thin where you need the volume, fuller where you have the only good routing.
more rounds than the tender saidworth a look
Why it matters
The tender said how many rounds it would run and this is past that. Extra rounds after the stated last one are usually a buyer testing whether there is more to give, not a live comparison.
How to clear it
Hold, or move something other than price — transit, free time, payment terms, a volume commitment. Conceding again teaches the next tender that your rates have another round in them.
bidding blind against a named incumbentworth a look
Why it matters
These lanes name who holds them, and you have neither a previous round nor a benchmark to price against — so the number is a guess against somebody who already knows the volume, the pattern and the shipper's tolerance.
How to clear it
Two cheap moves: ask your co-loader what the lane is trading at, and ask the shipper what the incumbent is not doing well. The second question wins more lanes than price does.

The software that runs this

Everything in this playbook is implemented in Cargo-Stack — the bid/no-bid scorecard, the ingest engine, the 54-check readiness gate, the margin cascade. Fourteen-day trial, every feature, no card.