Image to Text OCR: Extract Text from Images & Screenshots
βΆ Run it on Apify: no install, no login to any data source. Apifyβs free plan includes monthly credit, enough for small runs.
Turn images into text with OCR: photos of documents, scans, receipts, screenshots, slides, signs and product labels. Paste image links and get the text of each one, its OCR confidence and, optionally, every line with its position. 100+ languages, PNG, JPEG, WebP, GIF, BMP and AVIF.
- πΌοΈ Any common image format: PNG, JPG/JPEG, WebP, GIF, BMP and AVIF, from any direct link.
- π 100+ languages: English, Spanish, French, German, Portuguese, Chinese, Japanese, Arabic, Hindi and more, or mixes such as
eng+spa. - π Lines with positions: each lineβs text, confidence and bounding box, for highlighting, redaction or layout analysis.
- π Two layouts: document mode for pages and receipts, scattered-text mode for screenshots, labels and signs.
- π Better results on small images: screenshots and phone crops are upscaled before OCR automatically.
- π Private: images are processed in memory and never stored; only the text is saved.
- π΅ $0.002 per image (2 USD per 1,000). Failed images cost nothing.
Who uses it
- AI and RAG developers who need the text inside images and screenshots for their LLM pipelines.
- Operations and finance teams digitizing receipts, invoices and scanned forms in bulk.
- Marketers and analysts reading text from social media images, ads, banners and memes.
- E-commerce teams pulling product label and packaging text from product photos.
- Developers who want an OCR API without installing or hosting Tesseract.
How to use it
- Paste one or more image URLs (direct links to the image files).
- Set OCR languages if the text is not in English (for example
spa,deuoreng+fra). - Pick Scattered text for screenshots, signs or labels; keep Document for pages and receipts.
- Click Start. Download the results as JSON, CSV or Excel, or read them through the API.
Input fields
| Field | What it does | Default |
|---|---|---|
| Image URLs | Direct links to PNG, JPEG, WebP, GIF, BMP or AVIF files | β |
| OCR languages | Tesseract codes joined with +, e.g. eng, spa, eng+deu, chi_sim |
eng |
| Text layout | Document (paragraphs, columns) or Scattered text (screenshots, signs) | Document |
| Include lines with positions | Adds each line with confidence and bounding box | off |
| Minimum confidence | Skip (and donβt pay for) images read with lower confidence | 0 |
| Max file size (MB) | Larger files are skipped | 20 |
Input example
{
"imageUrls": [
"https://tesseract.projectnaptha.com/img/eng_bw.png"
],
"languages": "eng",
"layout": "auto",
"includeLines": true
}
Output
One result per image:
{
"url": "https://tesseract.projectnaptha.com/img/eng_bw.png",
"fileName": "eng_bw.png",
"contentType": "image/png",
"width": 1486,
"height": 668,
"languages": "eng",
"text": "Mild Splendour of the various-vested Night!\nMother of wildly-working visions! hail\n...",
"characters": 351,
"words": 58,
"confidence": 92,
"hasText": true,
"lines": [
{ "text": "Mild Splendour of the various-vested Night!", "confidence": 95, "x": 38, "y": 34, "width": 1256, "height": 77 }
],
"extractedAt": "2026-11-08T01:00:00.000Z"
}
Output fields
| Field | Meaning |
|---|---|
text |
All the text found, line breaks kept |
confidence |
Average OCR confidence, 0β100 (above ~80 is usually clean text) |
hasText |
false when no readable text was found |
words / characters |
Size of the extracted text |
lines |
Each line with its confidence and box (x, y, width, height), when enabled |
width / height |
Original image size in pixels |
fileName, contentType, fileSizeBytes |
File details |
ocrMs |
Time spent on the image |
Images that could not be read (broken links, web pages instead of images, files over the size limit) are not saved or charged; the SUMMARY record lists each one with the reason.
Pricing
$0.002 per image read, plus a tiny start fee. 1,000 images cost about $2.00. Failed images and images below your Minimum confidence cost nothing.
FAQ
Which OCR engine does it use? Tesseract, the open-source OCR engine, with its LSTM models. It works offline inside the Actor: your images are not sent to Google, OpenAI or any other third party.
Does it read handwriting? Clear block letters often work; cursive handwriting usually gives low confidence. Use Minimum confidence to drop poor results.
Can it read scanned PDFs? Use the PDF to Text & Markdown Extractor: it reads digital PDFs exactly and runs the same OCR on scanned pages.
How do I process images from my computer? Upload them anywhere that gives a direct link (for example an Apify key-value store, Google Cloud Storage, S3 or Dropbox with a direct-download link) and paste the links.
How do I get better accuracy? Set the right language, use images where letters are at least ~15 px tall, and pick Scattered text for screenshots and labels. Small images are upscaled automatically.
Is it fast? A typical image takes 1β3 seconds. For thousands of images, give the run 2β4 GB of memory.
Limitations
- Links must point to the image file itself, not to a gallery or a page that shows it.
- Tables come out as text in reading order, not as structured cells.
- Very stylized fonts, low-resolution photos and cursive handwriting give low confidence.
- TIFF and HEIC files are not supported yet; convert them to PNG or JPEG first.
Use it from your code, AI agents and automations
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("richiedc95/image-to-text-ocr").call(run_input={
"imageUrls": [
"https://tesseract.projectnaptha.com/img/eng_bw.png"
],
"languages": "eng",
"layout": "auto",
"includeLines": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('richiedc95/image-to-text-ocr').call({
"imageUrls": [
"https://tesseract.projectnaptha.com/img/eng_bw.png"
],
"languages": "eng",
"layout": "auto",
"includeLines": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
- π€ AI agents (MCP): add the Apify MCP server to Claude, ChatGPT, Cursor or any MCP client and this Actor becomes a tool your agent can call.
- π No-code (n8n, Make, Zapier): one HTTP request runs the Actor and returns the results, so any automation tool can use it. In n8n, add an HTTP Request node with method
POST, URLhttps://api.apify.com/v2/acts/richiedc95~image-to-text-ocr/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>and the JSON input above as the body, then send the items to Slack, Google Sheets, email or a CRM. Put a Schedule node in front for daily alerts. Make and Zapier have official Apify apps (Run an Actor β Get dataset items). Ready-made n8n workflows (import from URL) and a step-by-step guide: n8n / Make / Zapier examples. - π₯ Exports: download every run as JSON, CSV, Excel, XML or RSS, or read it through the Apify API.
Process new images automatically
- Click Save as a new task with your input.
- Run it on a schedule, or trigger it with an integration when another Actor finishes (for example, OCR every image a scraper just collected).
- Read the latest results from one stable URL:
https://api.apify.com/v2/actor-tasks/<TASK_ID>/runs/last/dataset/items?token=<YOUR_APIFY_TOKEN>&status=SUCCEEDED&format=json
Run it
- Open Image to Text OCR: Extract Text from Images & Screenshots on Apify, fill the form and click Start, or call it from your code with one HTTP request.
- Results come as JSON, CSV or Excel, and can be scheduled daily.
Related data APIs
- PDF to Text & Markdown Extractor (OCR, RAG Chunks, Metadata): Convert PDF URLs to clean text or LLM-ready Markdown with headings, per-page text, RAG chunks and metadata. OCR for scanned pages in 100+ languages. $0.003 per PDF + $0.0001 per page; OCR $0.004 per page.