← Back to blog

How to Use AI to Compare Shipping Quotes With Different Surcharges

Summary

  • Use AI to normalize carrier quotes into a single structure (base rate + each surcharge + rules) so you can compare like-for-like.
  • Ask the model to compute an “all-in cost” per shipment and a scenario-based range when surcharges depend on zones, dimensions, or fuel indexes.
  • Require the AI to output a transparent line-item table plus a short “why this is cheaper” explanation you can audit.
  • Run review checks: unit consistency, duplicate/stacked fees, minimum charges, and surcharge applicability by service level and destination.
  • Keep a repeatable input template (your shipment data + each carrier’s surcharge rules) so future comparisons take minutes, not hours.

Shipping quotes are hard to compare because the headline price is rarely the final price. Fuel, residential delivery, delivery area, peak/seasonal fees, oversize rules, minimum charges, and “dimensional weight” can change the total in ways that are easy to miss when you are scanning PDFs or rate cards.

This guide shows a practical, auditable way to use AI to compare quotes that include different surcharges. You will see (1) what to feed the model, (2) a usable output structure you can paste into a spreadsheet, and (3) review checks to catch the mistakes AI (and humans) can make. All examples are invented and labeled.

Decision first: when AI is worth using for surcharge-heavy comparisons

Use AI for quote comparison when you have at least one of these conditions:

  • Multiple carriers or services with different fee names and rules (e.g., “Extended Area” vs “Delivery Area”).
  • Many shipments (even 20-50) where manual line-iteming becomes error-prone.
  • Conditional surcharges (applies only to residential, only above certain dimensions, only in certain ZIPs/zones, only for certain service levels).
  • Negotiated contracts where discounts apply to some components but not others.

If you only have one shipment and one simple quote with no conditional fees, a manual check can be faster. The rest of this article assumes you want a repeatable method that scales.

What you need before you prompt AI

AI can only compare what you provide. The goal is to give it enough structure to (a) compute totals and (b) explain assumptions.

1) Shipment facts (per package or per order)

  • Origin and destination (country + postal code; city/state if relevant)
  • Ship date (or week) if seasonal/peak fees apply
  • Service level you are comparing (ground, 2-day, international express, etc.)
  • Package count
  • Actual weight per package
  • Dimensions per package (L x W x H)
  • Declared value / insurance needs (if applicable)
  • Residential vs commercial delivery
  • Special handling flags (signature, hazardous, temperature control, etc., if applicable)

2) Quote inputs (per carrier/service)

For each carrier quote, capture:

  • Base transportation charge (and whether it is before/after discounts)
  • Fuel surcharge rule (percentage? fixed? applies to base only or base + some fees?)
  • Accessorials (residential, delivery area, additional handling, oversize, address correction, etc.)
  • Minimum charge or “net charge floor” rules
  • Dimensional weight divisor (if provided) and rounding rules
  • Any exclusions (fees that do not apply to your lane/service)

3) A normalization target (your “comparison schema”)

Different carriers label fees differently. You need a single set of buckets so the AI can map each quote into the same structure. A practical schema:

  • Base transportation
  • Fuel surcharge
  • Residential / delivery type
  • Delivery area / remote area
  • Additional handling (weight/dimensions)
  • Oversize / large package
  • Signature / adult signature
  • Declared value / insurance
  • Other accessorials (with name)
  • Minimum charge adjustment
  • Taxes/duties (international only, if included)

A repeatable AI workflow (input template → normalized output → checks)

The workflow below is designed so you can paste the output into a spreadsheet and audit every number.

Step 1: Provide the shipment(s) in a strict table

Invented example input (Shipment Table):

SHIPMENTS (invented)
Shipment_ID | Ship_Date   | Origin_Zip | Dest_Zip | Country | Service_Target | Residential | Pkgs | Weight_lb_each | L_in | W_in | H_in | Declared_Value_USD
S1          | 2026-10-21  | 60601      | 94105    | US      | Ground         | Yes         | 1    | 12            | 18   | 14   | 10   | 200
S2          | 2026-10-21  | 60601      | 33130    | US      | Ground         | No          | 2    | 8             | 16   | 12   | 10   | 0

Step 2: Provide each carrier quote as “rules + numbers,” not prose

