Copy the merchant name. Tab. Copy the total. Tab. Copy the date. Tab. Find the tax line. Type it in. Next invoice. Repeat forty times. This is how a lot of small teams still get invoice data into a spreadsheet, and it's both the most boring job in the building and one of the easiest to get wrong at 4pm on a Friday.
There's a direct way to skip all of it: extract the fields from each PDF as structured data, then drop them into rows automatically. No manual retyping, no per-vendor template setup, no fragile copy-paste. Here's how to build it — as a one-off script, and as a no-code automation that runs itself.
Why "PDF to Excel" is harder than it sounds
The naive approach is to "convert" the PDF and hope a table falls out. It rarely does, because invoices aren't tables — they're free-form layouts. The merchant is in one corner, the total is bottom-right, the tax is on its own line, line items are in a grid that every vendor formats differently. A generic PDF-to-Excel converter gives you a jumbled mess of cells that you then have to clean by hand, which defeats the purpose.
What you actually want is field extraction: pull the specific values — merchant, date, total, tax, line items — and write each one to the correct column. That's a parsing problem, not a conversion problem, and it's why dumping the PDF into a converter never quite works.
The approach: extract to JSON, then write rows
Every reliable version of this pipeline has the same two stages:
- Extract each invoice into clean, named fields (JSON).
- Map those fields onto spreadsheet columns and append a row.
Once the data is structured JSON, stage two is trivial in any tool. The whole difficulty lives in stage one — turning an arbitrary PDF into consistent named fields — which a parsing API handles in a single call.
Option 1: A Python script (for a folder of invoices)
If you've got a folder of PDFs and want a .xlsx at the end, this is about twenty lines. Extract each file, collect the rows, write the sheet:
Point it at your folder, run it once, get a clean spreadsheet. If you want line items exploded into their own rows instead of one row per invoice, iterate over data["line_items"] and append a row per item. The Python guide covers the full response shape if you want to pull more fields.
Option 2: Google Sheets, automatically, with no code
For most small teams the better version isn't a script you run — it's an automation that runs itself every time an invoice arrives by email. You can build this with n8n, Make, or Zapier, and the logic is identical in all three:
- Trigger: a new email with an attachment lands in your invoices inbox (or a new file appears in a Drive folder).
- Extract: send the attachment to the parsing API, get back JSON.
- Append: map the JSON fields to columns and add a row to your Google Sheet.
The extract step is one HTTP request node pointed at https://docuparseapi.com/api/v1/extract with your API key. The append step is the native Google Sheets action every one of these platforms already has. No custom code anywhere in the chain.
Step-by-step builds for each platform:
- Automate invoice parsing in n8n — full workflow with the trigger, the extract node, and the Sheets mapping.
- n8n integration guide, Make guide, and Zapier guide for the connector details.
Once it's live, the spreadsheet fills itself. An invoice hits the inbox, and thirty seconds later there's a new row with the merchant, date, and totals already in place — while you're doing something more useful than pressing Tab.
Which fields land in which columns
A sensible default column layout, and where each comes from in the response:
| Column | JSON field |
|---|---|
| Merchant / Vendor | merchant |
| Invoice number | invoice_id |
| Date | date |
| Due date | due_date |
| Currency | currency |
| Subtotal | subtotal |
| Tax | tax |
| Total | total |
Because those fields come back normalized — dates as ISO, amounts as consistent decimals — your spreadsheet stays clean enough to actually sum, sort, and pivot, instead of being full of "$1,320.00" strings you can't do math on.
Try it on your own invoices
The fastest way to see whether this works on your documents is to skip the build entirely for a minute:
- Drop a real PDF invoice into the live demo and look at the JSON — that's exactly what feeds your spreadsheet.
- Then grab a free key — 20 documents/month, no credit card — and run the script or wire up the automation above.
Forty invoices that used to be an afternoon of retyping become a folder you drop files into. That's the whole point.
DocuParseAPI is a receipt and invoice parsing API. One POST request turns a PDF into normalized JSON, ready to drop into Excel or Google Sheets. Start free — 20 documents/month, no credit card.