Sandbox
@Zipstack/unstract

Document extraction platform for APIs and ETL

Unstract turns documents like PDFs, scans, images, and office files into structured JSON using LLM prompts. You can run it as a local platform, expose it through REST APIs, connect it to ETL pipelines, or use its MCP server with agents.

7,230 stars715 forksPythonUpdated 7d ago
Who it's for

Builders who need structured data from documents and want to run it through APIs, ETL jobs, or agents.

What it delivers

You can extract fields from messy documents and send clean JSON into your pipeline instead of hand-building per-format parsers.

What it does

Prompt Studio

Define extraction schemas with natural language prompts instead of writing regex for every document type.

API deployment

Send a document to the REST API and get structured JSON back.

ETL pipeline

Pull documents from storage, process them, and load the results into a warehouse or database.

MCP server

Connect Claude and other agents to Unstract through Model Context Protocol.

Multiple connectors

Works with LLM providers, vector databases, storage sources, and data warehouses such as S3, Snowflake, BigQuery, and PostgreSQL.

Human review and enterprise controls

Includes review, RBAC, SSO, and deployment options for teams that need controlled document workflows.

How to get it

  1. 1Run
    # Clone and start
    git clone https://github.com/Zipstack/unstract.git
    cd unstract
    ./run-platform.sh

README

Unstract

Turn Unstructured Documents into Structured Data

Documentation | Enterprise

License Tutorials Uptime Status Docker Pulls Ask DeepWiki CLA assistant

Python Version from PEP 621 TOML uv Vite Bun Biome

pre-commit.ci status Quality Gate Status Code Smells Duplicated Lines (%)

What is Unstract?

Unstract uses LLMs to extract structured JSON from documents — PDFs, images, scans, you name it. Define what you want to extract using natural language prompts, and deploy as an API or ETL pipeline.

Built for teams in finance, insurance, healthcare, KYC/compliance, and much more.

Current State vs. Unstract

TaskWithout UnstractWith Unstract
Schema definitionWrite regex, build templates per vendorWrite a prompt once, handles variations
New document typeDays of developmentMinutes in Prompt Studio
LLM integrationBuild your own pipelinePlug in any provider (OpenAI, Anthropic, Bedrock, Ollama)
DeploymentCustom infrastructure./run-platform.sh or managed cloud
OutputUnstructured text blobsClean JSON, ready for your database

⭐ If Unstract helps you, star this repo!

Star Unstract

✨ Key Features

Prompt Studio — Define document extraction schemas with natural language. Docs →

Prompt Studio

API Deployment — Send a document over REST API, get JSON back. Docs →

API Deployment

ETL Pipeline — Pull documents from a folder, process them, load to your warehouse. Docs →

MCP Server — Connect to AI agents (Claude, etc.) via Model Context Protocol. Docs →

n8n Node — Drop into existing automation workflows. Docs →

🚀 Quickstart (~5 mins)

System Requirements & Prerequisites

  • Linux or macOS (Intel or M-series)
  • Docker & Docker Compose
  • 8 GB RAM minimum
  • Git

Run Locally

# Clone and start
git clone https://github.com/Zipstack/unstract.git
cd unstract
./run-platform.sh

That's it!

📦 Other Deployment Options

Docker Compose

# Pull and run entire Unstract platform with default env config.
./run-platform.sh

# Pull and run docker containers with a specific version tag.
./run-platform.sh -v v0.1.0

# Upgrade existing Unstract platform setup by pulling the latest available version.
./run-platform.sh -u

# Upgrade existing Unstract platform setup by pulling a specific version.
./run-platform.sh -u -v v0.2.0

# Build docker images locally as a specific version tag.
./run-platform.sh -b -v v0.1.0

# Build docker images locally from working branch as `current` version tag.
./run-platform.sh -b -v current

# Display the help information.
./run-platform.sh -h

# Only do setup of environment files.
./run-platform.sh -e

# Only do docker images pull with a specific version tag.
./run-platform.sh -p -v v0.1.0

# Only do docker images pull by building locally with a specific version tag.
./run-platform.sh -p -b -v v0.1.0

# Upgrade existing Unstract platform setup with docker images built locally from working branch as `current` version tag.
./run-platform.sh -u -b -v current

# Pull and run docker containers in detached mode.
./run-platform.sh -d -v v0.1.0

🔐 Backup Encryption Key

[!WARNING] This key encrypts adapter credentials — losing it makes existing adapters inaccessible!

Copy the value of ENCRYPTION_KEY from backend/.env or platform-service/.env to a secure location.

🏗️ Unstract Architecture

