Thresh

Documents in. Schema‑conformant JSON out.

An extraction API for the documents that break ordinary OCR pipelines: filled forms, multi-page contracts, service orders with pricing tables. Define your schema, upload, and build on the JSON that comes back.

# pip install thresh-sdk
from thresh import Thresh

client = Thresh(api_key="th_live_...")
doc = client.upload(
    "contract.pdf",
    fields=["purchase_price", "closing_date"],
    tables=[{"name": "monthly_charges", "columns": ["item", "mrc"]}],
)
result = client.wait(doc.id)   # or a signed webhook
98.6%
Field accuracy
97.2%
Table cell F1
95.6%
Q&A accuracy
3m 58s
Zero to integration, timed

Accuracy measured on 37 filled documents (five complete real-estate transaction packets plus scanned and handwritten paperwork) with verified ground truth, July 2026. How we measure, including the exact matching rules and what we don't claim.

How it works

  1. STEP 01
    Describe what you need

    Fields, tables with their columns, and plain-language questions. No templates, no training runs.

  2. STEP 02
    Upload the document

    One POST from the SDK, the API, or the console. Retries are safe with idempotency keys.

  3. STEP 03
    Get schema-conformant JSON

    Poll for the result or receive a signed webhook. Missing values come back explicitly, never silently dropped.

Deals ride the same API: create a deal, upload documents with its deal_id, and call summarize to get one synthesized object across the whole packet, including cross-document discrepancy checks. Signed webhooks deliver both document and deal results the moment they complete.

Go deeper

Access is invite-only while we work with design partners. Tell us what you're building and we'll set up a workspace: the free Developer tier covers 100 pages a month with no card required.