Invoice PDF to CSV, with total check

Runs entirely in your browser. The PDF is read on your device and never uploaded.

Text-based PDFs only. Invoices exported from accounting or billing software have a text layer and work. Scans and phone photos are images; the free tool cannot read them and will say so.

Why check the arithmetic

An invoice carries its own answer key. Each line has a quantity, a unit price and an amount, and the amounts must add up to the subtotal; the subtotal plus tax and shipping, minus any discount, must equal the total. If a converter misreads one digit, drops a row, or pulls a "Delivery" line into the wrong place, at least one of these sums stops matching.

This tool runs three checks and says which ones it ran:

  1. Each line: quantity x unit price equals the amount, to the cent (a one-cent rounding difference is allowed).
  2. Line items against the subtotal: the extracted amounts add up to the printed subtotal.
  3. Subtotal to total: subtotal + tax + shipping - discount equals the printed total. If the invoice prints no subtotal, the sum of the lines stands in for it, and the page says so.

If the invoice prints no totals at all, the result reads "unverified". A green result means the numbers are consistent with each other. It does not prove the invoice is right: if the vendor's own arithmetic is wrong, you get a yellow result, which is the useful outcome.

What it extracts

Column What it holds
Invoice number, Invoice date Read from labels such as "Invoice No", "Invoice #" and "Invoice date". Dates are copied as printed, not reformatted.
Line The row number
Description The item text; a description wrapped over two lines is joined
Quantity, Unit price When the invoice prints them
Amount The line total
Check ok, review or not checked

After the lines, the CSV carries the invoice's own Subtotal, Discount, Shipping, Tax, Total and Amount due rows, marked invoice total line, so the file is self-contained.

How the extraction works

  1. Text, not pixels. pdf.js reads the text layer of each page. Nothing is uploaded; pdf.js is fetched once from a public CDN and runs on your device. It is the same reader as in the statement PDF to CSV tool.
  2. Lines and cells. Text at the same height becomes a line, and text close together becomes one cell.
  3. The totals block. A line whose label says subtotal, discount, shipping, tax (several tax lines are added up), total or amount due, with a money amount in the last cell, belongs to the totals. A delivery line that also has a quantity and a unit price is treated as a line item instead.
  4. The line items. If the invoice has a header row (Description, Qty, Price, Amount), the table starts under it. Without one, the table is found from the shape of the rows: a text description followed by one to three number cells, with the amount last. The page warns you when it had to guess.

What it cannot do

If you handle many invoices

For statements instead of invoices, see the bank statement PDF to CSV converter, which checks every row against the running balance, and the method for how StatementBench measures accuracy.

Also available as Markdown.