[ OCR API ]

Turn scans and photos into accurate, searchable text.

Send PDFs and images to /parse and get searchable text, reading order, and coordinates for every word. OCR runs automatically for image-only files; force OCR tells Parse to ignore an unreliable embedded text layer and read the page pixels instead.

[ OVERVIEW ]
What it does

OCR recognizes text in PDFs and images and returns content you can search, copy, and index. It runs through the Parse endpoint, which also preserves reading order and the position of each recognized word.

Who it's for

Teams digitizing scanned archives, faxes, receipts, and photographed documents that need reliable text out of low-quality images.

What it solves

Traditional OCR often loses accuracy on skewed, noisy, or handwritten pages and discards where each word appeared. Unsiloed reads the page visually and links recognized words to their original positions.

[ USE CASES ]

Where teams put OCR to work.

Scanned archives

Digitize decades of paper into searchable text without re-keying a single page.

Faxes and rough scans

Read skewed, speckled, and low-resolution pages that classic OCR garbles.

Receipts and photos

Recognize text in phone photos of receipts, crumpled forms, and other uneven page images.

Handwriting

Recognize legible handwritten notes and signatures alongside printed text in the same pass.

Image-only PDFs

Return text and coordinates from image-only PDFs for search, indexing, and document viewers.

Word-level coordinates

Every token comes back with a bounding box for highlighting, redaction, and citations.

[ WHY UNSILOED ]

Why teams choose Unsiloed for OCR.

  • 01

    Automatic OCR with an override

    Images and scanned PDFs are read automatically. When a PDF contains an unreliable embedded text layer, force OCR reads the page pixels instead.

  • 02

    Ranked #1 on olmOCR-Bench

    The vision model ranks first on the public benchmark for document OCR across varied page types and layouts.

  • 03

    A bounding box on every word

    Word-level coordinates come back with the text, so you can highlight a match, redact a region, or ground a citation to the precise spot on the page.

  • 04

    Built for difficult inputs

    Reading content and layout together helps with skewed scans, noisy faxes, phone photos, and legible handwriting.

  • 05

    Reading order that makes sense

    Multi-column pages are re-threaded into the order a human reads, not streamed left-to-right across the columns.

  • 06

    One workflow for PDFs and images

    Documents and page images use the same asynchronous Parse workflow and return the same structured result shape.

[ HOW IT WORKS ]

4 steps from raw file to structured output.

  1. 1

    Send an image or PDF

    POST the file to /parse with your api-key header and capture the job ID from the response.

  2. 2

    Vision OCR reads the page

    The model recognizes text and layout together while preserving the page’s reading order.

  3. 3

    Poll for completion

    GET /parse/{job_id} until the job status is Succeeded. A Failed status includes an error message.

  4. 4

    Use the text and coordinates

    Read Markdown from each chunk’s segments[].markdown and word-level OCR coordinates from each segment’s ocr array.

ocr.py
1 import os, time, requests
2
3 BASE = "https://prod.visionapi.unsiloed.ai"
4 HEADERS = {"api-key": os.environ["UNSILOED_API_KEY"]}
5
6 # 1. submit the scanned document
7 with open("scanned_invoice.pdf", "rb") as file:
8 response = requests.post(
9 f"{BASE}/parse", headers=HEADERS,
10 files={"file": file}
11 )
12 response.raise_for_status()
13 job_id = response.json()["job_id"]
14
15 # 2. poll until OCR finishes
16 for _ in range(60):
17 response = requests.get(
18 f"{BASE}/parse/{job_id}", headers=HEADERS)
19 response.raise_for_status()
20 result = response.json()
21 if result["status"] == "Succeeded": break
22 if result["status"] == "Failed":
23 raise RuntimeError(
24 result.get("message", "OCR failed"))
25 time.sleep(5)
26 else:
27 raise TimeoutError("OCR did not finish in 5 minutes")
28
29 # 3. read text and word-level coordinates
30 for chunk in result["chunks"]:
31 for segment in chunk["segments"]:
32 print(segment.get("markdown") or segment.get("content", ""))
33 print(segment.get("ocr", []))
[ BUILT FOR PRODUCTION ]

The same API from
prototype to scale.

Use the same submit-and-poll workflow from prototype through production. Page-based pricing starts with a free tier, with managed, VPC, on-premises, and air-gapped deployment options for larger workloads.

Read the docs
99.9%

uptime target on enterprise plans.

SOC 2GDPRVPC availableOn-premises availableAir-gapped available
[ FAQS ]

OCR
questions

  • Traditional OCR recognizes characters but often loses reading order and page position. Unsiloed reads text and layout together, then returns structured content with coordinates for every recognized word.
  • Send PDFs or images such as PNG, JPG, and TIFF files. Scanned, photographed, image-only, and mixed PDF pages all use the same /parse workflow.
  • Yes. Handwritten notes and signatures are recognized alongside printed text, though accuracy varies with how legible the writing is.
  • Yes. Every recognized token comes back with a word-level bounding box, so you can highlight matches, redact regions, or ground a citation to the exact spot on the page.
  • The vision model ranks first on olmOCR-Bench, a public benchmark for document OCR. Accuracy still depends on image quality, handwriting legibility, and document complexity, so test it against a representative sample of your own files.
  • By pages processed, on the same meter as the rest of the platform, with a free tier and custom pricing for high-volume archives.

See Unsiloed AI work on your own documents.

Tell us a little about your workflow and share a sample document. We’ll use it to show you a structured output during the call.

The accuracy, especially on tables, is meaningfully better than anything we tested. We evaluated over 15 solutions and Unsiloed was the only one that worked reliably.

Head of AI

Fortune 150 Bank, NY

Upload sample files you'd like us to run through Unsiloed. We'll use them to show you a sample structured output once we meet.