--- layout: null title: openextract --- openextract - Structured Data Extraction
OE
on main | sessions, styles, and typed results

Structured Extraction

Typed output from any media.

Extract structured data from documents, images, audio, and video using LLMs and Pydantic schemas.

Read the guide View Source
Terminal install
$ uv add openextract
$ openextract report.pdf \
    --schema mypkg:Invoice \
    --model xai:grok-4.3
{ "total": 1240.00, "currency": "USD", ... }
Pydantic Any LLM

Zero Config

One function call, or a reusable session. Bring a schema, media, and a model string.

Multi-Media

Documents, images, audio, and video with smart routing.

Any LLM

OpenAI, Anthropic, Google, Bedrock, xAI, Groq, Mistral, OpenRouter, Ollama, and more via pydantic-ai.

Type Safe

Pydantic schemas ensure validated, typed output every time.

How it works

Schema in, typed data out

Define a BaseModel, call extract(), get validated output.

1

Define a schema

Describe the shape you want with a Pydantic model.

2

Point at any media

Documents, images, audio, or video via path, URL, bytes, or a session.

3

Get typed output

Validated against your schema. No parsing, no regex.

Terminal extract.py
from pydantic import BaseModel
from openextract import extract

class Report(BaseModel):
    title: str
    findings: list[str]
    severity: int

result = extract(
    schema=Report,
    model="xai:grok-4.3",
    input_file="https://example.com/report.pdf",
    instructions="Extract findings",
)

What’s new

In v0.15.0

The latest PyPI release: v0.15.0.

Full changelog
Styles

form and table

style='form' for labeled forms and receipts; style='table' for line-item docs. PDFs reuse parse-then-window so fields and rows merge across pages. Boxes are still never invented (cite=True for parser-backed citations).

form table cite=True
CLI

Batch + filters

Directory inputs (--recursive), --out PATH, --pages RANGE, --language TAG, and --schema as a JSON Schema file path.

--recursive --out --pages
Cite

Citation confidence

Heuristic confidence / match on Citation when cite=True. Optional cite_min_confidence / --cite-min-confidence drops weak cites. Still not a model probability; boxes are never invented.

confidence match cite_min_confidence

Also in v0.15.0: on_progress / --progress window callbacks, SchemaValidationError field-path messages, and CLI --cite via Citation.as_dict(). v0.14.0 shipped Citation.as_dict, CLI --cite, and swarm citations.

Works with any media

Documents Images Audio Video

PDF, DOCX, PNG, JPG, MP3, MP4, and 20+ formats