Schema-first document extraction

Documents in. Structured data out.

Turn invoices, receipts, and business PDFs into validated JSON, CSV, or Excel in minutes. Or automate everything over a typed REST API.

Free plan · 10 pages/month · no credit card

Workflow

Four steps from file to dataset

The same pipeline behind the portal and the API — nothing bespoke, nothing manual.

01

Define a schema

Six fixed templates — invoice, receipt, purchase order, delivery note, contract, generic — or your own custom fields with types and required flags.

{} invoice · 7 fields
02

Upload documents

Single files or batches of up to 100 — PDF, JPG, PNG, HEIC. Page counts are computed at intake.

↑ batch · 24 files
03

Review extracted values

Field-level confidence and validation errors flag anything that needs a human look before it ships.

needs review
04

Export or pull via API

Download JSON, CSV, or Excel — or poll jobs and fetch results straight from /v1.

GET /v1/extractions/{id}

Capabilities

Built like data infrastructure

Every feature exists to get documents into your systems as clean, predictable records.

Batch processing

Up to 100 documents fan out through per-organization queues, run asynchronously, and land in one aggregate dataset.

doc_014.pdf
completed
doc_015.pdf
processing
doc_016.pdf
queued

Review & validation

needs_review status, field-level confidence, and explicit validation errors — nothing fails silently.

due_dateneeds review
total_amount 0.97

validation_errors: ["due_date is required"]

Schema-first extraction

Results always match the contract you defined — hover a field to see where it lands.

supplier_nameresult.data.supplier_name.value
invoice_numberresult.data.invoice_number.value
total_amountresult.data.total_amount.value

JSON, CSV & Excel export

Per document or aggregated per batch — one clean dataset, ready for your pipeline or your accountant.

.json.csv.xlsx

REST API + OpenAPI 3.1

The spec is generated from the same Zod contracts the app runs on, with an interactive Scalar reference.

GET /v1/openapi.json

Retention controls

Pick a window per organization. A daily cleanup deletes expired data and writes audit logs.

0d7d30d90d

Usage-based billing

Hard monthly page quotas, metered at intake. Platform errors never consume your quota.

1,540 / 2,500 pages62%

API keys, done right

SHA-256 hashed at rest, shown exactly once, revocable instantly. Key management stays session-only.

dk_live_ ••••••••••••

Developers

An API you would have built yourself

One resource model across portal and API. Sync for small documents, 202 + polling for async jobs and batches.

  • Bearer auth with dk_live_ keys — hashed at rest, shown exactly once
  • OpenAPI 3.1 generated from shared Zod schemas, Scalar reference at /docs
  • Typed TypeScript SDK with response validation and rich errors
  • Rate limits with Retry-After and X-RateLimit-* headers
POST /v1/extractions
$ curl -X POST "$APP_URL/v1/extractions" \
-H "Authorization: Bearer dk_live_…" \
-H "Content-Type: application/json" \
-d '{"document_id": "9b2f…", "async": false }'
200 OK · application/json
{
"job": { "id": "5f0c…", "status": "completed", "mode": "sync_live", "page_count": 1 },
"result": {
"data": {
"supplier_name": { "value": "Example Supplies AG", "confidence": 0.98 },
"invoice_number": { "value": "INV-2041", "confidence": 0.99 },
"total_amount": { "value": 1240.0, "confidence": 0.97 }
},
"validation_errors": []
}
}

Data protection

Your documents, on a timer

Extraction needs your most sensitive files. The platform is built so they do not stick around.

Retention on a timer

0, 7, 30, or 90-day windows per organization. A daily job deletes expired documents, results, and exports — storage objects and rows.

Audit trail

Deletions and credential lifecycle events write audit logs: document.retention_deleted, api_key.revoked, and more.

Scoped access

Postgres row-level security isolates every organization. API keys are SHA-256 hashed, shown once, and revocable instantly.

EU processing posture

Queue and rate-limit infrastructure run in EU regions (Trigger.dev, Upstash). An EU-only extraction mode is planned.

Pricing

Quota-based. No surprises.

Pages are counted at intake; only billable processing consumes quota. Manage everything from the billing page.

Free

Free

10 pages/mo

10 pages per month for evaluation and light usage.

  • Schema-first extraction
  • JSON, CSV & Excel exports
  • Portal access only (no API)
Get started
1 month free

Casual

CHF 12.90/mo

200 pages/mo

200 pages per month for regular personal use.

  • Everything in Free
  • 200 pages per month
  • Self-serve billing in CHF, EUR, or USD
Start with Casual
API access

Pro

CHF 39.90/mo

2,500 pages/mo

2,500 pages per month with full API access.

  • Everything in Casual
  • Full REST API access
  • Manage or cancel anytime from the portal
Start with Pro

Enterprise

Custom

Unlimited pages

Custom page quota and contract billing. Contact us.

  • Everything in Pro
  • Custom page quota
  • Contract billing
Contact sales

Prices shown in CHF. EUR and USD available at checkout. Monthly plans include a one-time 1-month free trial. Card required; cancel before the trial ends to avoid charges. Manage billing

Start turning documents into datasets

10 free pages every month. The first extraction is one curl away.