Business card
Name, title, company, email, phone, website, and address from a card photo.
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.
When you have a result, Copy it, Save it, Share it, or Run again on another photo.
Human-friendly result types. Schema ids are secondary — for Shortcut authors and integrators.
Name, title, company, email, phone, website, and address from a card photo.
A title, the note body, and any dates, emails, phones, URLs, or amounts found in the text.
Merchant, date, currency, total, tax, and line items from a receipt photo.
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.
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.
| text | Required string. The unstructured OCR text. |
|---|---|
| schema_id | Id of a built-in schema. Current ids: business_card, generic_note, receipt. |
| schema | An 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.
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.
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"}'
{
"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
}
]
}
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"}}}}'
business_card — Business cardgeneric_note — Notereceipt — Receipt