receipt-ocr vs unstract
Receipt-to-JSON in one pip install: CLI, Python API and FastAPI service that send a receipt image to any OpenAI-compatible model and return merchant, totals and line items, plus a Tesseract module. — versus — LLM-driven platform turning unstructured documents into structured data: a no-code Prompt Studio to define extractions, then deploy as APIs or ETL pipelines. Self-hosted, AGPL + enterprise.
Both turn documents into structured data with LLMs and expose an API. Unstract is a no-code platform with Prompt Studio, ETL deployment and enterprise licensing; receipt-ocr is a 50-line integration you can read in full.
| receipt-ocr | unstract | |
|---|---|---|
| Stars | 636 | 7.2k |
| Forks | 79 | 710 |
| Language | Python | Python |
| License | MIT | AGPL-3.0 |
| Last activity | 28 days ago | today |
| Topics | ocr, data | ocr, rag |
| Curated connections | 4 | 6 |
receipt-ocr — the curator's take
Narrow on purpose, and that is the value — one schema, one document type, a working CLI, Docker service and FastAPI app on day one, and any OpenAI-compatible endpoint (OpenAI, Gemini, Groq) behind a single env var. Do not mistake it for a document-intelligence stack: no layout model, no bounding boxes, no batch pipeline, and accuracy is entirely whatever VLM you point it at. Good as a reference implementation or the expenses corner of a larger app; wrong choice for mixed document types or on-prem throughput.
unstract — the curator's take
The platform play in document extraction: where parsers hand you markdown, Unstract hands you the FIELDS — Prompt Studio lets a domain expert define and test per-document-type extraction prompts, then ships them as stable APIs or ETL pipelines into warehouses, with the connector surface (S3, databases, DMS) that ops teams actually need. Docker-compose up and it runs. NOT a parsing engine: quality rides on the LLM you wire in and per-page LLM calls at volume cost real money — for clean-layout bulk conversion a deterministic parser is cheaper; and mind the AGPL + enterprise split when embedding.