Why Freight Quote Comparison
Breaks Down Every Week
A freight quote is not a price. It is a rate on a basis, for a scope, good for a week. When the Freightos Baltic Index transatlantic lanes jumped 50% in a single week in April 2026, climbing from roughly $1,400 to more than $2,100 per FEU, the trigger was emergency fuel surcharges of $500 to $1,000 per FEU taking effect (Freightos). Two quotes written on opposite sides of that week were prices for two different markets, even if the headline ocean rate never moved.

Key Takeaways
- A freight quote is not a price: it is a rate on a basis, for a scope, good for a week.
- The same per-CBM rate can leave two freight quotes hundreds of dollars apart, because the basis, the scope, or the fuel week is different.
- Define the columns once, and ImageToTable.ai puts a PDF rate matrix, an emailed Excel sheet, and a photo of a quote into the same sortable table.
A Freight Quote Is a Rate on a Basis, for a Scope, Dated to a Week

A freight quote is a rate attached to a billing basis, quoted for a defined scope, and dated to a specific week. Compare two of them without aligning all three and you are sorting numbers that do not describe the same shipment.
The basis decides what you are billed on. LCL ocean freight is commonly rated on W/M, short for weight or measure. The carrier compares the cargo's volume in cubic meters against its weight in metric tons and charges on whichever is higher, a figure sometimes called the revenue ton: 1 CBM counts as 1 W/M, and 1,000 kg counts as 1 W/M. A light, bulky shipment is billed on volume; a small, dense one is billed on weight. That single choice moves the chargeable quantity. Take two pallets: one at 1.2 CBM and 650 kg bills as 1.2 W/M, while a dense pallet at 1,400 kg and 0.8 CBM bills as 1.4 W/M once weight wins (AUSFF). Some forwarders quote per CBM flat, some per kilogram, some on W/M. Because the basis differs, the same cargo can produce three different totals.
The scope decides what is actually included. An LCL quote is a stack of line items, not a single number: origin CFS and handling, origin terminal handling, destination CFS and devanning, documentation, customs clearance, and fuel. Some quotes stop at the port; others run door to door. Two quotes with near-identical per-CBM rates can finish far apart once one is billed port-to-port and the other CFS-to-CFS (iContainers). The headline rate is the most misleading number on the page, because it is the one line every quote states differently.
The week decides what the fuel line says. The U.S. Energy Information Administration publishes a national on-highway diesel average every Monday, and LTL carriers rebuild their fuel surcharge tables from it weekly, effective Wednesday through the following Tuesday (DOE ATLAS). FedEx Ground's surcharge ran at 26.75% for the week of August 24, 2026 (FedEx). Ocean freight uses the same idea under different names, BAF or bunker surcharges, revised quarterly rather than weekly. So the fuel figure on any quote is a snapshot of one week, not a property of the route.
Two LCL quotes can show the same per-CBM rate and still sit hundreds of dollars apart at the bottom, because the basis, the scope, or the week they were computed on is different.
The RFQ Round Is a Chain of Handoffs, and Each Handoff Reshapes the Number
A freight RFQ is a round trip, not a document, and the number changes shape at every handoff. The shipper or procurement desk sends out the request with cargo dimensions, gross weight, port pair, incoterms, and a ready date. The forwarder's pricing team and overseas agents collect rates from carriers and consolidators. A sales or customer-service rep turns those collected rates into a client-facing quote. The customer then compares quotes from several forwarders and decides. Each stage can restate the price under a different basis, scope, or validity window.
The format mismatch that makes this hard is well documented. RFQ templates arrive as standardized Excel grids, while carriers and shipping lines reply with unstructured PDF rate matrices and long email attachments. As one logistics data firm puts it, translating multidimensional pricing models into a two-dimensional spreadsheet loses data before the tender calculation even begins, and analysts end up spending days manually populating rate sheets (DataMondial).
The industry has standards for the paperwork, just not for the price. FIATA, the international federation founded in 1926 that represents roughly 40,000 forwarding and logistics firms, publishes standard transport documents such as the FIATA Multimodal Transport Bill of Lading (FIATA). The UK's BIFA maintains Standard Trading Conditions. Neither standardizes how a commercial rate basis or a fuel surcharge is expressed, because those are negotiated per lane and per week. Nobody hands you a comparable quote. Making one is the pricing desk's job.
This decision layer sits strictly before the shipment moves. The documents that come later, the bill of lading once cargo is booked, the manifest at close-out, and the invoice at month-end, describe what was actually committed and paid. The RFQ round is the only stage where the money is still optional, which is why getting the comparison right matters more here than anywhere else downstream.
A Comparison Breaks in Four Places, and Only One of Them Is the Rate

