Pulls structured data from any document into JSON
Unstract is a web platform that pulls structured data out of documents: native or scanned PDFs, images, Office and OpenDocument files. In its Prompt Studio, you write prompts describing the fields to extract and the output schema, then try them on real documents. The finished project ships either as a REST API that takes files and returns JSON, or as an ETL pipeline that reads from storage and writes to a database.
Unstract's pipeline has two stages: a text extractor reads the document, OCR included, and an LLM then pulls the fields out of that text. Unstract orchestrates both and does no OCR of its own.
MarkItDown stops after the first stage: it converts a document to Markdown and leaves the rest to the calling code. Receipt OCR goes all the way to JSON with Tesseract and an LLM, but only for shop receipts. Unstract handles any document type, at the cost of a whole platform to host.
The open source OCR comparison places Unstract among OCR engines, vision models and Markdown converters.
Any LLM, Ollama included, instead of per-issuer templates
- One prompt instead of a template per vendor: the README sets its approach against regexes and templates written issuer by issuer. A prompt written once is supposed to absorb layout changes.
- Any LLM, local ones included: OpenAI, Anthropic, Bedrock, Gemini, Mistral, any OpenAI-compatible endpoint, and Ollama, which can serve the embeddings too.
- An API you can call right away: one URL and one key per deployment, up to 32 files per request.
- ETL connectors included: S3, MinIO, Google Drive, SFTP and more as sources; Snowflake, BigQuery, PostgreSQL, Oracle and more as destinations.
- MCP server and n8n node: extraction can be called from an AI agent or from an existing n8n workflow.
A 25-service Docker stack with OCR plugged in separately
OCR comes from a service you configure. Unstract needs four services before the first extraction: an LLM, an embedding model, a vector database and a text extractor. The README names three extractors. LLMWhisperer is the vendor's own API, free for 100 pages a day, then $1 to $15 per 1,000 pages depending on the mode. LlamaParse is LlamaIndex's cloud API. Unstructured plugs in either as a hosted API or as its community edition, the only one of the three that runs locally, in an optional Compose profile that run-platform.sh does not start. To keep every document on the server, you need that container plus a locally served LLM and embedding model, from Ollama for instance.
Twenty-five Docker services and the host's Docker socket. The docs ask for 8 GB of free RAM and Linux or macOS. By default, Compose starts 25 services, including twelve workers, Postgres (pgvector image), Redis, RabbitMQ, MinIO, Qdrant and Traefik. The runner mounts /var/run/docker.sock to spawn tool containers. ENCRYPTION_KEY in backend/.env encrypts adapter credentials; lose it and the adapters already configured become inaccessible.
What the paid tiers keep for themselves. The open source edition page lists five missing features: LLMChallenge, which has a second LLM check the answer; the SinglePass and Summarized Extraction modes, which cut token usage; the human review screen that puts each extracted value next to the source document; and SSO. Without SSO, you sign in with the username and password read from backend/.env (unstract / unstract by default). The cloud Starter plan costs $499 a month for 5,000 pages, LLMWhisperer included. The code is AGPL-3.0: running a modified version as a network service means publishing its source.
Still 0.x, with several releases a week. v0.1.0 shipped on 26 February 2024; v0.192.7, out on 7 October 2026, was the fourth release in three days. The repository lists 597 releases, 128 of them since January 2026. run-platform.sh pulls the latest tag by default; the -v option pins a version.
