mrkeyoor.com_
Thu 17 Sept 09:13 UTC
AI Toolsevaluationupdated 26 Aug 2026

unstract review

Unstract turns PDFs, scans, office documents, and images into structured JSON using prompts and language models. It packages that extraction work as a visual studio, REST API, ETL pipelines, connectors, and an MCP server instead of leaving teams to assemble each part themselves.

+5stars / 7d
Verdict

Our Unstract build passed in 14 seconds, but its test command collected no runnable tests because 2 suites stopped on a missing yaml module. The platform is worth a controlled trial when document extraction must become an API or ETL product and your team already operates Docker services and model credentials. Choose a parser library when the job ends at clean text, Markdown, or layout data.

We ran it

Lab card: what happened when we ran unstractScreenshot of unstract (unstract.com)
Install✓ · 63s33 packages · 36 MB
Build✓ · 14s
Tests✗ · 16s0 passed · 0 failed · 2 errors of 2 (pytest)
Known vulns0(pip-audit)
Repo2546 files~309,172 lines of source · 79.9 MB · 7 CI workflows · tests dir

Answers from our run

Does unstract build from source?

Dependencies installed in 63 seconds (33 packages), and the build succeeded in 14 seconds. We cloned commit fe9c3ff into a clean Debian container with 3 CPUs and no project-specific setup.

Do unstract's tests pass?

Yes: 0 of 2 passed when we ran the project's own test command (pytest), with 2 collection errors. Some failures need services or credentials a bare container does not have.

Does unstract have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use unstract?

Developers who only need PDF-to-text or Markdown: Unstract also runs a frontend, Django backend, workers, FastAPI service, Redis, RabbitMQ, and PostgreSQL.

What are the alternatives to unstract?

Unstructured, Docling, MinerU. Our Unstract build passed in 14 seconds, but its test command collected no runnable tests because 2 suites stopped on a missing yaml module.

Setup2/514-second build, but the full platform needs 8 GB and many services
Docs4/5Quickstart, architecture, connectors, and credential warnings are clear
Community5/57,172 stars with same-day commits and active pull requests
Maturity3/5Frequent v0 releases; OSS UI and test setup gaps remain

Discussed on

  1. hnShow HN: Unstract(AGPL) – Launch LLM-powered APIs to structure unstructured docs25 points
  2. hnShow HN: LLMWhisperer – Prep complex documents ready for use in LLMs12 points
  3. hnUnstract: Open-source platform to ship document extraction APIs in minutes8 points
  4. hnShow HN: Unstract – AGPL, LLM-powered Fivetran/Twilio for unstructured docs5 points
  5. hnUnstract: Open-source platform to ship document extraction APIs in minutes3 points

Who it’s for

Teams extracting repeatable fields from varied business documents.
Operators who need document jobs exposed as APIs or scheduled ETL flows.
Organizations prepared to run a multi-service Docker stack and supply model credentials.
Agent builders who want document extraction available through MCP.

Who it’s NOT for

Developers who only need PDF-to-text or Markdown: Unstract also runs a frontend, Django backend, workers, FastAPI service, Redis, RabbitMQ, and PostgreSQL.
Hosts below the documented 8 GB RAM minimum or without Docker Compose.
Teams expecting every listed file format to work through the OSS Prompt Studio: issue 1973 reports that non-PDF uploads are blocked there despite backend support.
Users unwilling to manage LLM, vector database, text extractor, storage, and warehouse credentials for their chosen pipeline.
Companies that cannot meet AGPL-3.0 obligations and do not want an enterprise agreement.

Setup reality

Our sandbox install succeeded in 63 seconds, adding 33 Python packages and using 36 MB. The build passed in 14 seconds. Tests exited 1 after 16 seconds with 0 passed and 2 collection errors; both stopped because Python could not import yaml. Pip-audit found 0 known vulnerabilities.

The documented platform needs Linux or macOS, Docker Compose, at least 8 GB RAM, and provider credentials for the LLM and any optional extractors, vector stores, sources, or destinations. The default local login must be changed.

Self-hosting starts several services and creates an encryption key for adapter credentials; losing that key makes saved adapters inaccessible. PostHog analytics are enabled unless REACT_APP_ENABLE_POSTHOG=false is set.

Unstract starts where document parsing stops

Unstract asks users to define the fields they need in natural language, then turns varied documents into JSON. Prompt Studio is the authoring surface, and a finished workflow can become a REST deployment or ETL pipeline. The project accepts PDFs, office documents, spreadsheets, presentations, images, and plain data files. Model adapters include hosted providers and Ollama, while extractor and vector-store integrations cover separate parts of the document path.

The platform is broad because extraction in production is rarely one function call. Its architecture shows 4 application layers: a React frontend, Django backend, Celery worker, and FastAPI platform service. Redis supplies caching, RabbitMQ carries work, and PostgreSQL stores state. Optional systems add object stores, cloud drives, warehouses, text-extraction APIs, and vector databases. If you only need a parser output, that service graph is needless. If documents must enter queues and leave as governed records, it may save integration work.

