A document with no fixed shape
The simplest assumption about a commercial invoice is that it looks roughly like every other invoice — a header, some line items, a total. For a domestic vendor invoice, that assumption mostly holds. For a commercial invoice from an overseas supplier, it doesn't: layouts vary by country, by industry, and by whatever template the supplier happened to build years ago.
This page describes how each field is read from that variable structure, and how a commercial invoice is distinguished from a proforma invoice rather than treated identically — the same logic described more broadly in customs and import documentation, applied here specifically at the level of a single invoice.
That distinction between reading and assuming sounds obvious once stated, but it's exactly what a rushed manual review skips — an invoice-shaped document accepted as the commercial invoice without checking whether it's actually the proforma sent weeks earlier.
Why this isn't as simple as it looks
The problem isn't reading one clean, well-formatted invoice — that's straightforward. The problem is dozens of suppliers, each with their own layout, some sending scans or photos rather than digital files, where the field that means "unit price" on one invoice sits in a completely different position — or under a completely different label — on another.
Treating every invoice as if it followed one universal template produces unreliable results exactly where it matters most: on the unfamiliar layouts, where a misread field can silently misstate the value a shipment's duty gets calculated on.
What gets read from each invoice
| Field | Why it matters |
|---|---|
| Supplier and buyer | Confirms which entity issued and which entity is receiving the goods |
| Item description and quantity | The basis for matching against the packing list and entry summary |
| Unit value and line total | What duty gets calculated against |
| HS code, where present | Determines classification and duty rate — read, never assigned |
| Country of origin | Determines applicable duty rate and trade agreements |
| Incoterm and currency | Determines what belongs in the dutiable value, and in what currency |
Six fields, read line by line — not a single total pulled from the bottom of the page, but each line anchored to its own description, value and source document.
Telling a commercial invoice from a proforma
A proforma invoice is sent before goods ship — a quote or a payment-arrangement document, not a record of what actually shipped. A commercial invoice reflects the actual, final transaction and is the document customs valuation is based on. Confusing the two means potentially using estimated, pre-shipment figures as the basis for a real duty calculation.
The distinction is read from the document itself — its own labeling, its relationship to a shipment date, and structural cues that differ between the two — rather than assumed from the fact that both look, at a glance, like invoices.
Confidence and what gets flagged
Not every reading carries the same certainty, and treating them all the same would hide exactly the fields that deserve a second look. Every field gets a confidence level, and anything below a high threshold is flagged for review rather than accepted silently.
This matters most for the fields that actually cause problems later — a partially legible HS code, or a country of origin that's ambiguous on a poorly scanned document. Flagging them explicitly means a person makes the final call, instead of a system silently picking an option that might be wrong.
How it works
Upload the invoice
One or several, in whatever formats they arrive — clean PDF, scan or photo.
Each invoice is read
Every field extracted line by line, with the document type identified as commercial or proforma.
Fields are checked with a confidence level
Each field evaluated and flagged where certainty is low.
Export
Excel, CSV or JSON, with confidence and source document as distinct fields.
An invoice, extracted
One commercial invoice from an overseas supplier, 18 line items.
| Result | Line items |
|---|---|
| Extracted, high confidence | 16 |
| Missing HS code, flagged | 2 |
18 line items, two flagged for a missing HS code — a supplier that classifies some products but not others, an inconsistency that would have been easy to miss reading the invoice by eye but is impossible to overlook once every line is checked individually.
Manual vs. automatic
Manual
Someone reads the invoice header and total by eye — fast on a familiar supplier's layout, error-prone the moment a new supplier or an unfamiliar format shows up.
Automatic
Every field is checked systematically regardless of layout, so no field gets silently skipped just because the invoice looked unfamiliar.
From one invoice to a full shipping season
Reading one invoice is quick. Doing it for a full shipping season, across dozens of suppliers and hundreds of line items, changes what's actually practical by hand — not because any one invoice is harder, but because comparing across suppliers becomes the real goal, and that comparison depends on every invoice being read the same way from the start.
A history built invoice by invoice, with consistent fields and confidence levels, makes that comparison possible immediately, instead of becoming a separate project every time someone wants to see how a supplier's pricing or classification behavior has changed.
Who uses this
Import finance teams
Extract invoice data consistently across many overseas suppliers.
Customs brokers and their clients
Get clean, matched invoice data before a filing decision has to be made.
Distributors sourcing from several countries
Track landed cost inputs consistently across suppliers with very different invoice formats.
Finance teams supporting an internal audit
Produce a traceable record of every invoice value, ready for review.
Four different profiles, but the same underlying need: a reliable, consistent reading that doesn't depend on who processes the document or which supplier's format it happens to be.
Edge cases worth knowing
A partially illegible value — from a fold, a stain, or a poor scan — is never completed by resemblance to a similar invoice. The line is read as far as possible and marked as uncertain, with the final call left to whoever reviews it, rather than a system guessing a value that could be wrong.
A formally correct but unusual value — a unit price far outside a supplier's typical range, for instance — is still read and returned exactly as shown. Flagging that kind of content inconsistency would require business knowledge that goes beyond reading the document — exactly the kind of judgment call that stays with the finance team or the broker.
When a supplier invoices in more than one currency
Some suppliers invoice in different currencies depending on the shipment, or even mix currencies across product lines on the same invoice. Each invoice's currency is read and preserved as its own field — never silently converted to a single reporting currency during extraction.
A record that keeps the original currency clearly labeled on every line makes any later conversion — for landed cost, for accounting, for duty calculation — a deliberate, visible step, rather than a conversion baked invisibly into the extraction itself.
Why a flagged line beats a guessed one
A view that only shows accepted totals, without keeping the link to each line and its source document, is convenient to browse but fragile the moment someone asks where a specific value came from. Reconstructing that origin later, without the link already in place, means reopening every document in the shipment one by one.
Keeping that link from the start — every extracted value knowing exactly which document and which line it came from — turns that reconstruction from a future emergency into a detail that's already in the data. The difference shows up at exactly the worst moment to discover it: during a customs audit, when response time is already limited.
When one invoice has dozens of line items
A large purchase order can produce a commercial invoice with well over a hundred line items — every SKU, size and color variant listed separately. Reading a table that dense is exactly where a manual review starts skipping rows, simply because scanning that many lines by eye invites fatigue.
Extraction doesn't get tired partway down a long table. Line 4 and line 140 are read with the same care, each with its own value, HS code and confidence level — which matters most on the exact invoices where a manual reviewer would be most likely to have already stopped paying close attention.
Reviewing extraction quality over time
Extraction works well from the first invoice read, but it gets more useful with history — as more invoices from a given supplier accumulate, that supplier's specific formatting quirks become easier to distinguish from a genuine anomaly worth flagging.
A periodic check-in — quarterly for most import teams — is worth doing to confirm that confidence levels still track reality, especially after a supplier changes their invoice template or a new supplier is added with an unfamiliar layout.
Bringing a new supplier's invoices in cleanly
A new supplier's first few invoices are the ones most worth reviewing closely, not because the extraction is any less reliable on them, but because they're the first data point for a relationship the reconciliation routine hasn't seen a pattern for yet. A supplier that always states the Incoterm one way, or always groups freight into the goods line rather than breaking it out, only becomes a known pattern after a few invoices have gone through.
That first review doesn't need to be exhaustive — it needs to check the handful of fields most likely to vary by supplier: currency, Incoterm placement, how freight and insurance are labeled, and whether HS codes appear on the invoice at all or need to come from elsewhere. Once those are confirmed for a given supplier, later invoices from the same source rarely need the same level of attention.
This isn't a one-time setup step so much as a habit worth carrying into every new supplier relationship, since the cost of skipping it is deferred rather than avoided — a pattern that goes unconfirmed on invoice one tends to surface later anyway, usually as a discrepancy flagged during a broker follow-up rather than caught quietly during onboarding.
Suppliers that change an established pattern — a new invoice template after a system migration on their end, a different freight forwarder mid-year — are exactly where a flagged field earns its keep, since a shift like that produces a confidence flag automatically rather than sliding through unnoticed because the supplier "usually" formats things a certain way.
What the rest of the team sees
Extraction happens in one place, but the fields it produces get used well beyond whoever uploaded the invoice — a controller checking a duty calculation, a broker asking for a specific value, an auditor sampling a quarter's shipments months later. None of those people need to re-read the source PDF if the extracted fields are complete and traceable back to it, and none of them need to interrupt someone else's day to get an answer.
That shared visibility is part of what separates this from a personal workflow one person keeps up to date in their own spreadsheet. A field extracted once, with its confidence level and source page attached, is available to anyone on the team who needs it — not just the person who happened to process that particular invoice, and not only while that person still remembers the shipment.
It also changes what happens when the person who processed an invoice is unavailable when a question about it comes up. A controller or auditor asking about a shipment from three months ago doesn't need to track down who handled it and hope they remember — the extracted fields and the source document they came from are sitting in the same place regardless of who touched them originally.
What it doesn't do
Doesn't assign HS codes
Reads whatever code is on the document. Classification stays with your customs broker.
Doesn't interpret which Incoterm applies
Reads the value stated on the document, not an inference about what should apply.
Doesn't file or submit anything
Reads the invoice to produce structured data. Filing stays entirely with your broker.
