Image to Text OCR – Bulk Text Extraction, 100+ Languages avatar

Image to Text OCR – Bulk Text Extraction, 100+ Languages

Pricing

from $2.50 / 1,000 image processeds

Go to Apify Store
Image to Text OCR – Bulk Text Extraction, 100+ Languages

Image to Text OCR – Bulk Text Extraction, 100+ Languages

Extract text from images in bulk with Tesseract 5 OCR: PNG, JPG, WebP, TIFF (multi-page), GIF, BMP, HEIC. 120+ languages, auto-rotation, dark-mode screenshots, small-text upscaling. Text, confidence, lines and words with bounding boxes, hOCR. $0.0025 per image.

Pricing

from $2.50 / 1,000 image processeds

Rating

0.0

(0)

Developer

Cemal Atakli

Cemal Atakli

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

3 days ago

Last modified

Share

Image to Text OCR – Bulk Extract Text from Images (100+ languages)

Extract text from images in bulk: screenshots, receipts, scanned documents, photos of signs and labels, book pages, multi-page TIFF scans. Paste a list of image URLs and get back clean text for each image. You also get a confidence score, the detected orientation, word and line counts, and optionally every line and word with its bounding box, plus hOCR.

The Actor uses the open-source Tesseract 5 OCR engine and its LSTM models. It reads 120+ languages, including English, German, French, Spanish, Italian, Portuguese, Dutch, Turkish, Polish, Russian, Ukrainian, Arabic, Hindi, Chinese (Simplified and Traditional), Japanese and Korean. There is no browser and no third-party OCR API, so your images go to no one else, and the price is $0.0025 per image ($2.50 per 1,000).

What it does

  • Bulk image OCR from URLs: PNG, JPEG, WebP, TIFF (also multi-page TIFF, one result per page), GIF, BMP, HEIC/HEIF (iPhone photos) and AVIF. data:image/...;base64, URIs work too.

  • 120+ languages. 17 languages are preinstalled. Any other Tesseract language (ell, heb, tha, vie, swe, ces...) is fetched automatically on first use. You can combine languages (["eng","deu"]), use ISO codes (en, de, zh, ja), or set auto to detect the script of each image.

  • Smart preprocessing that improves accuracy:

    • Auto-rotation. Sideways and upside-down pages and photos are detected and fixed (90°/180°/270°), and EXIF orientation from phones is applied.
    • Adaptive scaling. The text height is measured first. Small text (1080p UI screenshots, low-resolution scans, thumbnails) is enlarged up to 3×, and huge photos with very large text are reduced.
    • Dark-mode screenshots (light text on a dark background) are inverted automatically.
    • Grayscale, contrast stretch, transparent backgrounds flattened to white, and optional black/white thresholding (Otsu) for noisy scans.
    • Receipt-aware layout. If the automatic layout skips a large region (typical for receipt prices next to a dark border), the image is re-read as one block and the better result is kept.
  • Quality signals for every image: mean word confidence, character-weighted confidence, number of low-confidence words, rotation fixed, detected script, and the preprocessing steps that were applied.

  • Three output levels:

    • text: the full text,
    • lines: also every line with its bounding box and confidence,
    • words: also every word with its box and confidence.

    Boxes are in pixels of the original image. Optional hOCR output is available for searchable-PDF or layout tools.

  • Robust bulk processing. Downloads and OCR run in parallel, with size limits, retries with backoff, and timeouts. A broken URL, a non-image file or an OCR timeout becomes an error row (not charged) and never crashes the run.

Use cases

  • Receipts and invoices: turn photos of receipts into text for expense tools, bookkeeping or an LLM that extracts the totals. For PDFs and structured invoice fields (vendor, totals, VAT, line items), use Document & Invoice to JSON.
  • Screenshots: make app, chat, dashboard and social media screenshots searchable, or feed them to AI agents. Dark mode and small UI text are handled.
  • Scanned documents and archives: digitize typewritten letters, book pages, old newspapers and multi-page TIFF scans from libraries and archives. You get text plus line boxes to build search indexes or searchable PDFs (hOCR).
  • E-commerce and marketing: read text in product images, banners, packaging and labels (ingredients, lot numbers, sizes) at scale.
  • Compliance and moderation: detect text in user-uploaded images, such as phone numbers, URLs, spam or prohibited words.
  • Data pipelines and RAG: convert image folders (by URL) into text for embedding, classification or translation.

