Receipt OCR API

Extract structured data from receipts — merchant, date, totals, tax, and line items — as clean JSON. Send a photo or PDF, get named fields back. Rule-based parsing reads every field, then an AI model checks the result and corrects what it finds wrong before you get it.
97%

97% field-level accuracy

Tested on 500+ real receipts and invoices

Every result also carries confidence and needs_review.
How we test →

What it does

Photo or PDF

Send a scanned receipt or a phone photo and get structured fields back from one endpoint.

Totals that reconcile

Subtotal, tax, and total are checked against each other so the numbers add up.

Normalized output

ISO dates, decimal amounts, and a consistent schema you can rely on in code.

Real output

Live example

Sample document

SellerNunez Inc
Invoice #31293737
Date2020-12-15
7 line items
Total$408.66

Real output from the API — nothing hand-edited. The data object returned by GET /api/v1/documents/{id}.

Sample invoice — receipt examples coming soon.

{
  "document_type": "invoice",
  "document_number": "31293737",
  "invoice_id": "31293737",
  "receipt_id": null,
  "date": "2020-12-15",
  "due_date": null,
  "currency": "USD",
  "merchant": "Nunez Inc",
  "merchant_address": "6551 Janet Gardens, Michaelberg, KS 90952",
  "merchant_email": null,
  "customer": "Alvarez Inc",
  "subtotal": "371.51",
  "tax": "37.15",
  "tax_rate": "10.00",
  "discount": null,
  "shipping": null,
  "total": "408.66",
  "payment_method": null,
  "notes": null,
  "line_items": [
    {
      "description": "Women's black cocktail dress, size 4",
      "quantity": 3,
      "price": "19.99",
      "line_total": "59.97",
      "vat_rate": "10.00"
    },
    {
      "description": "Christmas Dress Grace Karin Sleeveless Christmas dress Red Black size Large",
      "quantity": 1,
      "price": "9.99",
      "line_total": "9.99",
      "vat_rate": "10.00"
    },
    {
      "description": "Windsor womens black and Pink Bodycon Sleeveless Dress, Womens Size Small",
      "quantity": 1,
      "price": "15.83",
      "line_total": "15.83",
      "vat_rate": "10.00"
    },
    {
      "description": "Lumiere Large Multicolored Orange Short Dress NWT",
      "quantity": 4,
      "price": "4.99",
      "line_total": "19.96",
      "vat_rate": "10.00"
    },
    {
      "description": "Xhilaration Womens L Burgandy Boho Embroidered Festival Mini Dress NEW",
      "quantity": 4,
      "price": "14.95",
      "line_total": "59.80",
      "vat_rate": "10.00"
    },
    {
      "description": "Johnny Was Medium Linen Wrap Dress Dessert Rose Embroiderd Bohemian",
      "quantity": 2,
      "price": "89.99",
      "line_total": "179.98",
      "vat_rate": "10.00"
    },
    {
      "description": "Pre-Owned Women's Nah Nah Dress Size 8 Black Sheer Formal Sexy",
      "quantity": 2,
      "price": "12.99",
      "line_total": "25.98",
      "vat_rate": "10.00"
    }
  ]
}

Code

Submit the file, then fetch the JSON.

Every sample submits the file, then fetches the result until its status is completed or failed. On Starter and Pro, a webhook can deliver it instead.

# 1. Submit the document
curl -X POST https://docuparseapi.com/api/v1/extract \
  -H "Authorization: Bearer $DOCUPARSE_API_KEY" \
  -F "file=@receipt.jpg"
# → {"success": true, "document_id": "<id>", "status": "queued"}

# 2. Fetch the result (repeat until "status" is "completed" or "failed")
curl https://docuparseapi.com/api/v1/documents/<id> \
  -H "Authorization: Bearer $DOCUPARSE_API_KEY"

Try it on your own document

Upload a receipt or invoice and see the JSON. No sign-up needed.

Try it on your document — no sign-up

Output

Fields returned

document_type
document_number
receipt_id
date
currency
merchant
merchant_address
merchant_email
subtotal
tax
tax_rate
discount
shipping
total
payment_method
notes
confidence
needs_review
line_items[] (description, quantity, price, line_total, vat_rate)

Full schema with types →

FAQ

Questions

What is a receipt OCR API?

+
A receipt OCR API reads a receipt image or PDF and returns named fields — merchant, date, total, tax, line items — as JSON, instead of raw text you still have to parse.

Which receipt fields does DocuParse API return?

+
merchant, merchant_address, date, currency, subtotal, tax, tax_rate, total, receipt_id, payment_method and line items (description, quantity, price, line_total, vat_rate). Missing values come back as null.

Does it work on phone photos of receipts?

+
Yes. JPG and PNG photos and scans are accepted. Blurry, dark or crumpled receipts lower the confidence score, and needs_review flags results worth a second look.

How is AI used?

+
Rule-based parsing reads every field, then an AI model checks the result and corrects what it finds wrong before you get it.

How much does it cost per receipt?

+
Billing is per document. Free covers 20 a month. Starter is $11.99 for 1,000 receipts a month ($0.012 each); Pro is $49.99 for 5,000.

Can I process thousands of receipts a month?

+
Yes, up to 5,000 a month on the self-serve plans, with bulk uploads in the dashboard and batch processing through the API. Above 5,000, contact support.

How long can a document be?

+
Every document includes up to 10 pages. A 10-page invoice counts as one document, the same as a one-page receipt. A document of 11 to 20 pages counts as two documents.

Do failed extractions count?

+
No. Failed or deleted documents don't count toward your monthly quota.

Is there a dashboard?

+
Yes, on every plan: spend by merchant, category and month, with PDF, CSV and JSON exports.
How the extraction works+
  1. 01Read — the document is converted to text with OCR (for images) or parsed directly (for digital PDFs).
  2. 02Parse — deterministic rules pull out each field and line item and normalize dates and amounts.
  3. 03Check — the result is scored for confidence: totals are reconciled (subtotal + tax = total), required fields are verified, and formats are validated.
  4. 04Review — an AI model then reviews every document and corrects the fields it finds wrong, looking hardest at the ones the rules were unsure of.

Every response includes a confidence score and a needs_review flag, so you always know which results to trust and which to double-check.

Try it on your own document.

20 documents a month free, with full API access. No credit card. Webhooks on Starter and Pro.

Try it on your document — no sign-up