Skip to content
Parser BlogLogistics9 min readAll posts

Commercial Invoice, Packing List and Bill of Lading Discrepancies: Catch Them Before Customs Does

Every import shipment is described three times by three different parties. The supplier writes the commercial invoice, the supplier's warehouse writes the packing list, and the carrier issues the bill of lading. Your customs broker files the entry from all three. When they agree, the goods clear and move on. When the invoice says 9,600 units, the packing list says 8,800 and the bill of lading counts two fewer cartons than the packing list, the shipment waits at the port while someone works out which number is true.

In brief

  • An import shipment is described three times: the commercial invoice states value, the packing list states contents, and the bill of lading states what the carrier received.
  • Customs holds and amended entries usually come from small disagreements between those three documents, such as quantities, weights, package counts or the consignee name.
  • Each field has one authoritative document: value and terms from the commercial invoice, pieces and weights from the packing list, container and seal numbers from the bill of lading.
  • Extracting all three documents into one schema turns the cross-check into deterministic rules, so only real discrepancies reach a person before the entry is filed.

Three documents, three different questions

The documents overlap, which is why they can contradict each other, but each one exists to answer a different question. Knowing which question each one owns is the basis of any cross-check.

The commercial invoice answers what was sold, and for how much? It names the seller and buyer, lists each product with quantity, unit price and line value, and states the currency, the trade terms (the Incoterm, such as FOB or CIF) and usually the country of origin of each item. Customs uses it to assess duty, so it is the authority on value.

The packing list answers what is physically in the boxes? It breaks the shipment into packages, cartons, pallets or crates, says what each contains, and gives net and gross weights and often dimensions. It rarely carries prices. Warehouse teams, customs examiners and the receiving dock all rely on it, so it is the authority on contents and packaging.

The bill of lading answers what did the carrier receive, and from whom, for whom? It is the transport contract and receipt: shipper, consignee, notify party, port of loading and discharge, container and seal numbers, the number of packages and the gross weight as declared to the carrier. It is the authority on the movement itself.

3

documents describing the same goods: invoice, packing list, bill of lading

3

different authors, each typing the same numbers again

1

customs entry that has to be consistent with all of them

Where the documents disagree

Discrepancies are rarely dramatic. They are the ordinary result of three people producing three documents at different moments, often from different systems, sometimes before the shipment was finalized.

Package counts and weights

The packing list says 64 cartons; the bill of lading says 62. Perhaps two cartons were consolidated on a pallet at the last minute, perhaps the packing list was generated from the order rather than from what was loaded. Gross weights drift the same way, especially when one document reports net weight and another gross, or one rounds to the kilogram and another converts from pounds. A package count difference is the discrepancy most likely to get a shipment looked at, because it is the simplest thing for an examiner to verify.

Line quantities

The invoice bills for the full order while the packing list reflects a partial shipment, or the opposite: a backorder shipped without an updated invoice. A quantity mismatch on a line means either the declared value is wrong or the contents are, and either one matters for duty.

Descriptions and classification

"Valves" on the bill of lading, "brass ball valve, 2 in" on the invoice, and a SKU only on the packing list. Vague descriptions make it harder for the broker to confirm the tariff classification, and descriptions that differ between documents raise the question of whether they describe the same goods.

Parties and origin

The consignee on the bill of lading is a freight forwarder while the invoice names your company; the notify party is missing; the country of origin appears on some invoice lines and not others. Each of these can be legitimate, but each needs to be understood before the entry is filed, not after.

Illustrative
Illustrative share of cross-document discrepancies by field in import shipments. Numbers are examples, not measured results.

Why the cost lands on the importer

The supplier and the carrier produced the documents, but the importer of record is responsible for the accuracy of what is declared. When customs questions a shipment, the clock keeps running: the container sits at the terminal, free time expires, and storage and demurrage charges start accruing. Delivery appointments slip, and the warehouse that planned labor for the arrival has to replan.