Four separate mismatches can each invalidate an LCL rate comparison, and they compound when several are present in the same round.
| What varies | How it breaks the comparison | What the table has to record |
|---|---|---|
| Rate basis | W/M, per CBM, and per kg produce different chargeable quantities for the same cargo | Basis named explicitly, plus the computed chargeable quantity |
| Scope | A port-to-port quote looks cheaper than a door-to-door one until the missing legs are added | Which charges are included at origin, destination, and inland |
| Fuel week | Each quote's fuel line reflects a different diesel price date, so the surcharges are not comparable | Surcharge percentage and its effective week |
| Validity and transit | A quote expires before booking, or the cheapest lane is two weeks slower than the alternative | Quote validity date and door-to-door transit days |
The basis mismatch is the quiet one. When one forwarder quotes $85 per W/M and another quotes $0.42 per kg, the two numbers cannot be placed in the same column. A 1,200 kg shipment at 1.2 CBM charges on volume under W/M and on weight under a per-kg quote, so the "cheaper" rate can lose once the chargeable quantity is recalculated. This is not an edge case; dense commodities and light bulky ones both flip the winner.
The validity problem is what forwarders describe first. Rates carry a validity window, often one to two weeks in a volatile market, and the comparison has to be finished inside it. Practitioners on r/logistics describe the failure plainly: "carrier rate sheets coming in via email, manual updates, scattered Excel files, and quoting that takes way longer than it should," with carrier selection defaulting to "whoever you have a good relationship with rather than clean data comparison." The margin loss is the part that stings: "The breakdown usually happens at rate validity, you quote a client, the rate changes, and suddenly your margin is gone" (r/logistics). The same thread notes that rates get updated in someone's inbox while the person quoting tomorrow works from a number "that may be three weeks old."
Transit time is the axis that gets dropped entirely. LCL ocean transit typically runs 25 to 45 days, plus 5 to 10 days of consolidation before departure (FreightAmigo). A quote that is $200 cheaper but adds a week of consolidation is not cheaper for a shipment tied to a contractual delivery date, yet the transit column is exactly what a rate-only comparison never contains.
When basis, scope, fuel week, and transit time are all in play, the lowest number in a stack of quotes is frequently not the lowest landed cost.
The Fix Is to Normalize Every Response to One Basis Before You Sort