AI performs better when you separate (a) the numeric quote lines you received from (b) the rules that explain when they apply.

Invented example input (Quote A):

QUOTE A (invented) - Carrier: AlphaShip - Service: Ground
Base_Transportation_USD: 
  S1: 14.20
  S2: 22.40

Fuel_Surcharge:
  Type: percent
  Rate: 12.5%
  Applies_To: Base_Transportation_only

Accessorials:
  Residential_Delivery_USD:
    Applies_When: Residential = Yes
    Amount: 4.95
  Delivery_Area_USD:
    Applies_When: Dest_Zip in {94105}
    Amount: 3.50
  Additional_Handling_USD:
    Applies_When: max(L,W,H) > 18 OR Weight_lb_each > 50
    Amount: 0 (not triggered in these shipments)

Minimum_Charge:
  Applies_When: (Base_Transportation - Discounts + Accessorials + Fuel) < 10.00
  Minimum_Total_USD: 10.00

Notes:
  Discounts already reflected in Base_Transportation_USD.

Invented example input (Quote B):

QUOTE B (invented) - Carrier: BetaParcel - Service: Ground
Base_Transportation_USD:
  S1: 12.80
  S2: 24.10

Fuel_Surcharge:
  Type: percent
  Rate: 14.0%
  Applies_To: Base_Transportation_plus_Residential_plus_DeliveryArea

Accessorials:
  Home_Delivery_USD:
    Applies_When: Residential = Yes
    Amount: 6.25
  Extended_Area_USD:
    Applies_When: Dest_Zip in {94105, 33130}
    Amount: 2.75

Minimum_Charge:
  Not provided
Notes:
  Quote lines are pre-discount; discount is 5% off Base_Transportation only.
Discounts:
  Base_Discount_Percent: 5%

Step 3: Ask AI to normalize, calculate, and explain assumptions

Use a prompt that forces a structured output and requires the model to show its work. Here is a template you can reuse.

Prompt template (copy/paste and fill in)

You are helping me compare shipping quotes with different surcharges.

Task:
1) Normalize each quote into the same surcharge buckets.
2) Calculate an all-in total per shipment per quote.
3) Provide a line-item breakdown and a short explanation of what drove differences.
4) Flag any missing info or ambiguous rules that could change totals.

Rules:
- Do not invent fees or rates. If something is missing, mark it as "Unknown" and explain what to ask the carrier.
- Use the shipment table and quote rules exactly as provided.
- Show intermediate calculations (discounted base, fuel base, etc.).
- Output must be machine-readable: one table per shipment plus a summary comparison table.

Normalization buckets:
Base_Transportation, Discounts, Fuel, Residential, Delivery_Area, Additional_Handling, Oversize, Signature, Declared_Value, Other_Accessorials, Minimum_Charge_Adjustment, Total

Inputs:
[PASTE SHIPMENTS TABLE]
[PASTE QUOTE A]
[PASTE QUOTE B]

Usable output structure (what “good” looks like)

You want output you can audit and paste into a spreadsheet. Below is an example of the kind of structure to require.

Invented example output (Shipment S1):

Shipment_ID Carrier Base_Transportation Discounts Fuel Residential Delivery_Area Other_Accessorials Minimum_Charge_Adjustment Total Calc_Notes
S1 AlphaShip 14.20 0.00 1.78 4.95 3.50 0.00 0.00 24.43 Fuel = 12.5% * 14.20 = 1.775 (rounded to 1.78)
S1 BetaParcel 12.80 -0.64 2.57 6.25 2.75 0.00 0.00 26.73 Discount = 5% * 12.80 = 0.64; Fuel base = (12.80-0.64)+6.25+2.75 = 21.16; Fuel = 14% * 21.16 = 2.96 (if fuel applies after discount). If fuel applies before discount, total changes.

Important: Notice how the BetaParcel row explicitly calls out an ambiguity: whether fuel is calculated on the discounted base or the pre-discount base. This is exactly the kind of “review flag” you want AI to surface rather than silently assume.

Summary comparison table (invented)

Shipment_ID Cheapest (All-in) Runner-up Main cost drivers Open questions that could change ranking
S1 AlphaShip (24.43) BetaParcel (26.73) BetaParcel higher residential fee; fuel applies to more components Fuel calculation base relative to discount; rounding rules
S2 AlphaShip (25.20) BetaParcel (26.??) Extended/Delivery area applicability differs by ZIP Whether 33130 triggers Extended Area; any minimum charge

