EU Invoice Extractor with VIES VAT Validation avatar

EU Invoice Extractor with VIES VAT Validation

Pricing

Pay per event

Go to Apify Store
EU Invoice Extractor with VIES VAT Validation

EU Invoice Extractor with VIES VAT Validation

Extract validated data from EU invoices and receipts. Returns seller, buyer, VAT numbers, invoice number, dates, net/VAT/gross totals, IBAN and line items as JSON. Checks VAT against the official VIES registry, validates IBAN, OCRs scans. Never billed for a failure.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Nikita Kubishkin

Nikita Kubishkin

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

Turn EU invoices and receipts into validated structured JSON. Not just text extraction — every VAT number is checked against the official European Commission VIES registry, and every IBAN is verified with the mod-97 checksum.

Built for accounting automation, accounts-payable pipelines and AI agents that need to trust what comes out of a PDF.

Why this Actor

Most document extractors hand you fields and leave you guessing whether they are real. This one tells you:

  • Is this VAT number actually registered, and to whom?
  • Does the registered company name match the name printed on the invoice?
  • Is this IBAN a real IBAN, or OCR noise?
  • Do net + VAT actually add up to the gross total?

That last check alone catches a large share of OCR errors before they reach your ledger.

You are never billed for a failure

This is enforced in code, not promised in marketing copy:

SituationBilled?
Document parsed successfullyYes
Download failed, file corrupt, password-protectedNo
Document exceeded the timeoutNo
No text could be extractedNo
VIES was down or rate-limitedNo
VAT number was not an EU formatNo

Every run also writes a SUMMARY record to the key-value store with the actual success rate for that run.

What you get per document

{
"status": "ok",
"invoice_number": "INV-2026-0417",
"issue_date": "2026-03-14",
"due_date": "2026-03-28",
"currency": "EUR",
"total_net": 2450.00,
"total_vat": 539.00,
"total_gross": 2989.00,
"vat_rate": 22.0,
"totals_reconcile": true,
"seller_name": "ACME Software OÜ",
"seller_vat": "EE101584055",
"seller_vat_valid": true,
"seller_registered_address": "Tartu mnt 84a, 10112 Tallinn",
"buyer_name": "Northwind Trading SIA",
"buyer_vat": "LV40003032949",
"buyer_vat_valid": true,
"iban": "LV80BANK0000435195001",
"iban_valid": true,
"line_items": [
{ "description": "Annual licence", "quantity": 5, "unit_price": 490.0, "amount": 2450.0 }
],
"confidence": 1.0,
"extraction_method": "text_layer",
"billed": true
}

confidence is a transparent 0–1 score. Route anything below 0.6 to human review.

Languages

Field labels are recognised in English, German, French, Spanish, Italian, Dutch, Polish, Czech, Latvian, Lithuanian, Estonian and more. Both European (1.234,56) and Anglo (1,234.56) number formats are handled, along with parenthesised negatives and space-separated thousands.

Scanned documents are OCR'd on-box with Tesseract in 22 languages. No external AI API is called, so your invoices never leave the Apify platform — which matters if you are processing documents under GDPR.

Input

FieldTypeDescription
documentUrlsarrayPublic URLs of PDFs or images. Up to 100 per run.
documentsBase64array{"filename": "...", "data": "<base64>"} for private files.
validateVatbooleanCheck VAT numbers against VIES. Default true.
validateIbanbooleanValidate IBAN checksums. Free. Default true.
forceOcrbooleanOCR even when a text layer exists. Default false.
ocrLanguagesarrayTesseract codes, priority order. Default ["eng","deu"].
extractLineItemsbooleanReturn the invoice table rows. Default true.
includeRawTextbooleanAttach full extracted text. Default false.
perDocumentTimeoutSecsintegerHard per-document limit. Default 90.

Use with AI agents (MCP)

This Actor is exposed as an MCP tool, so an agent can call it directly:

https://mcp.apify.com/?actors=YOUR_USERNAME/eu-invoice-vat-extractor

Typical agent prompt: "Extract this supplier invoice and confirm the seller's VAT number is currently registered."

Pricing

Pay per event — you pay for results, not for runtime.

EventWhat triggers it
invoice-parsedOne document turned into a usable record
ocr-pageOne page actually rasterised and OCR'd (scanned documents only)
vat-validatedOne VIES lookup that actually returned an answer

Repeated VAT numbers within a run are cached and charged once.

Limits

  • 100 documents per run, 25 MB per file, first 40 pages of a PDF
  • Password-protected PDFs are reported as failed, not billed
  • VIES is operated by the European Commission; individual member states go offline periodically. When that happens you get status: "unavailable" and no charge
  • Party names are read from the layout and are best-effort; where VIES returns a registered name, that authoritative value replaces the guess

Development

apify login
apify run --purge # local run
apify push # build on the platform

Parsing logic is deterministic and unit-tested:

$python -m pytest tests/ -q