parsr.

Use case · Expense management & receipts

Categorize receipts and statement transactions for AI-powered expense tools.

AI expense tools (Pleo, Brex, Ramp, Spendesk peers and the next 14 of you) need to ingest both individual receipts and bank/card statements at scale. The parsing problem splits into two: receipts (PDF, JPG, HEIC) for individual purchases, and consolidated statements for the month-end reconciliation. parsr handles both via /v1/parse for receipts (doc_type='bank_statement' for statements; receipt support coming) and /v1/extract with a custom JSON Schema for receipt-specific fields like VAT lines, expense categories, and project codes. The schema-driven extraction means you can iterate on what you capture without redeploying the parsing service — change the schema, the LLM extracts the new shape. Confidence scores let your auto-categorization agent decide when to ask the user vs when to auto-tag.

Workflow

How agents wire this up

  1. 01

    Parse the receipt with a custom schema

    POST /v1/extract with a JSON Schema describing your expense model: vendor, total, vat_rate, project_code, category. The LLM returns data shaped to YOUR schema.

  2. 02

    Auto-categorize via confidence

    Each extracted field has a confidence ∈ [0,1]. Auto-tag when category confidence > 0.8; surface to user otherwise.

  3. 03

    Reconcile against the statement

    Parse the month-end card statement via /v1/parse. Match each transaction to a captured receipt by amount + date + vendor.

Schema

What you'd send to /v1/extract

request schema
{
  "type": "object",
  "properties": {
    "vendor": {
      "type": "string",
      "description": "The merchant or vendor name printed on the receipt."
    },
    "total": {
      "type": "object",
      "properties": {
        "amount":   { "type": "string", "description": "Total amount as decimal string." },
        "currency": { "type": "string", "description": "ISO 4217 currency code." }
      }
    },
    "vat_rate":     { "type": "number", "description": "VAT percentage (e.g. 21)." },
    "category":     { "type": "string", "enum": ["meals","transport","supplies","software","other"] },
    "project_code": { "type": "string" }
  },
  "required": ["vendor","total"]
}
response payload
{
  "schema_version": "extract.v1",
  "result": {
    "vendor": "Café Lulu",
    "total":  { "amount": "12.40", "currency": "EUR" },
    "vat_rate": 21,
    "category": "meals",
    "project_code": "PRJ-2026-Q2-DEV"
  }
}

Why parsr fits this

Operator concerns, addressed

Schema-driven extraction

Define what you want in JSON Schema; the LLM returns data shaped to it. Change the schema without redeploying.

Confidence-aware auto-tagging

Per-field confidence lets your agent decide when to auto-categorize and when to ask the user.

Multi-currency receipts

Foreign-currency receipts return both the original amount and (optionally) the converted amount; you control via your schema.

Ship a prototype on the free tier in an afternoon.

Start free