┌────────────────────────────────────────────────────────────┐
│                          Unstract                          │
├─────────────┬─────────────┬─────────────┬──────────────────┤
│  Frontend   │   Backend   │   Worker    │ Platform Service │
│  (React)    │  (Django)   │  (Celery)   │   (FastAPI)      │
├─────────────┴─────────────┴─────────────┴──────────────────┤
│                      Cache (Redis)                         │
├────────────────────────────────────────────────────────────┤
│                  Message Queue (RabbitMQ)                  │
├────────────────────────────────────────────────────────────┤
│                   Database (PostgreSQL)                    │
├────────────────────────────────────────────────────────────┤
│  LLM Adapters    │  Vector DBs    │  Text Extractors       │
│  (OpenAI, etc.)  │ (Qdrant, etc.) │  (LLMWhisperer)        │
└────────────────────────────────────────────────────────────┘

Also see architecture.

📄 Document File Formats

CategoryFormats
DocumentsPDF, DOCX, DOC, ODT, TXT, CSV, JSON
SpreadsheetsXLSX, XLS, ODS
PresentationsPPTX, PPT, ODP
ImagesPNG, JPG, JPEG, TIFF, BMP, GIF, WEBP

🔌 Connectors & Adapters

LLM Providers

ProviderStatusProviderStatus
OpenAIAzure OpenAI
OpenAI CompatibleAnthropic Claude
AWS BedrockGoogle Gemini
Ollama (local)Mistral AI
Anyscale

Vector Databases

ProviderStatusProviderStatus
QdrantPinecone
WeaviatePostgreSQL
Milvus

Text Extractors

ProviderStatus
LLMWhisperer
Unstructured.io
LlamaIndex Parse

ETL Sources & Destinations

Sources: AWS S3, MinIO, Google Cloud Storage, Azure Blob, Google Drive, Dropbox, SFTP

Destinations: Snowflake, Amazon Redshift, Google BigQuery, PostgreSQL, MySQL, MariaDB, SQL Server, Oracle

Full Connector List

🛠️ Development

Change Default Credentials

Follow these steps to change the default username and password.

Local Development

# Install pre-commit hooks
./dev-env-cli.sh -p

# Run pre-commit checks
./dev-env-cli.sh -r

Local Development Guide

🏢 Use Cases by Industry

Finance & Banking → | Insurance → | Healthcare → | Income Tax →

☁️ Cloud & Enterprise

For teams that need managed infrastructure, advanced accuracy features, or compliance certifications.

  • LLMChallenge — dual-LLM verification
  • SinglePass & Summarized Extraction — reduce LLM token costs
  • Human-in-the-Loop — review interface with document highlighting
  • SSO & Enterprise RBAC — SAML/OIDC integration with granular role-based access control
  • SOC 2, HIPAA, ISO 27001, GDPR Compliant — third-party audited security certifications
  • Priority Support with SLA — dedicated support team with response time guarantees

Book a Demo

📚 Cookbooks

🤝 Contributing

We welcome contributions! The easiest way to start:

  1. Pick an issue tagged good first issue
  2. Submit a PR

Report Bug → | Request Feature →

👋 Community

Join the LLM-powered document automation community:

Blog LinkedIn Slack X

📊 A Note on Analytics

Unstract integrates Posthog to track minimal usage analytics. Disable by setting REACT_APP_ENABLE_POSTHOG=false in the frontend's .env file.

📜 License

Unstract is released under the AGPL-3.0 License.


Built with ❤️ by Zipstack

Website · Documentation · Pricing

Files in the repo

Repository payload30 top-level entries
  • .claude
  • .github
  • backend
  • docker
  • docs
  • frontend
  • platform-service
  • runner
  • specs
  • tests
  • tool-sidecar
  • tools
  • unstract
  • workers
  • x2text-service
  • .gitattributes
  • .gitignore
  • .jshintrc
  • .pre-commit-config.yaml
  • .python-version
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • dev-env-cli.sh
  • LICENSE
  • pyproject.toml
  • README.md
  • run-platform.sh
  • SECURITY.md
  • tox.ini
  • uv.lock

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More other

HKUDS/
Vibe-Trading

"Vibe-Trading: Your Personal Trading Agent"

33k

Your Personal AI Assistant; easy to install, deploy on your own machine or on the cloud; supports multiple chat apps with easily extensible capabilities.

35k

AIPOCH Open-Science is an open-source, local-first, model-agnostic AI research workbench for macOS, Windows, and Linux, with scientific agents, Python/R notebooks, data connectors, and reproducible provenance.

4k

Open-source Claude Design alternative. One-click import your Claude Code / Codex API key. Prompt → prototype / slides / PDF. Multi-model (Claude, GPT, Gemini, Kimi, GLM, Ollama). BYOK, local-first, MIT.

7.9k

🤯 LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.

82k