Free forever · 200 OCR + 50 extraction pages/mo

The OCR API for PDFs, images, scans, and handwriting.

Send documents through one async API and choose the result shape per job: raw page text for search, or schema-shaped JSON for fields, tables, and line items. Printed or handwritten, scanned or photographed. Built for production with signed webhooks, idempotency, and rate-limit headers.

Get started today for free. No credit card required.

Live demo

Try it on a real document.

Run OCR on a sample document, or drop in your own. No sign-up, no API key.

utility bill
A utility bill is loaded and ready
Hit Run OCR to watch OCRWell pull the text out live. No sign-up, no API key.

Or run it on your own document

Drop a document here

PDF, PNG, JPEG, TIFF, WebP, or BMP. Up to 4 MB, single page.

Or try a sample

Simple OCR output

See a scanned document become plain text.

Use simple OCR when your app needs searchable text, audit records, quoting, summarisation, or downstream LLM input. The response keeps text grouped by page.

Source document
A scanned motor insurance claim notification form
Returned text
claim-page.txt
text
MOTOR CLAIM NOTIFICATION
Policy number: POL-418209
Claimant: Daniel Harper
Incident date: 14/03/2026

Vehicle damage
Front bumper and left headlamp
reported after low-speed collision.

Estimated repair cost: $1,240
Structured OCR output

See one document become structured JSON.

Start with the source document your customer uploads. OCRWell reads the page and returns text or typed fields in the shape your app expects.

Source document
A scanned A4 medical invoice from Riverside Medical Centre
Extracted output
invoice.json
json
{
  "data": {
    "provider": "RIVERSIDE MEDICAL CENTRE",
    "invoice_id": "INV-20416",
    "date": "02/04/2026",
    "patient": "M. Okafor",
    "line_items": [
      {
        "code": "99213",
        "description": "Office Visit",
        "fee": "95.00"
      },
      {
        "code": "93000",
        "description": "ECG 12-lead",
        "fee": "45.00"
      },
      {
        "code": "36415",
        "description": "Venepuncture",
        "fee": "12.00"
      },
      {
        "code": "80061",
        "description": "Lipid Panel",
        "fee": "38.00"
      }
    ],
    "total": "GBP 190.00"
  }
}
Input coverage

One OCR API for the documents you actually receive.

Production document intake is messier than clean digital PDFs. These all go through the same endpoint with no branching in your code.

Camera input

Phone photos

Photographed pages arrive skewed, shadowed, and off-centre. Send them as they are: no deskewing, cropping, or contrast correction on your side first.

No text layer needed

Scans and faxes

Flatbed scans, faxed pages, and image-only PDFs with no embedded text layer return the same page-by-page text as digital-native files.

Cursive + print

Handwriting

Cursive, print, and mixed handwriting on forms, notes, and letters go through the same endpoint and modes as printed documents.

Layout-aware

Multi-column layouts

Two-column reports, dense statements, and pages that mix paragraphs with tables come back as clean page text rather than jumbled fragments.

Rows as arrays

Tables and line items

In structured mode, repeated rows become JSON arrays: invoice line items, bank transactions, and schedules keep their columns.

PNG + JPEG + more

Screenshots

Screenshots, app exports, and other system-generated images work like any upload. Useful for support tooling and migration jobs where no original file exists.

One endpoint, two modes

Upload once. Ask for text or structured JSON.

Create a short-lived upload URL, PUT the file, then submit it for OCR. Text mode returns page-by-page text. Structured mode follows the schema you send and returns JSON your app can write straight into its workflow.

submit-text.sh
bash
# Submit an uploaded PDF for text extraction
$ curl -X POST https://api.ocrwell.com/v1/documents \
    -H "X-API-Key: $OCRWELL_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "upload_id":"upl_01H7",
      "filename":"claim.pdf",
      "mode":"text"
    }'
submit-structured.sh
bash
# Submit the same endpoint with a schema
$ curl -X POST https://api.ocrwell.com/v1/documents \
    -H "X-API-Key: $OCRWELL_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "upload_id":"upl_01H7",
      "filename":"invoice.pdf",
      "mode":"structured",
      "schema":{
        "supplier_name":"",
        "invoice_number":"",
        "invoice_date":"",
        "currency":"",
        "line_items":[
          {
            "description":"",
            "quantity":"",
            "amount":""
          }
        ],
        "total":""
      }
    }'
