How to price a freight RFP from rate history
A shipper's freight RFP usually arrives as an Excel file with hundreds of lanes, a few tabs of instructions, and a deadline. A sound way to price it for a small brokerage is to start from what you actually paid carriers on the same lanes, then add your margin. The hard part is not the arithmetic. It is matching each lane in the shipper's template to the right row of your own history, and noticing the lanes where there is no row to match.
This guide walks through that method by hand. The last section explains how LaneMapper does the same steps.
What you need before you start
- The RFP as the shipper sent it. Do not reformat it first. You will need to hand it back in their format.
- Your lane rate history. One row per lane with the average carrier buy rate, ideally for the last 12 months, plus the number of loads behind each rate.
- Your markup and fuel assumptions. Decide them before you look at individual lanes so you do not drift lane by lane. The guide on markup versus margin in a freight bid explains how to state them without confusing yourself.
Step 1: Read the whole RFP before touching a rate
Read every tab. Note the following:
- Which tab lists the lanes, and what each column means.
- Whether lanes are given as city and state pairs, ZIP codes or regions.
- What equipment each lane needs: dry van, reefer, flatbed, and so on.
- The expected volume for each lane, and whether it is a weekly or annual figure.
- Extra requirements: multiple stops, tarps, team drivers, appointment windows, accessorial charges.
- The bid format: all-in rate, linehaul plus fuel, or rate per mile.
- The due date and any question deadline.
Time spent here prevents re-pricing later.
Step 2: Define what counts as the same lane
Before you match anything, write down your matching rule. A lane in your history is only a valid match for a lane in the RFP when these all agree:
- Origin
- Destination
- Equipment type
- Number of stops
- Volume band, meaning the rough loads-per-week range
The last two are the ones people skip. A dry-van lane with two stops is a different piece of work from the same city pair with one stop. A lane you run twice a month is not priced the same as one the shipper expects seven times a week, and a blended average across both bands will be wrong for each.
Equipment matters just as much. If your history has a dry-van rate for a city pair and the RFP asks for a reefer, the dry-van rate is not evidence for the reefer lane.
Step 3: Normalize both lists
Matching fails on spelling, not on logistics. Before you compare:
- Put origin and destination in one format, for example city and state, in both files.
- Fix obvious variants such as "St. Louis" and "Saint Louis".
- Use one set of equipment names.
- Make sure rates are in the same unit. Flat rate per load and rate per mile cannot be compared directly.
- Remove duplicate history rows or merge them with a load-weighted average.
Step 4: Match each lane and write down the source
Go lane by lane. For each lane in the RFP, find the one history row that matches on every field in your rule, and record which row it was. That record matters later. When a shipper asks about a rate, or when you rebuild the bid next year, you want to see "this came from history row 14, 41 loads" and not a number with no origin.
A simple layout works well:
| RFP lane | Equipment | Matched history row | Loads behind it | Buy rate | Status |
|---|---|---|---|---|---|
| Lane A | Dry van | H01 | 41 | filled | Priced |
| Lane B | Dry van | none | 0 | empty | No history |
| Lane C | Reefer | H04 | 18 | filled | Priced |
The example figures above are placeholders. The point is the last two columns: every lane is either priced from a named row or marked as having none.
Step 5: Treat no-history lanes as their own list
Every RFP has lanes you have never run. The mistake is to fill them with a number from a similar lane, a rule of thumb or the shipper's incumbent rate and then forget it was a guess.
Instead, collect them in a separate list. For each one, decide:
- Do you want this lane at all?
- Can a carrier you trust quote it before the deadline?
- If you bid it, what is your basis, and who needs to know it is thinner than the rest?
You can skip lanes you cannot support, unless the shipper requires a bid on every lane, or bid them with a wider margin. Either is a business decision. What matters is that it is made on purpose.
Step 6: Add your markup, then fuel
With a buy rate for each supported lane, apply your markup on buy rate to get a bid linehaul, then add fuel if the bid format separates it. Keep the percentages in one cell or settings area and have every lane read from it, so changing your markup updates the whole sheet and you never end up with half the lanes on an old number.
Check one lane by hand. If your calculator and your spreadsheet disagree on a single lane, something is wrong in the formula and it is wrong on every lane.
Step 7: Sanity check before you submit
Run these checks on the finished sheet:
- Sort by rate per mile and look at both ends. Outliers are usually typos or mismatched equipment.
- Compare similar lanes to each other. Two short, nearby dry-van lanes priced far apart need an explanation.
- Count the lanes you priced against the lanes in the RFP. The numbers should reconcile with your no-history list.
- Open the file you will send and confirm that it is in the shipper's format, with nothing in the wrong column.
- Check that you have answered every non-rate question in the other tabs.
For a longer list of what tends to go wrong, see common freight RFP pricing mistakes.
How LaneMapper does this step
LaneMapper does the mapping and matching steps, not the pricing decision. You upload the shipper's RFP as it arrived, which can be an Excel workbook with any tabs and headers, a CSV, a Word or PDF file, or a photo of the lane sheet, together with your lane rate history. It reads the layout of the shipper's template, then matches each lane to the one history row with the same origin, stops, destination, equipment and volume band.
A lane is pre-filled only when it exactly equals its matched history row. Every other lane is flagged and left empty. Nothing is guessed or borrowed from a similar lane. A second, stronger AI model reviews every result, fixes what it can, and lists what is left for you to decide. Results are model output checked by code and by a second model; they are not verified by a person.
The markup on your buy rate and the fuel percentage are applied by code to each pre-filled lane, with fuel then applied on the marked-up linehaul. You get back a mapped-lanes workbook with live formulas and the source row beside the matched row, and a CSV. When the RFP is an Excel file with a rate column LaneMapper can identify, you also get the shipper's own workbook with the all-in bids filled into that column, never over a cell that already has a value. When the RFP is a CSV, Word or PDF file or a photo, it cannot be written into: with a rate column LaneMapper can identify, you get a new workbook rebuilt from its tables with the bids in that column, not the shipper's own file. With no rate column it can identify, there is no filled file and the bids are in the mapped-lanes workbook and the CSV.
The price is 7 credits per lane read, whether it comes back pre-filled or flagged, with no subscription. Create an account to try it on your next RFP.
Questions
- How many months of rate history should I use?
- Use a window that reflects what carriers charge you now. Twelve months covers a full year of seasons, which makes it a sensible starting point, but if the market moved sharply, weight recent loads more and say so in your notes.
- Can I bid a lane I have never moved?
- Yes, but treat it as a separate decision, not a lookup. Price it from a fresh carrier quote or a market rate you can defend, and keep it visibly apart from lanes backed by your own loads.
- What if the shipper's template has several tabs?
- Work out first which tab holds the lanes and which hold instructions, volumes or accessorial questions. Price only from the lane tab, but read the others before you commit to any rate, since they often change the cost of the work.
Your next RFP, mapped before the deadline.
Create an account, upload the file, download the priced lanes.