Input example

{
"imageUrls": [
"https://upload.wikimedia.org/wikipedia/commons/5/55/A_text-book_of_agricultural_entomology_%28Page_192%29_BHL9798403.jpg",
"https://example.com/receipts/IMG_0412.HEIC",
"https://example.com/screenshots/settings-dark.png"
],
"languages": ["eng", "deu"],
"outputLevel": "lines",
"includeHocr": false,
"pageSegmentationMode": "auto",
"autoRotate": true,
"preprocessing": "auto",
"upscaleSmallImages": true,
"minWordConfidence": 0
}

The default input reads one public-domain book page from Wikimedia Commons in about 2 seconds.

FieldDefaultNotes
imageUrls1 sample pageImage URLs or data: URIs, one per line
languages["eng"]Tesseract codes (eng, deu, chi_sim...), ISO codes (en, de, zh), names, or auto
outputLeveltexttext / lines / words (bounding boxes + confidence)
includeHocrfalseRaw hOCR per image or page
pageSegmentationModeautoOr force Tesseract mode 3, 4, 6 (receipts, forms), 11 (sparse text), 7 (single line), 1
autoRotatetrueFix 90/180/270° rotation
preprocessingautothreshold adds black/white binarization; none uses the image as is
upscaleSmallImagestrueAdaptive scaling based on the measured text height
minWordConfidence0Drop words below this confidence (0–100)
preserveInterwordSpacesfalseKeep runs of spaces (column alignment)
maxPagesPerImage10Multi-page TIFF limit
ocrAllAnimationFramesfalseOCR every frame of animated GIF/WebP
maxImageSizeMb25Larger files are skipped (free)
maxConcurrency0 (auto)Parallel OCR workers; auto = 1 per 4 GB of memory

Output example

One dataset row per image URL (multi-page TIFF: one row with a pages array). Real output (lines trimmed):

{
"url": "https://upload.wikimedia.org/wikipedia/commons/e/e2/Typewritten_letter_from_Dr_Claude_H_Organ_Jr_MD_FACS_to_Dr_Leonidas_Berry_dated_October_5_1965.jpg",
"index": 0,
"status": "ok",
"text": "...October 5, 1965\n\nDear Doctor Berry:\n\nThanks very kindly fer your letter of\nSeptember 13th. I shall be en reute to the American\nCollege of Surgeons meeting in Atlantic City on\nOctober 17th. ...",
"meanConfidence": 88.6,
"weightedConfidence": 89.6,
"wordCount": 106,
"lineCount": 23,
"charCount": 590,
"lowConfidenceWords": 8,
"languages": ["eng", "deu"],
"rotation": 0,
"imageFormat": "JPEG",
"contentType": "image/jpeg",
"width": 656,
"height": 860,
"fileSizeBytes": 52789,
"pageCount": 1,
"pagesProcessed": 1,
"chargedEvents": 1,
"preprocessing": ["grayscale", "autocontrast", "small text (~11 px lines): scaled x2.00"],
"warnings": null,
"processingSeconds": 2.23,
"error": null,
"lines": [
{"text": "Dear Doctor Berry:", "confidence": 86.1, "bbox": {"x": 162, "y": 272, "width": 120, "height": 12}, "wordCount": 3, "block": 8}
]
}
  • meanConfidence is the average Tesseract word confidence (0–100). weightedConfidence weights it by word length. Above 90 is usually near-perfect text. Below 60 means a hard image (handwriting, a heavy background, very low resolution).
  • rotation is how many degrees (counter-clockwise) the text was turned. It was corrected automatically.
  • With outputLevel: "words", each word has text, confidence, bbox and line (an index into lines).
  • Failed images have "status": "failed" and an error such as HTTP 404 when downloading the image, Not a supported image... It is a PDF: use the Document & Invoice to JSON Actor or Image is 31.2 MB, above the 25 MB limit. They are not charged.
  • The key-value store record OUTPUT holds a run summary: images OK and failed, events charged, OCR seconds, and any URLs not processed because of the max-charge limit.

The Output tab has three views: Extracted text (with thumbnails), OCR details and Failed images. See SAMPLE_OUTPUT.json for full rows: a typewritten letter, a Swiss restaurant receipt photo, an article page and a 404 error.

Pricing

Pay per event. You pay only for images that were OCRed.

