Receipt extraction for expense review

A receipt reads top to bottom: merchant header, itemized purchases, then a totals block with tax and total. Here is how to read it.

What a Receipt looks like

Receipt — sample layoutannotated
Merchant name & location
The business you paid and, often, the specific store or address.
Date & time
When the purchase happened — important for expense periods and returns.
Line items & prices
Each product or service purchased with its individual price.
Subtotal
The total of the items before tax and tip.
Tax
Sales tax applied to the subtotal.
Tip & total
Any gratuity added and the final amount charged.
Payment method
How you paid — the card last four, cash, or another method.

Illustrative layout for education. A real receipt may vary by issuer.

Evaluate this workflow

For bookkeepers and expense operations

Turn merchant, date, and totals into a reviewable expense record.

Check before you accept a record

  • Check subtotal, tax, tip, and total against the printed receipt.
  • Compare duplicate images before posting an expense twice.
  • Review ambiguous dates and decimal separators instead of guessing.

An exception to hold for review

If subtotal + tax + tip differs from the printed total, inspect discounts and rounding on the source before accepting the record.

Run a small evaluation

  1. Extract a representative receipt.
  2. Review totals, date, merchant, and duplicates.
  3. Map the approved record into your expense system.

Record the number of files submitted, failed files, required-field corrections, and minutes spent reviewing each file. Those observations tell you whether this workflow fits your documents; a sample response does not measure extraction accuracy.

Example reviewed September 16, 2026 against the configured field names. Fictional values, partial field set, and a suggested human workflow; not a recorded extraction or a promise of automatic approval.

A measured synthetic extraction

On September 16, 2026 Pacific time, we sent one labeled text PDF for this document type to our production extraction service. It returned HTTP 200 in 4.43 seconds, including network time. This was a backend request, not a test of signup, payment or the complete upload interface.

5 selected field comparisons differed after the production field mapping. Successful delivery does not establish extraction accuracy.

Inspect the field differences
[
  {
    "path": "merchant_name",
    "expected": "Example Cafe (fictional)",
    "actual": "Example Cafe",
    "actualMissing": false
  },
  {
    "path": "date",
    "expected": "2026-08-12",
    "actual": null,
    "actualMissing": true
  },
  {
    "path": "tax",
    "expected": 1.5,
    "actual": null,
    "actualMissing": true
  },
  {
    "path": "tip",
    "expected": 3,
    "actual": null,
    "actualMissing": true
  },
  {
    "path": "total",
    "expected": 24.5,
    "actual": null,
    "actualMissing": true
  }
]

Expected values were fixed before the run. Comparison uses exact values and types, checks the expected object fields and requires exact array lengths. A numeric string differs from a number; missing and null values differ. These easy, clearly labeled synthetic pages do not represent scanned documents, complex official forms or customer accuracy. One observation cannot establish typical latency.

Field contract correction

We replayed the same recorded response after correcting field aliases, declared tax-number types and bank last-four handling. This is an offline replay, not another extraction request. 1 selected field comparisons still differ from the original expected sample. The original benchmark stays available; unsupported distinctions and source wording are not invented to make the comparison pass.

Inspect the corrected mapping results

Download the 15-page synthetic input packetDownload expected and returned fields

Illustrative structured output

These synthetic values explain the field layout; they are not a measured extraction result or an accuracy benchmark. Actual coverage depends on your document.

{
  "merchant_name": "Example Cafe (fictional)",
  "date": "2026-08-12",
  "subtotal": 20,
  "tax": 1.5,
  "tip": 3,
  "total": 24.5,
  "payment_method": "Card"
}

Try the interactive sample without signupReview CSV, Excel, and JSON exportsSee the extraction API

Extract from your own receipt — 3 free, no credit card

Want the Receipt extraction guide?

Get a free step-by-step guide to extracting and reviewing data from Receipts — plus tips for recurring workflows.

Free. No credit card. Unsubscribe anytime.

FAQ

What does a Receipt look like?

A receipt reads top to bottom: merchant header, itemized purchases, then a totals block with tax and total. Here is how to read it. The annotated example above shows each region and what it contains.

Can I use this Receipt sample as a template?

Use it to understand the layout and fields. When you need the actual data off a real receipt, upload it and get structured JSON/CSV back — no manual typing.

What counts as a valid receipt for expenses?

An itemized receipt showing the merchant, date, items, and total is the standard most expense policies require.

What is the difference between a receipt and an invoice?

A receipt proves a completed payment; an invoice requests a payment that has not yet been made.

This page shows an illustrative Receipt example for educational purposes and is not tax, legal, or financial advice.

Receipt extraction for expense review | Receipt Extractor