Review checks: how to catch surcharge comparison errors

AI can calculate quickly, but you still need controls. Use these checks before you act on the result.

Check 1: Are units and rounding rules consistent?

  • Percent vs fixed fees (12.5% vs $12.50)
  • Rounding of fuel (per shipment, per package, or per invoice line)
  • Currency consistency (especially for cross-border quotes)

Check 2: Are you double-counting similar fees under different names?

Example: one quote lists “Residential Delivery” while another lists “Home Delivery.” AI should map both into the same bucket, not add them as separate fees.

Check 3: Does fuel apply to base only, or base + accessorials?

This is one of the biggest drivers of differences. Require the AI to state the fuel base explicitly (what it multiplied by the fuel rate).

Check 4: Are conditional surcharges actually triggered by your shipment?

  • Residential flag matches your address type
  • Delivery area/remote area matches the destination ZIP list or zone rule you provided
  • Additional handling/oversize triggers match your dimensions and weight

Check 5: Dimensional weight and billable weight

If a quote depends on dimensional weight, ensure the AI is using the correct divisor and rounding method you provided. If you did not provide it, the AI should mark it as unknown rather than guessing.

Check 6: Minimum charges and “net charge floors”

Some contracts enforce a minimum transportation charge or minimum total. Ask the AI to compute the pre-minimum total and then show the adjustment as a separate line item.

Check 7: Scope mismatches (service level, transit time, and included services)

Two “Ground” quotes may not be equivalent if one includes signature, Saturday delivery, or different pickup terms. If your decision depends on those, include them as explicit fields and require the AI to flag differences.

Turning messy source material into AI-ready inputs

In real life, quotes arrive as emails, PDFs, screenshots, or portal exports. Your goal is to convert them into a consistent “quote rules” block.

Practical extraction approach

  • Copy the line items (base charge, each surcharge, discount lines) into plain text.
  • Add rule lines for each surcharge: “applies when,” “amount,” and “what it is calculated on.”
  • Mark unknowns explicitly (e.g., “Fuel applies to: Unknown”).

Example: a “quote rules” mini-template you can reuse

QUOTE (fill in)
Carrier:
Service:
Base_Transportation_USD: [number or per-shipment list]
Discounts: [percent or fixed, and what it applies to]
Fuel_Surcharge: [rate + what it applies to]
Accessorials:
  - Name:
    Applies_When:
    Amount:
Minimum_Charge: [rule or Unknown]
Exceptions/Notes:

Advanced comparisons: scenario ranges when surcharges vary

Some surcharges are not deterministic from your current data (for example, fuel indexes that change weekly, or destination classifications you have not confirmed). In those cases, ask AI for a range and the breakpoints that change the outcome.

Scenario prompt add-on

Additionally:
- If any surcharge rate is variable (e.g., fuel), compute totals for Low / Mid / High scenarios using the provided range.
- Identify which scenario flips the cheapest carrier for each shipment.
- Output a "Sensitivity" note: which surcharge has the biggest impact.

Invented example: “If fuel is between 10% and 18%, AlphaShip stays cheaper for S1 until fuel exceeds 16% because BetaParcel’s fuel base includes residential + delivery area.”

Common questions to ask carriers when AI flags ambiguity

  • Does fuel apply to base only, or also to accessorials (and which ones)?
  • Are discounts applied before fuel is calculated?
  • What are the dimensional weight rules (divisor, rounding, minimum billable weight)?
  • How is “delivery area/extended area” determined (ZIP list, zone, address type)?
  • Are there minimum charges per package, per shipment, or per invoice?
  • Do any surcharges stack (e.g., additional handling + oversize), or is only the highest applied?

One compact decision table: choose the AI comparison approach that fits your situation

Your situation Best AI approach What you must provide What to review
2-3 carriers, a few shipments, clear line items Single-pass normalization + totals Shipment table + quote rules blocks Fuel base, rounding, minimum charges
Many shipments, repeated lanes Batch processing with strict output schema CSV-like shipment list + per-carrier rules Mapping consistency (fee names), duplicates
Variable fuel/seasonal fees or unknown ZIP classifications Scenario ranges + sensitivity analysis Rate ranges + assumptions list Breakpoints that flip the cheapest option
Negotiated discounts with exceptions Step-by-step calculation with intermediate fields Discount scope + exclusions Discount application order, excluded accessorials