Even when the goods are released without an exam, an inconsistency that is discovered later still costs time. The broker has to correct the entry, the accounts payable team pays an invoice for 9,600 units when 8,800 arrived, and the receiving dock opens a shortage claim that nobody can resolve without going back to the same three documents. The same mismatch, caught before filing, is one email to the supplier.

Why the manual cross-check gets skipped

Nobody disagrees that the documents should be compared before filing. The problem is that the comparison is tedious and the documents are hard to read side by side. Commercial invoices come in every supplier's own layout. Packing lists run to several pages with per-carton detail and subtotals that may or may not match the grand total. Bills of lading arrive as carrier PDFs or as scans of a printed form, with the package count buried in a block of text. A shipment with several invoices and a consolidated packing list multiplies all of it.

So the check gets reduced to what fits in the time available: confirm the totals on page one, trust the supplier, and let the broker catch anything serious. Brokers do catch a lot, but they work from the same documents under the same time pressure, and they cannot know that the purchase order was for 8,800 units.

Illustrative
Illustrative analyst minutes per shipment, manual review versus structured extraction with rule-based checks. Numbers are examples, not measured results.

A cross-check workflow that runs before filing

The pattern is the same one behind any document reconciliation: turn every document into structured fields, let deterministic rules handle the comparison, and send a person only the shipments where something disagrees, with the conflicting values already laid out.

1. Split and classify the document pack

Suppliers and forwarders often send a single PDF holding the invoice, the packing list, the bill of lading and a certificate of origin. The first step is to separate it into documents and identify each one. Splitting and classifying mixed batches covers how to do that reliably.

2. Extract each document into one shared schema

From the commercial invoice: invoice number, seller, buyer, Incoterm, currency, and each line with SKU, description, quantity, unit price, value and origin. From the packing list: total packages and package type, gross and net weight, and each line with SKU, quantity and number of packages. From the bill of lading: B/L number, shipper, consignee, notify party, ports, container and seal numbers, packages and gross weight. Giving the same concept the same field name across documents, with units normalized, is what makes the rules simple. The guide to designing extraction schemas explains how to model line items and units so they hold up across supplier layouts.

3. Run the rules

Invoice quantity equals packing list quantity for every SKU. Packing list line packages add up to the stated total. Total packages and gross weight on the packing list match the bill of lading, within a tolerance you choose for weight. Every invoice line carries a country of origin. The consignee matches the importer or an approved forwarder. Invoice line values multiply out and add up to the invoice total. Optionally, quantities match the open purchase order. Each rule returns the values it compared, so a failure explains itself.

4. Decide before the broker files

Shipments that pass every rule go to the broker as they are. Shipments that fail are held for a corrected document from the supplier, or released to the broker with a note explaining the difference when it is legitimate, such as a known partial shipment.

Exampleimport-doc-check.json — example result for one shipmentjson
{  "shipment_ref": "SHP-20417",  "commercial_invoice": {    "invoice_number": "CI-7731",    "incoterm": "FOB",    "currency": "USD",    "total_value": 48228.00,    "lines": [      { "sku": "VLV-200", "description": "Brass ball valve, 2 in", "qty": 1200, "unit_price": 18.75, "origin": "VN" },      { "sku": "FIT-050", "description": "Brass elbow fitting, 1/2 in", "qty": 9600, "unit_price": 2.68, "origin": "VN" }    ]  },  "packing_list": {    "packages": 64,    "package_type": "carton",    "gross_weight_kg": 6480,    "lines": [      { "sku": "VLV-200", "qty": 1200, "cartons": 40 },      { "sku": "FIT-050", "qty": 8800, "cartons": 22 }    ]  },  "bill_of_lading": {    "bl_number": "BL-55120938",    "container": "MSKU4410287",    "seal": "SL-881204",    "packages": 62,    "gross_weight_kg": 6480  },  "checks": [    { "rule": "invoice_qty_equals_packing_qty", "sku": "FIT-050", "invoice": 9600, "packing_list": 8800, "status": "fail" },    { "rule": "packing_cartons_sum_equals_total", "sum": 62, "total": 64, "status": "fail" },    { "rule": "package_count_matches_bl", "packing_list": 64, "bill_of_lading": 62, "status": "fail" },    { "rule": "gross_weight_matches_bl", "status": "pass" },    { "rule": "origin_present_per_line", "status": "pass" }  ],  "decision": "hold_for_supplier_correction"}

