Invoice to Excel: Invoice & Receipt OCR with AI avatar

Invoice to Excel: Invoice & Receipt OCR with AI

Pricing

from $100.00 / 1,000 document processeds

Go to Apify Store
Invoice to Excel: Invoice & Receipt OCR with AI

Invoice to Excel: Invoice & Receipt OCR with AI

Turn PDF, image, Excel or Word invoices and receipts into one Excel/CSV row each: date, seller, tax/VAT ID, subtotal, VAT, total and currency. Missing fields and total mismatches are flagged, never guessed. Free preview, then pay per document.

Pricing

from $100.00 / 1,000 document processeds

Rating

0.0

(0)

Developer

Turgay NANTA

Turgay NANTA

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Share

Invoice to Excel: AI Invoice and Receipt OCR to Excel, CSV and PDF

Typing supplier invoices and receipts into a spreadsheet is slow and error-prone, and most invoice tools want a monthly subscription before you have processed a single document.

Send your invoices and receipts as PDF, image, Excel, Word or text. The Actor reads each one with an AI vision model and returns one clean row per document: invoice date (also split into year, month and day), seller, seller tax or VAT ID, subtotal, VAT or tax, grand total and currency, plus a confidence flag that tells you which rows to double-check. You get the table in the dataset and, if you want, as an Excel file, a CSV, a PDF report or an HTML report.

  • Many file types: PDF, PNG, JPG, WEBP, GIF, Excel (.xlsx), Word (.docx), and plain text, CSV or HTML.
  • Seller, not buyer: the extraction rules tell the model to take the party that issued the invoice, even when the buyer is printed at the top.
  • Never guesses: a field the model cannot see stays empty and the row is marked Low confidence with the reason.
  • Checks the math: if subtotal plus VAT does not match the total, the row is flagged.
  • Free preview first: by default the Actor only counts your documents and pages. Nothing is processed or charged until you switch on Process.
  • Pay per document: $0.10 per processed document. No subscription. Documents that fail are not charged.

At a glance

InputFiles as base64 (files) or pasted invoice text (texts)
OutputOne row per document in the dataset, plus optional Excel, CSV, PDF and HTML files
ColumnsDocument, Date, Year, Month, Day, Seller, Tax ID, Subtotal, VAT/Tax, Total, Currency, Confidence, Note
Quality checksMissing date, total or tax ID; tax ID length; subtotal + VAT vs. total
LanguagesReads invoices in any language the model understands; labels in English, Turkish, German, Spanish or French
ModelAnthropic Claude vision model; the default is the stronger one
Pricing$0.10 per processed document; preview is free. See Pricing
Runs onApify Console, API, schedules, n8n, Make, Zapier, AI agents via MCP

Quick start

  1. Click Start with the default input. The Actor loads a built-in sample invoice and returns a free preview (document and page count). Nothing is charged.
  2. Tick Process (incurs charges) and start again. The sample invoice is extracted for $0.10 plus the $0.0001 start fee.
  3. Replace the sample with your own documents in Invoice files (see Input) and choose an output format, for example Excel (.xlsx).
  4. Open the Dataset tab for the table, and the Key-value store tab for INVOICE_TABLE.xlsx and the other files.

What the result looks like

The built-in sample is a short text invoice. Processed, it gives this row:

DocumentDateYearMonthDaySellerTax IDSubtotalVAT/TaxTotalCurrencyConfidenceNote
text-12026-06-292026629ABC Ltd123456789010002001200USDHigh-

A scanned receipt without a readable tax number would come back like this, so you know exactly what to check:

DocumentDateSellerTax IDTotalCurrencyConfidenceNote
receipt-0412.jpg2026-04-12Corner Cafe-18.4EURLowmissing: vendor_tax_id

The second row is an illustration of the format; your run reports what it finds in your documents. Empty values are shown as a dash.


Why people use it