The five-minute quickstart assumes an 8 GB Docker host

The README's fast path is ./run-platform.sh, followed by a browser at frontend.unstract.localhost. It supports Linux and macOS, requires Docker and Docker Compose, and sets an 8 GB RAM minimum. The initial username and password are both unstract, so any shared deployment must change them before access leaves one developer's machine. The script can pull tagged images, build locally, update an installation, prepare environment files, or start containers in detached mode.

A useful extraction also needs at least one LLM adapter. Depending on the flow, operators may add credentials for LLMWhisperer or another parser, Qdrant or another vector store, a source such as S3 or Google Drive, and a warehouse destination. Our 36 MB Python install does not include the weight, images, databases, queues, or remote services behind that path. Model calls and document movement also create data-governance and cost questions outside repository setup.

What happened when we ran it

Our sandbox installed commit fe9c3ff in 63 seconds, adding 33 Python packages and using 36 MB on disk. The build completed successfully in 14 seconds. The checkout contained 2,546 files, roughly 309,172 lines of source, and 79.9 MB before installed dependencies. Those numbers describe the Python project our harness found, not the complete Docker Compose deployment presented in the quickstart.

Pytest exited with status 1 after 16 seconds. It reported 0 passed, 0 failed, and 2 collection or setup errors out of 2. Both tests/e2e and tests/rig/tests stopped while importing tests/rig/critical_paths.py, where Python raised ModuleNotFoundError: No module named 'yaml'. The log proves the dependency was unavailable in our measured environment; it does not establish why. Pip-audit found 0 known vulnerabilities among the 33 installed packages.

The missing yaml import blocks the available suite

A test failure after assertions is different from a suite that never reaches them. Here, 2 collection errors mean our run learned nothing about extraction correctness, API behavior, workers, or the web interface. The repository did have a tests directory and 7 CI workflow files, but no Dockerfile was present in the scan summarized by our harness. A team evaluating Unstract should reproduce the documented container path and run the project's intended checks with the dependency set used in CI.

The practical acceptance test needs real documents. Build a small corpus with the field variations, scans, tables, handwriting, and bad files that matter to the business. Compare returned JSON with labeled truth, inspect failure outputs, and record provider cost. Our 14-second build is evidence that the selected package compiles, not that prompts generalize or that one provider reads sensitive documents accurately. Unstract supplies the workflow; the buyer still owns extraction quality.

OSS Prompt Studio has a reported format mismatch

The README lists 19 file extensions across documents, spreadsheets, presentations, and images. Open issue 1973 says the open-source Prompt Studio rejects JPG, PNG, TIFF, BMP, WEBP, and other non-direct types with an Only PDF files are allowed message because a plugin component is absent. The report says the backend processes those formats when called through the API. Until fixed and verified, teams should distinguish backend format support from what the OSS browser upload can accept.

That difference is material for reviewers who expect a visual document workflow. An API workaround may suit developers, but it removes the no-code path for the affected inputs. Other open reports describe local Compose UI problems, custom hostnames redirecting to frontend.unstract.localhost, and Ollama running on host localhost while containers receive connection refusals. These are normal container-network and product-boundary concerns, yet they undercut the idea that one startup script settles deployment.

Credentials survive only while the encryption key does

Unstract creates an ENCRYPTION_KEY in backend or platform-service environment files and warns users to copy it somewhere safe. The key protects adapter credentials, and losing it makes existing adapters inaccessible. Backups therefore need both database state and the matching key, stored separately with restricted access. PostHog usage analytics can be disabled by setting REACT_APP_ENABLE_POSTHOG=false in the frontend environment. These details belong in the runbook before real provider keys are entered.

GitHub showed 7,172 stars, 94 open issues and pull requests combined, and a last push on August 26, 2026. Release v0.186.2 arrived August 20 with fixes to startup ordering, prompt-output validation, model display, and provider parameters. That pace shows active work but also a platform still moving through frequent v0 releases. Unstract can justify its service count for document APIs and ETL. For a one-process parser, Docling, MinerU, or Unstructured is easier to own.

Alternatives

ProjectWhat it isPick it when
UnstructuredA document ingestion library that partitions many formats into typed elements.pick this instead when parsing and chunk preparation matter more than a visual extraction and ETL platform.
Docling gh↗A local document conversion toolkit for PDFs and office formats with structured outputs.pick this instead when local conversion and layout understanding are enough without a multi-service control plane.
MinerU gh↗A parser that converts complex PDFs into Markdown and structured intermediate data.pick this instead when faithful PDF parsing is the main task and prompt-defined field extraction comes later.

Sources

  1. Unstract repository and README
  2. Unstract v0.186.2 release
  3. OSS Prompt Studio upload report
  4. Local Docker CSP report
  5. Ollama container connection report

More ai tools reviews

yolov5 · eve · MemOS · LongCat-Video · Concat · DLSS5-Feeder · the whole board →