BlogHow to Convert PDF Invoices to Excel or Google Sheets Automatically (2026)

How to Convert PDF Invoices to Excel or Google Sheets Automatically (2026)

2026-07-14 · 5 min read

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:

  1. Extract each invoice into clean, named fields (JSON).
  2. 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:

python · 40 lines
import os, requests
from pathlib import Path
import openpyxl

API_KEY = os.environ["DOCUPARSE_API_KEY"]
URL = "https://docuparseapi.com/api/v1/extract"

def extract(file_path: Path) -> dict:
    with open(file_path, "rb") as f:
        r = requests.post(URL, headers={"Authorization": f"Bearer {API_KEY}"},
                          files={"file": (file_path.name, f)})
    return r.json()

# Build the spreadsheet
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Invoices"
ws.append(["File", "Merchant", "Invoice ID", "Date", "Due Date",
           "Currency", "Subtotal", "Tax", "Total"])

for pdf in Path("./invoices").glob("*.pdf"):
    data = extract(pdf)
    if data.get("success"):
        ws.append([
            pdf.name,
            data.get("merchant"),
            data.get("invoice_id"),
            data.get("date"),
            data.get("due_date"),
            data.get("currency"),
            data.get("subtotal"),
            data.get("tax"),
            data.get("total"),
        ])
        print(f"✓ {pdf.name}")
    else:
        print(f"✗ {pdf.name}: {data.get('error', {}).get('code')}")

wb.save("invoices.xlsx")
print("Saved invoices.xlsx")

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:

  1. Trigger: a new email with an attachment lands in your invoices inbox (or a new file appears in a Drive folder).
  2. Extract: send the attachment to the parsing API, get back JSON.
  3. 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:

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.

Ready to start parsing documents?

More from the blog