Generic OCR turns a page into text, and you still have to find the total, the date and the seller yourself. This Actor goes straight to the fields a bookkeeper types in, and it is honest about what it could not read.

  1. Fields, not text. Each document becomes one row with the columns an expense sheet or bookkeeping import needs.
  2. Seller and buyer are kept apart. The instructions tell the model which party issued the invoice, including layouts where the customer block is printed first.
  3. No invented values. The model is told to return nothing for a field it cannot see. Missing critical fields are listed in the Note column.
  4. Arithmetic check. Subtotal plus VAT is compared with the total; a gap above 1% is flagged as total mismatch.
  5. Date safety net. If the model leaves the date empty, the Actor looks for a labelled date such as "Invoice Date: 01. 06. 2026" in the document text and uses it.
  6. Numbers you can add up. European (1.234,56) and US (1,234.56) formats are both converted to real numbers. In the Excel file amounts stay numeric, with thousands separators for display.

OCR tool vs. this Actor

Plain OCRThis Actor
OutputPage textOne row per invoice with named columns
Seller vs. buyerNot handledExplicit rule, seller only
Unreadable fieldSilent gap or wrong textEmpty field plus a Low-confidence note
Total checkNoSubtotal + VAT vs. total
Excel and CSV filesSeparate stepBuilt in
Cost before you commitVariesFree preview, then per document

Use cases

Bookkeepers and accountants

Collect a client's monthly supplier invoices, run them in one batch and paste the Excel table into your working file. Sort by Confidence and review only the Low rows.

Small business owners and freelancers

Turn a folder of receipts and supplier bills into an expense sheet before the tax deadline. The Year and Month columns make monthly totals a simple pivot.

Accounts payable teams

Pre-fill invoice registers from incoming PDFs. The Tax ID and Total columns give you what you need to match an invoice to a supplier and a payment.

E-commerce sellers

Keep track of supplier and freight invoices from several countries in one sheet. The Currency column keeps totals in different currencies apart.

Employees and managers handling expense reports

Photograph receipts, send the images, and get date, merchant and total as rows instead of typing them.

Developers and automation builders

Add invoice extraction to a workflow: an email attachment or a cloud folder feeds the Actor, and the rows go to a database, an accounting import or a sheet.

Teams working with Turkish e-invoices

The extraction rules cover e-Fatura layouts where the customer appears under the "SAYIN" heading at the top, and Turkish number and date formats are parsed.


How it works

  1. Load. Each file is decoded from base64 and its type is detected from the file signature and extension: PDF, image, Excel, Word or text.
  2. Preview (free). The Actor counts documents and PDF pages and stores a PREVIEW record with a short text sample. If Process is off, the run stops here with no charge.
  3. Extract. With Process on, each document is sent to an Anthropic Claude model: PDFs and images directly to the vision model, Excel and Word as their extracted text, text as it is. The model returns a fixed JSON structure.
  4. Normalise. Dates become YYYY-MM-DD, amounts become numbers, the currency becomes a code (symbols such as $, €, £ and ₺ are recognised), and the tax ID keeps only letters and digits.
  5. Check. Missing date, total or tax ID, a tax ID outside 8-15 characters, and a subtotal + VAT that does not match the total are flagged.
  6. Fallback. A missing date is searched for as a labelled date in the document text.
  7. Output. One dataset row per document, the chosen extra files in the key-value store, and a REPORT record with counts.
  8. Charge. Only documents that were actually extracted are charged.

If a document cannot be processed (for example the model response is cut off or unreadable), it still gets its own row with Confidence Low and the reason in the Note column, and it is not charged.


Input

FieldTypeDefaultDescription
filesarray[]Documents as {"name": "...", "data": "..."}. data is base64 or a data URI. The name's extension helps type detection.
textsarrayone sample invoiceInvoice text pasted directly, for example OCR output. Each string is one document.
output_formatselectExcel (.xlsx)Extra file besides the dataset: Table only (tablo), Excel (excel), CSV (csv), PDF Report (pdf), HTML Report (rapor), All (hepsi).
languageselectEnglishLanguage for labels the model writes. Field values are always copied from the document as printed.
modelselectclaude-sonnet-4-6The stronger default, or claude-haiku-4-5-20251001 for simple, standard invoices. The price per document is the same.
processbooleanfalseOff: free preview only. On: extract and charge per processed document.

Remove the sample from texts (or leave the field empty) when you send your own files, otherwise the sample is processed and charged as one more document.

Example: two files

{
"files": [
{"name": "supplier-march.pdf", "data": "JVBERi0xLjcKJ..."},
{"name": "receipt-0412.jpg", "data": "data:image/jpeg;base64,/9j/4AAQSk..."}
],
"texts": [],
"output_format": "excel",
"process": true
}

