Open source under Apache-2.0

The open-source alternative to Reducto.

The document parser built around Claude Haiku, or any model you choose. Turn PDFs, scans and forms into structured data, with a citation back to the page for every value.

84.2
olmOCR-bench, best of the three
½
about half Reducto's price per page
1 URL
to switch from Reducto
number"INV-2041"
page 1, line 2, confidence high
  • Citations for every value
  • Claude Haiku 5.5 by default, any model you like
  • Extraction into your own types
  • Drop-in Reducto API
  • Runs on your own model account

invoice.pdf

Northwind Freight Ltd.INVOICE

Invoice no. INV-2041
Issued 01 Mar 2026

Bill to Harbor Supply Co.

DescriptionAmount
Freight to Bremen1,200.00
Handling and customs375.00

Total due £1,575.00

readanydoc.extract("invoice.pdf", schema=Invoice)

{
  "number": "INV-2041",
  "issued": "2026-03-01",
  "customer": "Harbor Supply Co.",
  "lines": [
    { "item": "Freight to Bremen", "amount": 1200.0 },
    { "item": "Handling and customs", "amount": 375.0 }
  ],
  "total": 1575.0
}

Hover any value to see where on the page it was read.

Works with

  • Claude
  • OpenAI
  • vLLM and any OpenAI-compatible server
  • Reducto's Python SDK
  • Docker

Reducto's product, without the lock-in.

Same API as Reducto

Point Reducto's own SDK at your ReadAnyDoc server. Parse, extract, split, classify, edit, jobs and webhooks answer in the same format, so the code you have keeps working.

Your model, your account

Documents go straight to the model provider you pick, under your own key. Claude Haiku 5.5 by default, and any Claude, OpenAI or self-hosted model when you want it.

A fraction of the price

$0.003 to $0.005 a page with the full engine, or $0.001 to $0.002 with the model alone. Reducto charges $0.01. Nothing is added on top of your model bill.

One library for every document task.

Parse

Pages become typed blocks (text, tables, form fields, figures) with their positions, plus Markdown for your LLM or search index.

Extract

Hand it a pydantic class or a JSON schema. Get it back filled in, with a citation for every value.

Split

Find where each document starts and ends inside one combined PDF.

Classify

Label documents by type, with the text that supports the label.

Edit

Fill in PDF forms, including flat and scanned ones.

Jobs and webhooks

Send large batches in the background and get notified as each one finishes.

What happens to each page.

The model does the reading. ReadAnyDoc does everything a model alone does not: it checks the work, finds where every value sits, and returns it in the shape you asked for.

  1. Open

    PDF, scan, photo, Word, Excel, PowerPoint or email, split into pages.

  2. Look

    A small layout model on your CPU finds tables, forms, figures and headers.

  3. Read

    Claude reads each page. Scans get zoomed re-reads that must agree before a digit changes.

  4. Check

    Table grids and printed totals are verified without a model. Problems become warnings.

  5. Cite

    Every word and table cell is matched to its position, so every value can show its source.

Measured against Reducto, in public.

Five public benchmarks, about 4,250 pages and 10 long documents. The same files went to all three systems and each benchmark's own grader scored them. No AI judge. Higher is better unless marked.

olmOCR-benchoverall score, higher is better
Reducto80.9
Model only82.2
Engine84.2
Forms (FUNSD)question and answer pairs found
Reducto78.6
Model only71.6
Engine77.4
Price per pageUS dollars, lower is better
Reducto$0.010
Model only$0.0015
Engine$0.004
BenchmarkReductoReadAnyDocmodel onlyReadAnyDocengine
olmOCR-bench1,403 pages, overall score80.982.284.2
OmniDocBench1,651 pages, text error, lower is better0.0950.0810.081
RD-TableBench1,000 tables, Reducto's own benchmark88.988.288.2
FUNSD199 scanned forms, question and answer pairs78.671.677.4
OmniDocBench layoutblock types right84.655.678.3
LongExtract10 long documents, table rows extracted53.975.475.9
Price per page$0.010$0.001–0.002$0.003–0.005

Reducto is still ahead on page layout, formulas, removing headers and footers, and speed (about 5 seconds a page against 20 to 50). We publish those next to our wins.

Running in a minute.

Use it as a Python library with no server at all, or run the server and call it from any language. Switching from Reducto is one line.

# as a library
import readanydoc

result = readanydoc.parse("statement.pdf")
invoice = readanydoc.extract("invoice.pdf", schema=Invoice)

# or with Reducto's SDK, pointed at your server
client = Reducto(api_key="...",
                 base_url="http://localhost:8000")

Questions.

Is it really free?

Yes. ReadAnyDoc is Apache-2.0. You pay only your model provider for the calls it makes, and every result tells you what those calls cost.

Which models can I use?

Any Claude model, OpenAI models, or a model you host behind an OpenAI-compatible server such as vLLM. Choose the model, effort and request options per call. The benchmarks use Claude Haiku 5.5, with Sonnet 5.5 for handwriting.

Is it as good as Reducto?

Ahead on reading text, level on tables and forms, behind on page layout, formulas and speed. The table above links to every benchmark and the full method.

Where do my documents go?

To your machine and to the model provider you configure, under your account. Nothing comes to us. With a self-hosted model, nothing leaves your network.

Do I need to run a server?

No. Install the library and call it from Python. Run the server only if you want Reducto's API or need to call it from another language.

What is the difference between engine and model only?

Model only sends each page to the model once: cheapest and fastest. The engine adds layout, form fields, table checks, zoomed re-reads of scans and word-level citations, for two to three times the model cost.

Try it on your own documents.