All articles

PDF invoices to Excel: one checked table, not copy-paste

Moving PDF invoices to Excel sounds like a small job. You have a folder of PDF invoices. Each supplier uses its own layout, its own labels and its own way of writing dates and amounts. You need one table: invoice number, date, supplier, net, VAT, total. And you need to trust it.

Copying by hand works for five invoices. At fifty, the mistakes start: a comma read as a thousands separator, a date flipped, a total that never added up in the first place.

Three ways to do it

Way Good for Watch out for
Excel “Get Data → From PDF” (Excel for Microsoft 365 on Windows) a few invoices with clean tables every layout needs its own steps; nothing checks the totals
An online converter a one-off file where your invoices are sent and stored; the output still has to be checked
A small script many invoices, different suppliers, every month it has to be set up once for your layouts

If you get a few invoices a month from one supplier, Excel is enough. Once there are several suppliers and it happens every month, a script pays off: you set the rules once and rerun them.

What a good result looks like

One row per PDF, the same columns for every supplier, dates in one format (2026-09-03), amounts as plain numbers (1240.00), and one more column: needs review.

That last column matters most. A good process does not guess. If an invoice has no number, or net plus VAT is not equal to the total, the row stays as printed and is flagged. A person decides.

How the script approach works

  1. Read the text from each PDF. Invoices made by accounting software contain real text, so a library such as pypdf can read it.
  2. Find each field by its labels. The same field has many names: Invoice No:, Facture n°, Rechnungsnummer; Subtotal, Total HT, Nettobetrag. You keep a short list of labels per field.
  3. Normalise numbers and dates. 1,240.00, 1 240,00 € and 180,00 EUR are all amounts; 14/09/2026 and 22.09.2026 are both dates. Agree on the day/month order before you start.
  4. Check the arithmetic. Net plus VAT must equal the total, to the cent.
  5. Flag, don’t fix. Missing number, unreadable date, a total that doesn’t add up — the row goes to the review list.

A minimal version of steps 1 and 4:

from pypdf import PdfReader

def pdf_text(path):
    return "\n".join(page.extract_text() or "" for page in PdfReader(path).pages)

def totals_ok(net, vat, total):
    return round(net + vat, 2) == round(total, 2)

What we saw on a test set

We built a small demo on six made-up invoices from three suppliers, with English, French and German labels. Two of them had planted problems: one total did not match its lines, one invoice had no number. The script produced one table with four clean rows and flagged exactly those two for review.

It is a test on invented data, not a promise about your invoices. Real folders bring their own surprises, which is why the review column exists.

Common traps when moving PDF invoices to Excel

  • Decimal comma or decimal point. 1.240,00 and 1,240.00 are the same amount; 1,240 can be either. Decide the rule per supplier.
  • Day and month. 03/04/2026 is 3 April in France and 4 March in the US. Agree the order before you run anything.
  • Several VAT rates on one invoice. One net and one VAT column are not enough; keep a line per rate or a total with a note.
  • Credit notes. They should come out as negative amounts, not as a second invoice that doubles your spend.
  • Currency. If a supplier invoices in another currency, keep the currency column and convert later, never silently.

A five-minute check before you trust the table

  1. The number of rows equals the number of PDFs.
  2. The sum of the total column matches what your accounting or bank shows for the same period.
  3. No invoice number appears twice.
  4. Open three random invoices and compare them with their rows.
  5. Every row in the review list has a decision: fixed by hand, or confirmed as it is.

Limits to know

  • Scans are pictures. They need text recognition (OCR) first, and recognised digits need checking.
  • New layouts need their labels added. Usually quick, but someone has to do it.
  • Unusual number formats (three digits after a comma, for example) must be agreed, not guessed.

Doing it yourself or handing it over

If you are comfortable with Python, the steps above are enough to start. You can see the demo on made-up invoices on our work page. If you would rather send a folder and get back a checked table with a list of what needs your eye, that is our Documents into data service. When the files are confidential, the processing can stay on your computer or ours in the EU — see private AI without the cloud.

Questions

Can scanned invoices be read the same way?

Not directly. A scan is a picture of paper, so the text has to be recognised first (OCR). After that the same rules apply, but every recognised number deserves a check.

What happens when an invoice has no number or the totals don't add up?

It should not be fixed silently. The row stays as printed and is flagged for a person to decide.

Do the invoices leave my computer?

With a script, no: it runs where your files are. With an online converter, check where the files are sent and kept — invoices hold client data.

Contact

One person reads this inbox — the same person who builds what you order.

Describe your task

Tell us what you have and what result you need — even a single small task. No brief required: within 48 hours you get a plan and a price in writing, a question, or an honest “not a fit”.

Include the situation, files or links, deadline, language, privacy limits and budget boundary if you have one.

File (optional)
No file chosen

A brief, a photo, a spreadsheet — whatever explains the task faster than words. Up to 8 MB, stored with our hosting provider. Please don't send sensitive personal or medical documents through the site.

Sending creates no order and no payment. We reply within 48 hours. Prefer email? contact@castel.studio

Talk to us

Prefer a call or a messenger? Write or call — the studio's founder answers.

Connect on LinkedIn

Prefer a freelance platform?

Order the same work there, with the platform's secure payment.

A one-person AI studio in Nice. Whoever answers your message is the one who does the work — no account managers in between. Files are processed on our own machine, not in someone else's cloud.

Nice 06100, France · Open in maps →

SIREN 103 115 705