Inferra
v3.1 · schema-guided extraction

Turn any document into typed, validated JSON.

Inferra reads PDFs, scans, and emails against a schema you define — returning structured fields with a confidence score and a pixel-level citation for every value. No templates, no brittle regex.

$ pip install inferra
invoice_4471.pdf → extract()
1.2s
Source · page 1 of 3
Northwind Logistics — Invoice
Invoice no.NW-4471
Issued2026-04-18
Due2026-05-18
Freight — LCL ocean$ 8,420.00
Customs brokerage$ 615.50
Total due$ 9,035.50
Output · validated against schema
{
  "invoice_no": "NW-4471",
  "issued": "2026-04-18",
  "due": "2026-05-18",
  "currency": "USD",
  "line_items": 2,
  "total": 9035.50,
  "_confidence": 0.991
}
7/7 fields cited · 0 schema errors
Last 24h · prod
live
Docs parsed
412,907
+9.2% vs Tue
Field accuracy
98.7 %
+0.4pp vs Tue
P95 latency
1.18 s
−0.21s vs Tue
Cost / page
$0.0041
−$0.0006 vs Tue
Pages / min peak 6,140
region: us-east / eu-central 99.98% uptime
Extracting documents in production at
Linnea FORECAST GLIDE Mercury Brightwave nimbus. Strata/ Vantage Linnea FORECAST GLIDE Mercury Brightwave nimbus. Strata/ Vantage
How it works

Three calls from raw file to clean record.

Define the shape you want once. Inferra handles the OCR, layout, and reasoning — and refuses to guess when a field isn't there.

01 Define

Describe the schema.

A Pydantic model or plain JSON Schema. Inferra infers types, required fields, and enums from it.

class Invoice(BaseModel):
    invoice_no: str
    due: date
    total: Decimal
02 Extract

Point it at a file.

PDF, PNG, DOCX, or an email URL. One call streams structured fields back as the model reads.

res = inferra.extract(
  file="inv.pdf",
  schema=Invoice,
)
03 Verify

Trust every value.

Each field carries a confidence score and a bounding box. Route low-confidence rows to review automatically.

res.confidence  # 0.991
res.cite("total")
# p1 · box(412,..)
Benchmarks

Measured on documents that actually fight back.

We test on 14,200 held-out real-world documents — crumpled receipts, multi-column statements, handwriting, and forms in nine languages. Every number below is field-level exact match, not "looks about right."

  • Calibrated confidence — when Inferra says 0.95, it's right 95% of the time, ±1.3pp.
  • Abstains instead of hallucinating — a missing field returns null, never a plausible invention.
  • Frozen eval set, public methodology — rerun every model release in CI.
Read the benchmark report
extraction-bench · v4 · 14,200 docs field exact-match
Inferra v3.198.7%
Generic VLM + prompt91.2%
Template OCR engine82.4%
Manual data entry (n=40)96.1%
Hallucinated fields
0.06%
Languages
31
Cost / 1k pages
$4.10
Integrations

Lands wherever your data already lives.

Native sinks for warehouses, queues, and storage — plus a typed SDK for Python, TypeScript, and Go.

Postgres
Snowflake
S3
Kafka
Webhooks
REST API
Pricing

Pay per page. Not per seat.

One page = one side of a document. Failed extractions and abstentions are never billed. Volume bundles roll over for 90 days.

Indie

free forever
$0
/ month

For a prototype or a single internal workflow.

  • 1,000 pages / mo
  • Confidence scores + citations
  • All 31 languages
  • Community Slack
Start free
Most popular

Scale

incl. review queue
$0.004
/ page · after 1,000 free

For teams running extraction in production at volume.

  • Unlimited pages, usage-based
  • Human-in-the-loop review queue
  • Warehouse + queue sinks
  • SLA: P95 < 1.5s
  • Priority support
Start with 1,000 free

Enterprise

on-prem
Custom
annual · volume committed

For regulated data that can't leave your VPC.

  • Self-hosted / air-gapped deploy
  • SOC 2 Type II + HIPAA + SCIM
  • Fine-tuned to your doc types
  • Solution architect + 1h SLA
Talk to sales
Customers

Teams that retired their data-entry queue.

"We were paying a BPO vendor to key 9,000 freight invoices a month. Inferra does it at 98.6% accuracy and the review queue catches the rest. We cut that line item by $41,000 a quarter."
IC
Ines Calderón
Head of Eng · Strata
"The fact that it returns null instead of guessing is the whole reason I trust it. The citations let our auditors trace every number back to the pixel it came from."
YA
Yusuf Abara
CTO · Mercury
"Swapped out 1,800 lines of bespoke parsing logic for a Pydantic model and one extract() call. Onboarding a new document type went from a two-week project to an afternoon."
HS
Hana Suzuki
ML Lead · Brightwave
FAQ

The questions engineers ask first.

Everything else is in the docs — including the OpenAPI spec, retry semantics, and the eval harness.

How do confidence scores get calibrated?+

We fit an isotonic regression on a 14,200-document holdout per release, so the reported probability matches observed accuracy. At 0.95 the field is correct 95% of the time within ±1.3pp — verified in CI before any model ships.

What happens when a field isn't in the document?+

Inferra returns null with a low confidence and an empty citation rather than fabricating a value. You can set a per-field required=True to raise a validation error instead, or route the document straight to the review queue.

Can I extract nested tables and line items?+

Yes — model a field as list[LineItem] and Inferra returns one object per row with its own confidence and bounding box. Multi-page tables are stitched automatically using layout continuity.

Does my data train your models?+

Never by default. Documents are processed in memory and dropped within 24h unless you opt into retention for the review queue. On Enterprise, processing runs entirely inside your VPC and nothing leaves your network.

What's the latency for a 3-page PDF?+

P50 0.74s, P95 1.18s, P99 2.4s for a typical 3-page document with a 12-field schema. Fields stream back as they resolve, so you can render partial results before the call completes.

Parse your first document in the next five minutes.

1,000 free pages a month, no card. Drop in your schema, point it at a file, ship the JSON.

$ pip install inferra && inferra login