Guides · Fixed schema
Fixed-schema invoice extraction: why column consistency beats “smarter” AI
A “smarter” extractor that invents a new header every month will break the sheet you already trust. Fixed-schema invoice extraction is the quieter promise: extract vendor, date, and amount from an invoice PDF into the same columns, every time, so the file you download in March still matches the one from November.
Schema drift is the silent killer of spreadsheet automations
The first export looks fine. Vendor, total, date — you map them, you write a SUMIF, you send the sheet to your accountant. The second export renames total to amount due, drops currency into the number, and calls the vendor “merchant.” The formula still runs. It just describes the wrong cells, or none of them.
That is schema drift. Nothing crashes. The automation quietly stops being the books. A freelancer who batch-exports invoices once a month feels it as a repair job: reopen last month’s sheet, figure out which header moved, paste by hand. The model that produced the prettier paragraph did not save that hour.
- A new column name that your pivot no longer recognizes.
- A currency symbol glued onto the amount, so the cell is text.
- A summary sentence where a row used to be.
- A field that appears on some invoices and vanishes on others, with no empty cell to show the gap.
Fields that matter for freelancer books, and why we lock them
Freelancers and tiny agencies do not need every line a vendor PDF can contain. They need the fields a month-end spreadsheet actually sorts. ParseKit locks that set. The order does not change because a document was chatty, or because a newer model preferred a different label.
The locked header is date | vendor | amount | currency | category | notes | source_file. Same names, same order, on a folder of invoice PDFs and on a folder of receipt photos. “Same columns every month” is the invoice export requirement. A tool that can discuss any PDF is solving a different job.
Vendor, date, amount, and currency are the non-negotiables
Four columns carry the ledger. Date is when the charge happened. Vendor is who you paid. Amount is a number, with the currency symbol taken off. Currency is its own cell — USD, EUR, BDT, or whatever the document says — so a total does not add dollars to taka.
Extract vendor, date, and amount from an invoice PDF, and stop there if you must. Those three plus currency are enough to sort, filter, and hand a month over. Everything else is helpful. These four are the file. The invoice-to-CSV guide and the receipt-to-CSV guide are the two piles that land on this header.
Category and notes are editable helpers
Category is a short label: software, hosting, travel, meals, contractor, and similar. It is there so a pivot has something to group. It is not a ruling on what is deductible. If the guess is wrong, change the cell. The column name stays.
Notes is the margin you would have written anyway: FigJam seats, client lunch, domain renewal. Leave it blank when the vendor is obvious. Write it when future you will not remember. Both columns are helpers you edit. They are not a reason to add a new header next month.
source_file is the audit breadcrumb
source_file is the name of the PDF or photo you uploaded. When a row looks wrong, you open that file. You do not search three inboxes for “the Figma one.” The column stores the name. It does not store the archive — keep the original under the name you used.
That breadcrumb is what an accountant asks for after the spreadsheet arrives. The accountant handoff is the rest of that delivery: rows, not a zip of unnamed scans.
Locked columns keep pivots and SUMIFs alive next month
A pivot of category by month, and a SUMIF of amount where currency is USD, are only durable if the header they point at does not move. Lock the columns and those formulas describe December the way they described February. Rename a header and they describe nothing, quietly.
Import the file into the sheet you already use. Extra columns you invent — a home-currency total, a client name — sit to the right of the locked block, so a fresh download does not wipe them. The Google Sheets guide is that import. The monthly batch workflow is how the same header survives January through December.
ParseKit’s promise, next to generic PDF AI
A general PDF assistant is good at a question about the file you have open. It is a poor promise for a bookkeeping month, because the next reply does not owe you last month’s columns. Chat that explains an invoice is still chat. The ChatGPT comparison is that split: thinking in one place, a ledger file in the other.
ParseKit’s promise is narrower. Drop the pile. Download one CSV. The columns are the seven above, for freelancers and tiny agencies. It does not run an accounts-payable department, and it does not chat with arbitrary documents. Column consistency is the product. A smarter summary that will not sit in your pivot is not.
Free is 3 batches a month, up to 8 files each, no card. Pro is $39/mo for higher caps when the folder outgrows that. Lemon Squeezy is the checkout when it is open. Until then, start free and run a real folder through the locked header. This page is not a buy button.
Start free and download a CSV with these columns. Pro at $39/mo is the higher cap later, through Lemon Squeezy — not a purchase from this guide.