Example: encode a folder in Python and run

import base64, pathlib
from apify_client import ApifyClient
files = [{"name": p.name, "data": base64.b64encode(p.read_bytes()).decode()}
for p in pathlib.Path("invoices").iterdir() if p.is_file()]
client = ApifyClient("YOUR_TOKEN")
run = client.actor("enezli/invoice-to-excel").call(run_input={
"files": files, "texts": [], "output_format": "hepsi", "process": True})
store = client.key_value_store(run["defaultKeyValueStoreId"])
pathlib.Path("invoices.xlsx").write_bytes(store.get_record("INVOICE_TABLE.xlsx")["value"])

Run it once with "process": False first to see the document and page count in PREVIEW before you pay.


Output

Dataset: one row per document

ColumnContent
DocumentFile name, or text-1, text-2 for pasted text
DateInvoice date as YYYY-MM-DD, or a dash when not found
Year, Month, DayThe date split into numbers, handy for pivots
SellerThe party that issued the invoice
Tax IDSeller tax, VAT or registration number, letters and digits only
Subtotal, VAT/Tax, TotalNumbers as printed, converted to numeric values
CurrencyCurrency code, for example USD, EUR, GBP, TRY
ConfidenceHigh, or Low when any check failed
NoteWhy a row is Low, for example missing: vendor_tax_id, tax id length, total mismatch, truncated response, processing error

Key-value store files

KeyWhenContent
INVOICE_TABLE.xlsxExcel or AllStyled sheet, numeric amount columns, frozen header
INVOICE_TABLE.csvCSV or AllUTF-8 with BOM so Excel opens accents correctly; comma separated; amounts written with thousands separators
INVOICE_REPORT.pdfPDF Report or AllLandscape A4 table
INVOICE_REPORT.htmlHTML Report or AllSelf-contained report with confidence badges and a count of rows to review
REPORTAlways when processingtotal_documents, processed, unparsed, low_confidence, high_confidence, language
PREVIEWAlwaysdocument_count, estimated_pages, sample_text

Pricing

This Actor charges per event. Current prices are on the Pricing tab; at the time of writing:

EventWhenPrice
actor-startOnce per run, only when Process is on$0.0001
documents-processedPer document successfully extracted$0.10

The preview is free: a run with Process off charges nothing. Documents that fail are not charged.

Documents in one runCost
1$0.1001
10$1.0001
50$5.0001
100$10.0001

A monthly routine: 4 weekly runs of 25 invoices = 4 x $2.5001 = $10.0004 for 100 invoices a month.

The model choice does not change the price. The Excel, CSV, PDF and HTML files are included.


Worked example: month-end supplier invoices

A small workshop receives about 40 supplier invoices a month as PDFs and phone photos.

  1. Preview. The owner sends all 40 files with Process off. PREVIEW shows 40 documents and 52 pages, so every file was read. Cost: nothing.
  2. Process. Same input with Process on and All as output format. Cost: 40 x $0.10 + $0.0001 = $4.0001.
  3. Review. REPORT shows 36 High and 4 Low rows. The Note column says two receipts had no tax number, one invoice had a total mismatch because of a discount line, and one photo was cut off.
  4. Fix. The cut-off photo is taken again and sent in a new run for $0.1001. The other three are checked against the paper copies.
  5. Book. The Excel file goes to the accountant; the Year and Month columns give the monthly VAT total with one pivot.

The numbers in this example are illustrative; your own run reports its own counts.


Review checklist for Low rows

  • missing: invoice_date: find the date on the document and type it in
  • missing: vendor_tax_id: common on small receipts; decide whether your bookkeeping needs it
  • tax id length: compare the number with the document; a character may be misread
  • total mismatch: look for discounts, shipping lines or several VAT rates
  • truncated response, parse: or processing error: send the file again (not charged the first time)

Integrations

API

curl -X POST "https://api.apify.com/v2/acts/enezli~invoice-to-excel/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"texts":["INVOICE Date: 2026-06-29 Seller: ABC Ltd Tax ID: 1234567890 Total: 1,200.00 USD"],"process":true,"output_format":"tablo"}'

JavaScript

