space ocr
ArticlesDocs
Guide

The best OCR software for receipts and invoices

A buyer's guide to the best OCR software for receipts and invoices: verifiable accuracy, line items, export, API, webhooks, audit trail, and transparent pricing — proven with a live demo.

8 min read· 2026-06-25

Every business that handles paper handles receipts and invoices — and both are miserable to type in by hand. The promise of OCR is obvious: photograph the document, get structured data, move on. The problem is that most OCR tools stop at plausible. They hand you a vendor name and a total and leave you to trust them. For a personal expense log that is fine. For accounts payable, expense reconciliation, or anything that gets audited, "the model said so" is not an answer you can stand behind.

This guide is a buyer's checklist. It walks through what actually separates the best OCR software for receipts and invoices from a flashy demo — verifiable accuracy, line-item extraction, clean exports, a real API with webhooks, an audit trail, and pricing you can predict — and then shows how space-ocr delivers each one, with a live, checkable demo rather than a screenshot.

Proof first: see a real extraction you can check

Before any feature list, here is the thing most vendors won't show you: an extraction where every value points back to the exact spot on the page it came from. Hover any field below — the box on the receipt is where that value was read.

Source receipts with extracted-field bounding boxes
Verified fields
KINSHO · 合計 2,045
ライフ · 合計 4,286

Every value carries a verified on-page location — bbox + 4-point vertices + match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.

DemoEach extracted field carries its own bounding box and <b>match ratio</b> — not just a value, but where on the page it lives.
Each extracted field carries its own bounding box and match ratio — not just a value, but where on the page it lives.

What to look for in receipt and invoice OCR

Receipts and invoices are the hardest "easy" documents. Layouts vary by vendor, totals hide among subtotals and tax lines, line items wrap, and a phone photo arrives tilted and glare-streaked. A tool that nails one clean PDF can fall apart on the next crumpled thermal receipt. Use these criteria to cut through the marketing.

What mattersWhy it mattersWeak toolStrong tool
Verifiable accuracyA number you can't trace is a number you have to re-key anywayReturns a value, maybe a confidence scoreReturns each value with its on-page location you can jump to
Line itemsInvoices and receipts are tables, not flat fieldsGrabs the total, drops the rowsExtracts repeating line-item rows with per-cell positions
ExportData has to leave the tool to be usefulCopy-paste or locked-in viewerCSV (Excel/CJK-safe) and JSON over an API
API + webhooksReal volume means automation, not clickingUI-only, or a thin sync endpointREST API with async jobs and signed webhooks
Audit trailReviewers need to see what changedOverwrites OCR output silentlyKeeps the original value beside human edits
Transparent pricingBudgeting hates surprises"Contact us" for everythingA published per-image price and a free tier

The rest of this article takes each row in turn.

Verifiable accuracy beats a confidence score

A confidence score tells you the model feels sure. It doesn't tell you whether total: 2,045 is the number actually printed on the receipt. space-ocr answers a stricter question by returning, alongside every value:

  • bbox — an axis-aligned rectangle { xmin, ymin, xmax, ymax } on a 0–1000 normalized grid (0,0 = top-left, 1000,1000 = bottom-right), independent of the image's pixel size.
  • vertices — four ordered points forming an oriented box that follows the document's tilt, so a skewed phone photo still boxes cleanly.
  • match_ratio — the fraction of the value's characters that were actually located on the page (0–1). A field is treated as confidently matched at ≥ 0.85; 1.0 means every character was found.

Because the location travels with the value, you can render the box, cite the coordinates, or re-check a flagged field without re-running OCR. That's the foundation of the OCR audit trail — and it's why the demo above isn't a mockup.

✓ Verified

The model never invents the coordinates. The language model returns each field value plus the IDs of the words it used — it does not return bounding boxes. The engine then looks those word tokens up in the underlying vision OCR and unions their boxes. Models can hallucinate text; they cannot hallucinate a position the vision layer never detected. A value that isn't really on the page has nowhere to anchor.

Line items, not just totals

The single biggest gap in cheap receipt OCR is the table. Anyone can grab a grand total; the value is in the rows — each product, quantity, unit price, and discount. space-ocr extracts these as repeating rows, and every cell keeps its own position, so a wrapped or merged line item is still traceable.

You request them with a field of type: "array" whose children describe one row. For deeper coverage of the row model, see extracting line items from invoices.

line-item field spec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "fields": [
    { "name": "vendor", "type": "string" },
    { "name": "invoice_date", "type": "string" },
    { "name": "total", "type": "string" },
    {
      "name": "line_items",
      "type": "array",
      "children": [
        { "name": "description", "type": "string" },
        { "name": "quantity", "type": "number" },
        { "name": "unit_price", "type": "number" }
      ]
    }
  ]
}

Built-in templates: skip the schema

You don't have to hand-write a field spec for the common cases. space-ocr ships predefined templates you apply with a single templateId — including receipt and invoice, plus business cards, quotes, purchase orders, delivery notes, and several ID documents. The template supplies the field set and prompt for you; if you also pass your own fields, those win.