EventPrice
Image processed (per image, or per page of a multi-page TIFF)$0.0025 ($2.50 / 1,000)
Actor start$0.00005

Very text-dense pages count once per started 1,000 recognized words, because OCR time grows with the amount of text. A full dense A4 page of about 1,100 words costs 2 × $0.0025. Screenshots, receipts, photos and normal document pages are under 1,000 words. An image where OCR found no text is still charged, because the OCR ran. Failed downloads, non-images and errors are free.

Compared with other Apify Store OCR Actors (public Store prices, 2026-10):

ActorEnginePrice per 1,000 imagesExtra per runWord boxes + confidenceLanguages
Image to Text OCR (this Actor)Tesseract 5 LSTM$2.50$0.00005Yes (lines, words, hOCR)120+ (17 preinstalled)
zenomastro/image-ocr-text-extractor–$5.00–––
borderline/google-lensGoogle Lens (browser)$2.50$0.01NoLens
zen-studio/google-lens-ocrGoogle Lens––NoLens

Set Maximum cost per run in the run options to cap spending. The Actor reserves budget before each OCR, stops cleanly at the limit, never OCRs an image it cannot charge for, and lists the skipped URLs in OUTPUT.

Speed tip: at the default 1 GB of memory, one image is OCRed at a time (about 1–4 s per image). For thousands of images, run with 4–8 GB: that gives 1–2 parallel OCR workers per CPU core. The price per image does not change.

FAQ

How accurate is it? On clean printed text (screenshots, scans at 200–300 DPI, receipts photographed straight), nearly all words come out right. In our tests, such images scored a meanConfidence of 93–97, a 1899 book scan scored 94, and a 1965 typewritten letter scored 89. Phone photos with perspective or shadows, decorative fonts and very old documents are harder. Check meanConfidence and lowConfidenceWords per image, or filter with minWordConfidence. Handwriting is not supported: Tesseract is built for printed text.

Which languages should I choose? Use the language or languages in your images, for example ["deu"] for German receipts, because accents and umlauts (ä, ß, é, ğ, ş) are read correctly only with the right model. Mixed documents can use 2–3 languages (["eng","fra"]). auto detects the script of each image (Latin, Cyrillic, Arabic, Han, Japanese, Hangul, Devanagari, Greek, Hebrew, Thai...) and picks one model per script, with English for Latin. Set the exact language for the best results on accented Latin text.

Does it OCR PDFs? No, this Actor reads images. For PDF, DOCX and scanned PDF pages (including OCR), plus invoice and receipt field extraction, use Document & Invoice to JSON.

Can it read text in photos, such as signs, packaging and memes? Yes, if the text is reasonably large and straight. For scattered text, set pageSegmentationMode to 11 (sparse text). Text that is strongly curved or perspective-distorted is hard for any OCR engine.

How do I keep receipt columns aligned? Use pageSegmentationMode: "6" and preserveInterwordSpaces: true. The default auto mode already switches to single-block reading when it detects that amounts were skipped.

Are my images stored or sent anywhere? Images are downloaded into the run container, OCRed locally with Tesseract, and discarded. Only the text results are saved to your dataset. No external OCR API is used.

Why was an image charged as 2? It had more than 1,000 recognized words (see chargedEvents). Very dense pages take several times longer to OCR.

Use with AI agents / Apify MCP

  • Apify MCP server: add the Actor to Claude Desktop, Cursor, VS Code or any MCP client via https://mcp.apify.com?actors=gazidev/image-ocr. An agent can call it with {"imageUrls":["https://.../screenshot.png"],"languages":["eng"]} and get back the text and its confidence, so the agent can "read" images and screenshots even when it has no vision model or when vision tokens are expensive.
  • data: URIs: agents that hold an image in memory can pass data:image/png;base64,... directly, with no upload needed.
  • API: POST https://api.apify.com/v2/acts/gazidev~image-ocr/run-sync-get-dataset-items?token=... with the input JSON returns the rows directly (good for one or a few images).
  • Pipelines: use outputLevel: "lines" to give LLMs layout context (line boxes), or pass the text to Document & Invoice to JSON for structured invoice fields.

Limitations

  • Printed text only. Handwriting gives low-confidence noise.
  • Strong perspective, curved text and very stylized fonts reduce accuracy. No deskew beyond small angles.
  • Images need a public URL (or a data: URI). URLs behind a login or anti-bot protection fail with a clear error (not charged).