The comparison breaks because each quote arrives in its own shape, so to compare freight quotes you have to force every response into the same columns before any sorting happens. That is a data-shaping job, not a spreadsheet-skill job, and it is the step the manual workflow skips under time pressure.
The tool that does this is Custom Column Extraction. Instead of drawing a box around a field on one carrier's template, you type the column names you want, such as "Rate Basis," "Chargeable Quantity (W/M)," "Ocean Rate," "Fuel Surcharge %," "Fuel Effective Week," "Transit Days," "Origin Charges," "Destination Charges," and "Quote Validity," and the AI locates each value on every quote by understanding what it means, not where it sits on the page. The names you type become the headers of the output table. Because the column set is defined once and stays fixed, a PDF rate matrix, an emailed Excel sheet, a portal export, and a photo of a printed quote all land in the same structure, which is what removes the per-carrier template work.
Two settings carry most of the weight. The first is processing the entire round as a single batch, so five responses become one table instead of five separate reads. The second is a computed column, which lets you describe a calculation in the column name and have the AI perform it during extraction. A definition such as All-in per W/M (Ocean Rate × (1 + Fuel %) + Origin Charges + Destination Charges) turns each response into a single comparable figure the moment it is read, rather than two weeks of manual arithmetic later. If the basis is only implied by the charge description, an inferred column can label it, since an inferred column lets the AI derive a value that is not stated as a discrete field.
Define the normalization columns once
Build the column list around the four failure points: basis, scope (origin and destination separately), the fuel percentage with its effective week, and validity plus transit days. Keep the names you will sort on identical across every run so month over month the table stays consistent.
Upload the whole round as one batch
Add every response in the round at once, whatever their format. Mixed PDF matrices, spreadsheet exports, and scanned quotes go through the same queue and come out merged into one table with the columns you named as headers.
Sort on the computed all-in figure, not the headline rate
The computed column gives you one comparable number per carrier. The validity and fuel-week columns tell you which rows are still live. Check the handful of quotes closest to your decision in Review Mode, where hovering a cell highlights exactly where on the original quote that value came from.
One boundary is worth stating here so the rest of the workflow stays honest: this normalizes the quote documents you have already received. It is a shaping step, not a quoting engine. If your quotes are commodity supplier quotes rather than freight rates, the field set is different and the general pattern is covered in the guide to vendor quote data extraction. Freight is its own case because the basis and the weekly surcharge, not the vendor name, are what break the comparison.
Files are processed securely and not stored.
What Normalizing the Quotes Will Not Do
A normalized table makes the numbers comparable; it does not make the commercial decision for you, and it cannot manufacture information a quote never contained. Four limits are worth stating before you rely on it.
It reads quotes you already have; it does not fetch live rates. Rate shopping pulls current prices from carrier and consolidator systems and is a separate job handled by platforms built for it, including Freightos and WebCargo on the booking side, with forwarders running their own rate management inside systems such as CargoWise, Magaya, Descartes, or GoFreight. Xeneta and similar indices are for benchmarking against the market. Normalization sits after the responses arrive and before you compare them.
It does not select a carrier. The all-in column narrows the field, but transit reliability, space, routing through a consolidation, and an existing relationship can outweigh a small rate gap. The table informs that judgment rather than replacing it.
A stale quote stays stale. If the fuel week has rolled or the validity date has passed, the number is out of date no matter how cleanly it is arranged. The fuel-week and validity columns exist precisely so you can see which rows are still live and ask for a refreshed response on the rest.
Charges that are not on the quote cannot be extracted from it. Demurrage, detention, exam fees, and storage are triggered by events after booking, so they will not appear on an RFQ response. Scanned or photographed quotes also deserve a spot-check in Review Mode, where printed table data extracts at high precision but a blurry fax or a handwritten rate still benefits from a quick visual confirmation.
The rest of the freight data trail is worth understanding as a set. Once cargo is booked, batch-processing bills of lading across carriers captures the committed shipment. At close-out, carrier cost comparison from daily manifests covers what actually moved. At month-end, building a cross-carrier cost report from freight invoices reconciles what was billed, including the weekly fuel surcharge that was only an estimate during the RFQ. That last step closes the loop on the quote, and the bill of lading to Excel workflow handles the single-document case when you just need one shipment in a table.
FAQ
Can this pull live rates from carriers?
No, and it is not meant to. Live rate shopping belongs to booking platforms and carrier APIs (Freightos, WebCargo, and the rate-management modules inside forwarder systems such as CargoWise, Magaya, Descartes, and GoFreight). The work here is narrower and happens one step later: reading the quote responses you have already received into one comparable table.
How is this different from comparing generic supplier quotes?
Generic vendor quote comparison aligns the same item that different suppliers name differently. Freight breaks in a different place: the items are already on the same shipment, but the rate basis (W/M versus per CBM versus per kg), the scope, and the weekly fuel surcharge are not aligned. That is why a freight RFQ needs its own column set.
Which quote formats can it read?
PDF rate matrices, emailed Excel or CSV exports, carrier and portal PDFs, and photos or scans of printed quotes all go into the same batch. Because the columns are defined by name rather than position, there is no template to build for each carrier or each layout.
How should I handle the weekly fuel surcharge?
Capture the surcharge percentage and its effective week as two separate columns, and never compare two quotes without checking that their fuel figures come from the same week. The diesel benchmark resets every Monday and LTL surcharges follow midweek, so two responses a week apart are not on the same fuel basis.
Will it pick the cheapest carrier for me?
No. It produces a normalized all-in figure and a transit column so the trade-offs are visible, but the choice still depends on reliability, routing, and space that a rate table cannot rank for you.
What if a quote does not state its rate basis?
Treat that as a blocker, not a detail. A quote that does not say whether it is per W/M, per CBM, or per kg cannot be normalized against the others, and the basis is usually disclosed in the charge description. Ask the forwarder to confirm it before the response enters the comparison.
The shift that matters is small and structural. When every response is reduced to the same basis, the same scope, and the same fuel week, the lowest number stops being a guess about which quote you happened to read first and becomes a decision you can explain to a customer, with the transit days and the validity date sitting right next to it.