In this example the weights agree, but three checks fail and they tell one story. The invoice bills 9,600 elbow fittings while the packing list shows 8,800. The packing list lines add up to 62 cartons although its total says 64. And the bill of lading counts 62. The most likely explanation is that the supplier shipped short and updated the carton detail but not the totals or the invoice. That is a question for the supplier, asked before filing, with the exact numbers attached.

One authority per field

Do not ask which document is right in general. Decide, field by field, which document owns it: value and terms from the commercial invoice, contents and weights from the packing list, container, seal and parties from the bill of lading. Every other document is checked against the owner.

Measure what the checks find

Track discrepancies per supplier and per field. A supplier whose packing list totals never match its line detail has a template problem that one conversation can fix. A forwarder that always lists itself as consignee may be fine, and the rule should learn that. Before you let the rules hold shipments on their own, build a small labeled set of real document packs and measure field-level accuracy, paying attention to scanned bills of lading and multi-page packing lists.

The same extracted fields serve later steps too. The packing list feeds receiving and shortage claims, and the commercial invoice feeds the payables match. If your team also audits carrier charges, the freight invoice audit reuses the bill of lading you already extracted.

Before you automate: a short checklist

  • Decide which document owns each field: value, contents, weights, parties, container and seal.
  • Request the commercial invoice, packing list and bill of lading before the goods arrive, not at the port.
  • Extract line items from the invoice and the packing list, not just their totals.
  • Normalize units for weight and quantity before comparing.
  • Check that packing list line packages add up to the stated total.
  • Compare package count and gross weight between the packing list and the bill of lading.
  • Require a country of origin on every invoice line.
  • Log every discrepancy by supplier and field, and share the pattern with the supplier.

Where extraction fits

The rules in an import document cross-check are short and any logistics team can write them. What makes the check hard is reading commercial invoices, packing lists and bills of lading in every supplier's and carrier's layout, consistently, before the broker needs them. Parser extracts each document into structured JSON against the schema you define, so the cross-check starts from fields you can compare instead of three PDFs open side by side.

Frequently asked questions

FAQ
  • The commercial invoice is the bill of sale between seller and buyer: it states the goods, unit prices, total value, currency and trade terms, and customs uses it to assess duty. The packing list describes how the goods are packed: the number of packages, what is in each one, and their weights and dimensions. It usually carries no prices.

  • At minimum the shipper and consignee, the number and type of packages, gross weight, the description of goods, and the references that tie them together such as invoice number, purchase order and container numbers. Quantities on the invoice should also equal quantities on the packing list line by line.

  • A package count or weight mismatch can trigger a customs inquiry, an exam or a hold, and often forces an amended filing. Even when the shipment is released, the discrepancy can delay delivery and add storage or demurrage charges while it is resolved.

  • Yes. Once the commercial invoice, packing list and bill of lading are extracted into structured fields, comparing package counts, weights, quantities, parties and references is a set of deterministic rules. People review only the shipments where a rule fails, with the conflicting values side by side.

More
The newest other posts

More from the blog.

Solutions
Where Parser fits

Related solutions.

  • Logistics & freight

    Bills of lading, freight invoices, rate confirmations and delivery receipts, read into shipment fields.

    Fields bol_number shipper consignee gross_weight_lb

    Logistics & freight, see industry
  • Invoice processing

    Vendor, tax ID, line items, taxes and due date from invoices and bills.

    Fields vendor tax_id line_items total

    Invoice processing, see use case

Your documents are different?

You define the fields in an extraction template. In the demo we process your documents live — no slides, no fluff.

30 minutes · no commitment