OCR / Structify
PDFs and images, into schema-filled JSON.
Every field returns value, confidence and source.
Preview: opening to allowlisted organizations first
Confidence on every field
Model, OCR and combined scores per field.
A source block on every field
Page, block and bbox with every value.
Results become data
Results land as rows you search again.
Schift runs the document pipeline
Run it yourself: OCR vendor integration
With Schift: One API key
Run it yourself: Page splitting and concurrency
With Schift: Parallel extraction, merged
Run it yourself: Schema and citation checks
With Schift: Real blocks as sources
Run it yourself: 429 backoff and reprocessing
With Schift: SDK retries built in
Run it yourself: Result tables and load jobs
With Schift: Rows, searchable right away
One API key to wire it up
npm install @schift-io/sdk
// npm install @schift-io/[email protected]
import { readFile } from "node:fs/promises";
import { StructifyClient } from "@schift-io/sdk/structify";
const client = new StructifyClient({
apiKey: process.env.SCHIFT_API_KEY,
gatewayUrl: "https://gw.schift.io",
});
const pdf = await readFile("invoice.pdf");
const ocr = await client.ocr(pdf, { contentType: "application/pdf" });
const result = await client.structify({
schema: {
type: "object",
properties: {
vendor: { type: ["string", "null"] },
total: { type: ["number", "null"] },
},
required: ["vendor", "total"],
additionalProperties: false,
},
ocr, // reuse the OCR result
});
const total = result.structured.fields.total;
const confidence = result.structured.field_confidence.total?.combined;
const evidence = result.structured.evidence.total;curl https://gw.schift.io/v1/ocr \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-F "[email protected];type=application/pdf"
curl https://gw.schift.io/v1/structify \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"schema": {
"type": "object",
"properties": {
"vendor": { "type": ["string", "null"] },
"total": { "type": ["number", "null"] }
},
"required": ["vendor", "total"],
"additionalProperties": false
},
"content_type": "application/pdf",
"file_base64": "$(base64 < invoice.pdf | tr -d '\n')"
}
EOFPOST /v1/structify → 200
{
"document_id": "…",
"structured": {
"fields": { "vendor": "Hanbit Trading", "total": 12000 },
"field_confidence": {
"total": {
"model": 0.90, "ocr_min": 0.91, "combined": 0.90
}
},
"evidence": {
"total": [{ "page_no": 1, "block_indices": [4] }]
}
},
"raw": { "pages": [ … ], "usage": { "pages": 1 } },
"usage": { "input_tokens": …, "output_tokens": … }
}Structify app
Quotes and purchase orders,
checked against the source.
Upload a document in the console. Structify organizes items and prices, you review them against the source, then save them as rows.
Start with a documentIncluded in Schift Context
- Item
- Bolt M8
- Quantity
- 120
- Subtotal
- ₩96,000
01 / Source to review
The extracted value, beside its source.
Review the recognized text alongside its source region. Available region coordinates locate it on the original; recognition confidence appears when provided.
Recognition confidence describes text recognition. Check the source to verify the business details.
Upload → automatic structure → review against the source
QUOTATION
Supplier, Hanbit Parts
VAT excluded, Valid for 14 days
1 / 1Selected source region
Stainless steel bolt M8
120 × 800
- Region
- Page 1, line items
- Recognition confidence
- 98% (example)
When coordinates or confidence are absent, review the available source text.
02 / Recognized text to business fields
After recognition, give the result a useful shape.
Upload your document to recognize and structure its contents automatically. Review the source beside the result, then adjust the fields and values you need.
Upload → automatic structure → review against the source
Fields and values KV
- Supplier
- Hanbit Parts
- Subtotal
- ₩96,000
Your own fields
- Item name
- Bolt M8
- Inspector
- Needs review
Line-item table
| Item | Qty |
|---|---|
| Bolt M8 | 120 |
Missing source values remain for review. Save the reviewed result to use it in tables and CSV.
Free every month, then pay per page
Pay only for the pages you process.
OCR pages
Free every month100 pagesfree every monthPay as you go$0.02per pageMonthly commit100K pages, $1,333/mo$0.0133/pageStructify extraction
Free every month100 pagesfree every monthPay as you go+$0.015per page, With file upload, OCR included: $0.035 per page
Extraction with a source on every field
Based on each vendor's official docs.
| Schift | LlamaExtract | Reducto | AWS Textract | Mistral OCR | |
|---|---|---|---|---|---|
| Per-field confidence, by default | Model, OCR, combined | Opt-in, slows extraction | With citations on | Per Queries answer | Per OCR block |
| Per-field source location, by default | Page, block, bbox | Opt-in, slows extraction | Opt-in, disables chunking | Per Queries answer | Not in annotations docs |
| Your own JSON Schema | Your JSON Schema as is | JSON Schema subset | Schema or prompt | Natural-language questions | JSON Schema |
| Free usage every month | OCR 100 pages + extraction 100 pages | 10,000 credits a month | First $150 of usage | New customers, 3 months | Not on price page |
| Plain per-page price | OCR and extraction, per page | 1–45 credits by mode | Per 1,000 pages | Per page, by feature | Per 1,000 pages |
Sources (checked 2026-09-27)
- LlamaParse docs: Pricing 2026-09-27
- Reducto docs: Usage and Pricing 2026-09-27
- LlamaIndex: Pricing 2026-09-27
- LlamaExtract docs: Configuring Extract 2026-09-27
- LlamaExtract docs: Metadata Extensions 2026-09-27
- Reducto: Pricing 2026-09-27
- Reducto docs: Citations 2026-09-27
- Reducto: Extract 2026-09-27
- Amazon Textract: Pricing 2026-09-27
- Amazon Textract docs: Queries 2026-09-27
- Mistral docs: OCR 4.1 2026-09-27
- Mistral docs: Document AI annotations 2026-09-27
FAQ
Can I use OCR on its own?
Yes. Reuse the result; pay extraction only.
How do I use the confidence scores?
Route only low-scoring fields to human review.
Does it handle large documents?
Above 25MB, documents run as async jobs.
How can I try it?
Request a demo and tell us about your documents and required fields. We will review the available scope and guide you through access.
Start with the next document you receive.
Review your documents and required fields with us.