Frequently Asked Questions

FAQ 1: What should I give an AI model so it can compare shipping quotes fairly?
Answer: Provide (1) a shipment table (origin/destination, residential flag, package count, weights, dimensions, ship date, service level) and (2) one “quote rules” block per carrier that separates base transportation, discounts, fuel rule (rate + what it applies to), each accessorial with an applicability rule, and any minimum charge rule. The model needs both numbers and applicability conditions to compute like-for-like totals.
Takeaway: Structure beats screenshots; give AI rules plus line items.

Back to FAQ Table of Contents

FAQ 2: How do I stop AI from guessing missing surcharge rules?
Answer: Put a hard constraint in your prompt: “Do not invent fees or rates; if missing, mark Unknown and list questions to ask the carrier.” Then require intermediate calculations (fuel base, discounted base) so you can see where an assumption would have been needed.
Takeaway: Force “Unknown” outputs and show-your-work math.

Back to FAQ Table of Contents

FAQ 3: What are the most important surcharge “gotchas” that change the cheapest carrier?
Answer: The biggest swing factors are: whether fuel applies to base only or also to accessorials; whether discounts apply before fuel; delivery area/remote area classification by ZIP; dimensional weight divisor and rounding; and stacking rules for additional handling vs oversize. Any one of these can flip the ranking even when base rates look similar.
Takeaway: Audit fuel scope, discount order, and conditional triggers first.

Back to FAQ Table of Contents

FAQ 4: Can AI compare quotes when carriers use different names for the same fee?
Answer: Yes, if you define normalization buckets (e.g., “Residential,” “Delivery Area,” “Additional Handling”) and ask the model to map each carrier’s fee names into those buckets. You should still review the mapping, because two similarly named fees can have different triggers or stacking rules.
Takeaway: Normalize into your buckets, then verify triggers match.

Back to FAQ Table of Contents

FAQ 5: How do I handle fuel surcharges that change weekly?
Answer: Ask AI for scenario totals using a fuel range you provide (for example, low/mid/high). Require it to state the fuel base for each carrier (what the percentage is applied to) and to identify the breakpoint where the cheapest option changes.
Takeaway: Use ranges and breakpoints, not a single-point estimate.

Back to FAQ Table of Contents

FAQ 6: How do I compare quotes when dimensional weight rules differ?
Answer: Include each carrier’s dimensional divisor and rounding rule in the quote block if you have it. Then require the AI to compute actual weight, dimensional weight, and billable weight as separate fields before it calculates base transportation. If you do not have the divisor or rounding rule, the AI should flag it as unknown because it can change the base charge and any weight-based handling fees.
Takeaway: Make billable weight explicit and carrier-specific.

Back to FAQ Table of Contents

FAQ 7: What output format is easiest to audit and paste into a spreadsheet?
Answer: A line-item table per shipment per carrier with fixed columns (Base, Discounts, Fuel, Residential, Delivery Area, Other Accessorials, Minimum Charge Adjustment, Total) plus a “Calc_Notes” column that shows intermediate math. Add a second summary table that lists the cheapest option, runner-up, and open questions that could change the result.
Takeaway: Fixed columns + calculation notes make errors visible.

Back to FAQ Table of Contents

FAQ 8: How do I validate the AI’s totals before I choose a carrier?
Answer: Recalculate one or two shipments manually from the same inputs, focusing on (1) fuel base and rounding, (2) whether each accessorial is truly triggered, (3) discount scope and order, and (4) minimum charge adjustments. If the AI flagged unknowns, resolve them with the carrier and rerun the comparison using the clarified rules.
Takeaway: Spot-check the swing factors, then rerun with clarified rules.

Back to FAQ Table of Contents

CopyCharm for AI Work
Turn copied work snippets into clean AI context.
CopyCharm helps you turn copied work snippets into clean, source-labeled context packs for ChatGPT, Claude, Gemini, Cursor, and other AI tools. Copy, search, select, and export the context you actually want to use.
Download CopyCharm

Related Guides