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.
Package count
Gross weight
Line quantity
Goods description
Consignee / notify party
Country of origin
Container / seal number
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.
Manual reviewExtraction + rules
Clean shipment
One discrepancy
Multi-invoice shipment
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.
{ "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
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.