The whole call is one HTTP request — no SDK, no PDF preprocessing (the engine takes raster images: JPEG, PNG, GIF, BMP, TIFF, WebP).

extract an invoice with the built-in template
1
2
3
4
5
6
7
8
curl -s https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer $SPACE_OCR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/invoice.jpg",
    "imageType": "url",
    "templateId": "invoice"
  }'

Export and the API: where the data goes

Extraction is worthless if the data is trapped. space-ocr gives you two clean exits:

  • CSV — sheets export with a UTF-8 BOM so Excel opens Japanese, Korean, and Chinese text correctly. Array (line-item) rows unfold into sub-rows, and any manual correction overrides the OCR value in the output.
  • JSON over RESTPOST /ocr/fields for a single document, POST /upload to push images straight into a sheet, and GET /view to query a stored sheet server-side (where, sort, select, limit) without re-running OCR or paying again.

For automation at volume, /upload is async by default: it returns a job per file and notifies you on completion via webhooks — one signed (HMAC-SHA256) endpoint per space, with events like ocr.completed and ocr.failed. That's the difference between a tool you click and a pipeline that runs itself. The full surface is in the invoice data extraction API guide and the API docs.

DemoDrop a receipt or invoice and structured fields come back — <b>each one positioned on the source image</b>.
Drop a receipt or invoice and structured fields come back — each one positioned on the source image.

Audit trail: what the machine read vs. what a human changed

The best receipt and invoice OCR doesn't just record its own output — it records corrections. When you edit a cell in space-ocr, your value is stored separately from the original OCR value, and an Original tooltip always shows what the engine first read. A reviewer sees the machine value and the human override side by side, which is exactly what an audit asks for.

DemoClick any cell and the matching region lights up on the original image — the fastest way to spot-check a batch.
Click any cell and the matching region lights up on the original image — the fastest way to spot-check a batch.

Transparent, predictable pricing

Verifiable accuracy and an honest price tend to come from the same place. space-ocr is ¥10 per image (about $0.05). There's a free tier of 100 scans a month with no credit card, and Pro at $39/month includes 1,100 scans, team sharing, and 100 GB of storage. Higher volume is handled on the Business plan by contact. No per-field charges, no per-page surcharge, and queries against a stored sheet (GET /view) are free.

How to extract a receipt or invoice

  1. Send the image
    POST the receipt or invoice to /ocr/fields with imageType 'url' or 'base64'. The engine accepts raster images (JPEG, PNG, GIF, BMP, TIFF, WebP).
  2. Apply a template or fields
    Pass templateId 'receipt' or 'invoice' to use the built-in schema, or supply your own fields — including an array field with children for line items.
  3. Read the structured result
    Each value returns with its bbox, vertices, match_ratio, and bbox_source, plus a field_bboxes map locating every field on the page.
  4. Verify and correct
    Click any cell to highlight the exact region it was read from; a match_ratio below 0.85 flags a value worth a closer look. Edits are stored beside the original value.
  5. Export or query
    Download CSV (UTF-8 BOM, line items unfolded) or query a stored sheet with GET /view using where, sort, and select — no re-OCR, no extra charge.
What is the best OCR software for receipts and invoices?
The best tools do more than read text — they extract line items, export clean CSV and JSON, expose a REST API with webhooks, keep an audit trail of corrections, and price transparently. space-ocr adds verifiable accuracy: every value returns with its on-page bounding box and a match ratio, so you can trace any number back to the pixels it came from. It includes built-in 'receipt' and 'invoice' templates and starts free at 100 scans a month.
Can OCR extract line items from a receipt or invoice, not just the total?
Yes. With space-ocr you request line items as a field of type 'array' whose children describe one row (description, quantity, unit price, and so on). Each cell keeps its own bounding box, so a wrapped or merged line item is still traceable to its position on the page.
Does receipt and invoice OCR work on phone photos?
Yes. The engine applies EXIF rotation on load so returned coordinates match the displayed image, and it returns oriented boxes (four vertices) that follow the document's tilt. Skewed, rotated phone photos still box cleanly. Input is raster images — JPEG, PNG, GIF, BMP, TIFF, or WebP.
How much does receipt and invoice OCR cost?
space-ocr is ¥10 per image (about $0.05). There's a free tier of 100 scans a month with no credit card, and a Pro plan at $39/month that includes 1,100 scans, team sharing, and 100 GB of storage. Querying stored data with GET /view is free, and there are no per-field or per-page surcharges.
Can I automate receipt and invoice processing at volume?
Yes. POST /upload pushes images straight into a sheet and runs asynchronously by default, returning a job per file and notifying you on completion via signed (HMAC-SHA256) webhooks such as ocr.completed and ocr.failed. You can also poll GET /jobs/{jobId} as an alternative to webhooks.

Try the best OCR for your own receipts and invoices

Free tier — 100 scans a month, no credit card. Every value comes back with its on-page location.

Related