import { ApifyClient } from 'apify-client';
import { readFileSync } from 'node:fs';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const data = readFileSync('invoice.pdf').toString('base64');
const run = await client.actor('enezli/invoice-to-excel').call({
files: [{ name: 'invoice.pdf', data }], texts: [], process: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

n8n, Make, Zapier

A typical flow: a new email attachment or a new file in a cloud folder, convert the file to base64, run the Actor with process on, then append the dataset rows to Google Sheets, Airtable or your accounting import. Rows with Confidence = Low can be routed to a person for review.

Schedules

If invoices arrive in a shared folder, a scheduled workflow can collect the week's files and send them to the Actor in one run, so the Excel file is ready every Monday.

AI agents (MCP)

Through the Apify MCP server, an assistant can pass invoice text or files to the Actor and read back the structured rows.


Tips for better results

  • Start with the preview. It confirms the Actor could read every file and shows how many pages you sent.
  • Send clear images. Straight, well-lit photos with the whole invoice in frame give the best results.
  • Name files meaningfully. The file name becomes the Document column, which makes review easier.
  • Keep one invoice per file. Each file becomes one row.
  • Clear the sample text in texts when you send your own files.
  • Review Low rows only. The Note column tells you what to check.
  • Use the default model for invoices with complex layouts or two company blocks.

Limitations

  • One row per document. A PDF that contains several invoices is read as one document. Split it first.
  • Header fields only. The output covers date, seller, tax ID, subtotal, VAT, total and currency. Line items are not included in the table or files.
  • Buyer details are not extracted. Only the seller is returned.
  • Images: PNG, JPG, WEBP and GIF are supported. Convert TIFF or BMP to PNG or JPG first.
  • Input size: documents travel inside the run input as base64, which has a size limit on Apify. Send large batches in several runs.
  • Scanned PDFs: the date fallback needs a PDF with a text layer; the main extraction also works on scanned PDFs through the vision model.
  • Confidence is rule-based. A High row passed the checks above; it is still worth spot-checking amounts for important payments.
  • Currency symbols. A lone $ is read as USD. If you handle CAD, AUD or other dollar currencies, check the Currency column.

Troubleshooting

SymptomLikely causeFix
Only a row saying "PREVIEW: ... Turn on 'process'"Process is offTick Process (incurs charges) and run again
"No valid document uploaded"files and texts are both emptyAdd files or text
One extra document was processedThe sample invoice was still in textsEmpty texts when you send files
A row with processing errorThe file could not be processed, for example an unsupported image format such as TIFF or BMPConvert to PDF, PNG or JPG and run that file again; it was not charged
truncated response or parse: in NoteThe model's answer was cut off or unreadableRun the file again, or try the default model; it was not charged
total mismatchSubtotal + VAT differs from the total, for example because of discounts or several tax ratesCheck the document; the row keeps the values as printed
Seller shows the buyer's nameUnusual layoutUse the default model; if it persists, check the row manually

FAQ

Do I need an Anthropic or OpenAI key? No. The model call runs inside the Actor. You only need an Apify account.

Which languages can the invoices be in? Any language the model reads. Values are copied as printed; the language setting only affects labels the model writes.

Is my data stored or shared? Documents are sent to Anthropic's API only to extract the fields. Results are stored in your own Apify storage (dataset and key-value store).

What happens with a blurry photo? Fields the model cannot read stay empty and the row is marked Low with the reason. Nothing is guessed.

Can I get line items? Not in the current output. Each row holds the document's header fields and totals.

Can I process hundreds of invoices? Yes, in several runs to stay within the input size limit. Each run returns its own Excel file.

Why is a row Low when everything looks right? Usually the tax ID is missing or outside 8-15 characters, or subtotal plus VAT differs from the total by more than 1%. The Note column names the reason.

Is the preview really free? Yes. With Process off, the run only counts documents and pages and charges nothing.

Can I choose the output language of the Excel headers? Column headers are always English so imports stay stable. The language setting applies to text the model writes.

How are amounts formatted? In the dataset and Excel they are numbers. The CSV and the PDF and HTML reports show them with thousands separators, for example 1,200.00.

Can an AI agent use it? Yes, through the Apify MCP server. With Process off by default, an agent can preview safely before any charge.


Trademarks

This Actor is not affiliated with, endorsed by, or connected to Microsoft, Anthropic or any accounting software vendor. Excel is a trademark of Microsoft Corporation. All product names are trademarks of their respective owners.