structured-result.json
json
{
  "job": {
    "id": "019539a6-6c3d-7e5f",
    "status": "completed",
    "mode": "structured",
    "page_count": 2
  },
  "result": {
    "data": {
      "supplier_name": "RIVERSIDE MEDICAL CENTRE",
      "invoice_number": "INV-20416",
      "invoice_date": "02/04/2026",
      "currency": "GBP",
      "line_items": [
        {
          "description": "Office Visit",
          "quantity": "1",
          "amount": "95.00"
        },
        {
          "description": "ECG 12-lead",
          "quantity": "1",
          "amount": "45.00"
        },
        {
          "description": "Venepuncture",
          "quantity": "1",
          "amount": "12.00"
        },
        {
          "description": "Lipid Panel",
          "quantity": "1",
          "amount": "38.00"
        }
      ],
      "total": "190.00"
    }
  }
}
Built for real integrations

What developers need from an OCR API.

pages[] text

Text mode for search

Extract page-by-page text for search indexes, audit trails, document review queues, and LLM pipelines that should receive text instead of document images.

Schema-shaped

Structured mode for JSON

Send a template or JSON Schema and receive data in the shape your app expects: invoice lines, form fields, customer details, totals, and nested arrays.

200 pages free

Free tier for evaluation

Generate a key and process 200 OCR pages a month on the free forever tier, with no credit card and a hard cap instead of surprise overages. Paid plans start at $20/mo.

Idempotent

Bulk jobs without duplicates

Use idempotency keys when a batch worker retries after a timeout. Rate-limit headers and Retry-After responses let your client pace large backfills safely.

Async-ready

Polling or signed webhooks

Poll GET /v1/jobs/:id when a user is waiting in your app. For background workflows, receive HMAC-signed callbacks when OCR jobs complete or fail.

No training

Short-lived document storage

Uploaded documents are deleted after processing, and results expire after retrieval. Customer documents are not used to train AI models.

FAQ

OCR API questions.

What does the OCR API return?

In text mode it returns a pages array with the text from each page. In structured mode it returns a result.data object that follows the template or JSON Schema you submitted.

Which file types does the OCR API support?

OCRWell accepts PDF, JPEG, PNG, TIFF, WebP, and BMP files up to 20 MB. It handles digital PDFs, scanned PDFs, phone photos, screenshots, faxes, and other image-based documents.

Does the OCR API read handwriting?

Yes. Cursive, print, and mixed handwriting return through the same endpoint and modes as printed documents. If handwritten forms or notes are your main workload, the handwriting OCR API page covers that use case in more detail.

Can I extract JSON instead of plain text?

Yes. Use structured mode and provide either a simple template object or a JSON Schema. Nested objects and arrays are supported, so repeated line items and table rows can come back as arrays.

Should my integration poll or use webhooks?

Use polling when a user is waiting on a page for the result. Use webhooks for batch jobs, queue workers, and async pipelines. Webhook callbacks are signed with HMAC-SHA256.

How quickly do OCR jobs complete?

Jobs run asynchronously and most single documents complete within seconds. Poll the job endpoint while a user waits in your app, or take the webhook callback and let batch work drain at the pace your rate limits allow.

How much does the OCR API cost?

Pricing is per page processed. The free forever tier covers 200 OCR pages per month with no credit card and a hard cap, so evaluation costs nothing. Paid plans start at $20 per month; the pricing page has volume rates.

Why use an OCR API instead of an open-source library?

A recognition library gives you raw text from clean images. You still have to build image preprocessing, layout handling, handwriting support, structured extraction, and the queueing to run it all at scale. OCRWell puts that behind one endpoint, so integration is an HTTP call rather than a pipeline you maintain.

Does OCRWell store my documents or use them for training?

Uploaded documents are deleted after processing. Results are available briefly after retrieval and then expire. Customer documents are not used to train AI models.

Pricing

Start free. Pay only when you scale.

Free forever
200 OCR + 50 extraction pages every month
  • No credit card required.
  • Hard cap, no overage charges.
  • Paid plans from $20/mo when you grow.

Build OCR into your product today.

Generate an API key, upload your first PDF or image, and get text or structured JSON back in seconds. Free forever tier covers 200 OCR pages per month.

Get your API key today No credit card required. 200 OCR + 50 extraction pages / month, free forever.