ParseParse
Use CasesDocsAPI Reference
Log InGet Started Free
All posts
July 12, 2026·6 min read

How I prepare my VAT report from a pile of supplier invoices

Dmitry, founder of Conversion Tools

Every quarter I have to file a VAT return (in Germany it is the Umsatzsteuer-Voranmeldung). And every quarter I used to sit in front of the same sad little pile: PDF invoices from a dozen different suppliers, each one laid out completely differently, each one hiding the two numbers I actually need somewhere in the page. Net amount here, VAT amount there, a different label every time.

For years I did what most people do. I opened each PDF, found the net and the VAT, typed them into a spreadsheet, and prayed I did not fat-finger a decimal. It is boring, it is slow, and it is exactly the kind of task where one wrong number in one cell quietly poisons the whole report.

The thing I kept getting wrong

For the longest time I treated it as a reading problem: "I just need to read faster." It is not a reading problem. Invoices look different, but they are not actually different. Every single one has the same handful of fields underneath the layout: a supplier, an invoice number, a date, a net amount, a VAT rate, a VAT amount, and a gross total. The layout is noise. The fields are the signal.

Once you see it that way, the job stops being "re-type ten different documents" and becomes "pull the same seven fields out of ten documents." That is a job you can define once and never touch again. So that is what I did with Parse.

Define the fields once

In Parse you describe the shape of the data you want - just the fields, not any single invoice's layout. For my VAT report it looks like this:

schema
{
  "supplier":        "string",
  "invoice_number":  "string",
  "invoice_date":    "string",
  "net_amount":      "number",
  "vat_rate":        "number",
  "vat_amount":      "number",
  "gross_amount":    "number"
}

That is the whole setup. I do not care whether an invoice calls it "VAT", "USt.", "tax", or buries it in a table in the corner. I described what I want, and Parse finds it in each document.

Run the whole pile through it

Then I send every invoice through that same schema. Each PDF comes back as the same clean object, no matter how the original was laid out:

output
{
  "supplier":        "Netzwerk Supplies GmbH",
  "invoice_number":  "2026-04-118",
  "invoice_date":    "2026-04-03",
  "net_amount":      420.00,
  "vat_rate":        19,
  "vat_amount":      79.80,
  "gross_amount":    499.80
}

Ten invoices in, ten identical objects out. Because every row has the same fields in the same place, I can export the whole batch straight to Excel or CSV and just sum the vat_amount column. That sum is the number that goes on the return. What used to be an evening of careful re-typing is now a couple of minutes, and there is no cell where I could have typed 79.08 instead of 79.80.

Why this beats "an AI that reads PDFs"

Plenty of tools can look at one PDF and tell you roughly what is in it. That is not the same thing. The moment you have a recurring job - the same category of document, month after month - you do not want a fresh guess each time. You want the same answer shape every time, so it drops straight into the spreadsheet you already have. Defining the fields once is what turns a one-off read into a reliable little pipeline.

This is not special to VAT, obviously. Swap the fields and it is expense receipts, purchase orders, bank statements, delivery notes, timesheets - anything that arrives as a stack of similar-but-not-identical documents. VAT is just the one that finally pushed me to stop typing.

Try it on your own pile

If you recognise the monthly pile, take one invoice, define the fields you need, and watch it come back as structured data. The free tier covers 100 pages a month, which is more than enough to see whether it would have saved you that evening. It saved me every one since.

Try Parse free

More from the blog

July 18, 2026·5 min read

You Got the Data Out. Why Is It Still a Mess?

Parsing a document is the easy part now. The real work is turning that output into the same clean fields every time - here is the gap that breaks pipelines, and how to close it.

Read more
Parse

AI-powered document data extraction

Conversion ToolsPowered by Conversion Tools

Use cases

  • Data Extraction API
  • PDF Parsing API
  • Invoice extraction
  • Receipt parsing
  • Purchase order extraction
  • Bank statement to JSON
  • Tax form extraction
  • Contract data extraction
  • Bill of lading extraction

Developers

  • How it works
  • Quickstart
  • Documentation
  • API Reference
  • Blog

Account

  • Log in
  • Contact
  • Security
  • Privacy Policy
  • Terms of Service
  • Refund Policy
© 2026 Conversion Tools