Extract invoice data
Stop keying vendor bills by hand: one invoice comes back as supplier name and address, invoice number, due date, every line with quantity and unit price, plus subtotal, tax and grand total. It works whatever layout each vendor uses.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
Accounts payable teams still spend hours a week keying in vendor invoices that arrive as PDFs or scans in a different layout every time.
Why invoices are hard to read automatically
No two vendors lay out an invoice the same way. One puts the tax breakdown in a footer table, another buries it in a paragraph, a third splits shipping and handling into separate lines while a fourth folds them into the subtotal. A finance team receiving bills from dozens of suppliers is really receiving dozens of different documents, and someone has to normalize them before they can be paid or booked. This tool reads the invoice for its structure, who is billing whom, the itemized charges and the totals, instead of copying the page as loose text.
What you get back and when to use it
You receive the vendor name and address, invoice number and date, due date, each line with its description, quantity and unit price, and the subtotal, tax and grand total: the values an accounting system actually posts. Use it to compare an invoice with the purchase order and the goods-received note before approving payment, or to process client bills from many vendors without learning each layout. The usual mistake is trusting a plain transcript of the page, where tax and shipping end up in the wrong total. Billing is per page, so a long invoice costs in proportion.
The layout problem invoices create
No two vendors format an invoice the same way — one puts the tax breakdown in a footer table, another buries it in a paragraph, a third splits shipping and handling into separate lines while a fourth folds them into the subtotal. A finance team receiving invoices from dozens of suppliers is really receiving dozens of different documents that happen to share a name, and someone has to normalize all of it before it can be paid or booked.
That normalization work rarely scales with headcount, which is why it's usually the first thing an automation project targets.
Who this replaces manual entry for
Accounts payable clerks keying vendor bills into an ERP, procurement teams matching invoices against purchase orders, bookkeeping services processing client invoices at volume, and SaaS products that let a business upload a vendor bill and expect usable data back rather than a flat scan. Small finance teams especially feel the pinch, since a single person may be responsible for invoices from every supplier the company works with.
What you can do with it
Three-way matching
Procurement compares extracted invoice line items against the original purchase order and goods-received note before approving payment.
Bookkeeping services at scale
A bookkeeping firm processes client invoices from dozens of vendors without training staff on each vendor's layout.
Expense platform ingestion
A spend-management product lets customers upload vendor invoices and returns categorized, structured spend data automatically.
FAQ
Is it free to try?
There's no free tier — free tiers get abused and slow everyone down. No subscription, no tokens, no invented credits, and a failed task is never charged.
What file formats are supported?
PDF invoices and clear image scans both work; a legible source page gives the most complete extraction.
Does it handle multi-page invoices?
Yes, and pricing scales per page, so a two-page invoice with a long itemized list is billed accordingly.
Can it match different vendor layouts automatically?
Yes, it's built to read invoice structure generally rather than a fixed template, so it adapts across vendors without per-vendor configuration.
Is it accurate enough to skip manual review?
It's accurate on standard invoice layouts, but as with any automated extraction, high-value or unusual invoices are worth a quick human check before posting.
Am I billed for a failed extraction?
No. A failed task retries automatically up to three times and is never charged; you get a clear error instead.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/ocr/invoice \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/ocr/invoice", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/invoice",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/invoice", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/invoice", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"image": "https://ejemplo.com/imagen.jpg"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.invoice",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 25 |
max_pages | 10 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
413 | input_too_large | The file exceeds the size limit. |
422 | task_failed | The task failed after 3 retries. You are never charged for it. |
Technical notes
This endpoint reads an invoice and returns vendor details, line items, subtotal, tax and grand total as structured JSON, ready to post directly into a ledger.
The shape of the result
Submit the invoice, receive a task_id right away, and the completed job returns vendor name and address, invoice number and date, due date, individual line items with description, quantity and unit price, plus subtotal, tax and grand total — the fields an accounting system actually posts, not a transcript of the page.
Where it sits in the payables pipeline
Because the endpoint is asynchronous and priced per page rather than per invoice regardless of length, a multi-page invoice with dozens of line items is billed proportionally: an inbox-monitoring service pulls incoming invoice PDFs, submits each one on arrival, and the webhook delivers structured data straight into the three-way match against the purchase order and receiving record.
A format shaped by decades of paper
The modern commercial invoice traces its structure back to paper ledgers — a header of who's billing whom, a body of itemized charges, a footer of totals — a layout that has survived the move to PDF mostly unchanged, which is exactly why automated reading of it still requires understanding invoice structure specifically rather than treating it as generic text.
Integration use cases
Accounts payable automation
An AP team forwards incoming vendor PDFs to the API and posts the parsed line items and totals directly into the ERP.
Technical questions
How does the Invoice OCR API work?
Send the invoice file to POST /ocr/invoice, get a task_id immediately, and receive the structured JSON by webhook or a signed link once processing finishes.
What does it cost?
$0.009 per request plus $0.0571 per page, published and flat, so a longer invoice costs proportionally more, not per line item.