ocr.wiki

Turn iPhone photos into clear fields — on your device

ocr.wiki is free on-device OCR in an Apple Shortcut. Pick photos, let your iPhone read the text, and get structured data you can use — receipts, business cards, and notes.

How to use it

  1. 1Add the Shortcut Tap the button above. Apple Shortcuts opens so you can add the example. You don’t install an App Store OCR app for recognition.
  2. 2Run it and pick photos Open the Shortcut, choose one or more photos from your library, and run it.
  3. 3Your iPhone reads the text Recognition happens on your device. The photo stays on the phone; only the text you choose to send leaves it.
  4. 4Get clear fields back ocr.wiki turns that text into structured data — named fields for a receipt, card, or note — so you can use the result, not a blob of raw text.

What you can capture

Human-friendly result types. Schema ids are secondary — for Shortcut authors and integrators.

Business card

Name, title, company, email, phone, website, and address from a card photo.

schema id: business_card · schema file

Note

A title, the note body, and any dates, emails, phones, URLs, or amounts found in the text.

schema id: generic_note · schema file

Receipt

Merchant, date, currency, total, tax, and line items from a receipt photo.

schema id: receipt · schema file

When it doesn’t work

Need an iPhone with Shortcuts. If no text shows up, try a sharper photo with the whole page in frame and less glare. If fields look incomplete, run again or try a different type (receipt, card, or note). Building your own flow? See For developers below.

For developers

POST OCR text to this host with a built-in schema id or an inline JSON Schema. The server never sees the image — only the text you send.

Send POST / with Content-Type: application/json.

Request

textRequired string. The unstructured OCR text.
schema_idId of a built-in schema. Current ids: business_card, generic_note, receipt.
schemaAn inline JSON Schema object. Use this or schema_id, not both.

The root schema type must be object. Supported keywords include type, properties, required, additionalProperties, items, enum, const, default, string length, numeric range, and array size. $ref, pattern, combinators, and conditionals are declined.

Response

A success body is the structured JSON. It is not wrapped. Check it against the same schema you sent.

Missing facts become empty values of the right type ("", 0, false, [], or null when null is allowed). If the text cannot satisfy a constraint such as minLength or enum, the status is 422 and the body is an error object with error and code.

Browsers and Shortcuts may call this from another origin. Access-Control-Allow-Origin is * for GET, POST, and OPTIONS.

schema id

curl -sS -X POST "https://ocr.wiki/" \
  -H "Content-Type: application/json" \
  -d '{"text":"BLUE BOTTLE COFFEE\n123 Market Street\nSan Francisco CA\n09/12/2026\n\nCappuccino                 $4.75\nAlmond croissant           $3.50\n\nSubtotal                   $8.25\nTax                        $0.74\nTotal                      $8.99\n","schema_id":"receipt"}'

What that receipt returns

{
    "merchant": "BLUE BOTTLE COFFEE",
    "date": "09/12/2026",
    "currency": "USD",
    "total": 8.99,
    "tax": 0.74,
    "items": [
        {
            "description": "Cappuccino",
            "amount": 4.75
        },
        {
            "description": "Almond croissant",
            "amount": 3.5
        }
    ]
}

Inline schema

Omit schema_id and send schema yourself. A text/plain body is also accepted when schema_id is a query parameter, and form fields text plus schema_id work the same way.

curl -sS -X POST "https://ocr.wiki/" \
  -H "Content-Type: application/json" \
  -d '{"text":"Order note\nContact: ada@example.com\nQty: 3","schema":{"type":"object","additionalProperties":false,"required":["email","quantity"],"properties":{"email":{"type":"string"},"quantity":{"type":"integer"}}}}'

Built-in schema files