Image to Text OCR - Photos, Screenshots & Scanned PDFs avatar

Image to Text OCR - Photos, Screenshots & Scanned PDFs

Pricing

from $3.00 / 1,000 image or page processeds

Go to Apify Store
Image to Text OCR - Photos, Screenshots & Scanned PDFs

Image to Text OCR - Photos, Screenshots & Scanned PDFs

Extract text from images, screenshots, photos and scanned PDFs in bulk, with line bounding boxes and confidence scores. Open-source OCR engine - no Google, no API key. $3 per 1,000 pages; failed files are free.

Pricing

from $3.00 / 1,000 image or page processeds

Rating

0.0

(0)

Developer

Kanto Labs

Kanto Labs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 days ago

Last modified

Share

Image to Text OCR - Extract Text from Photos, Screenshots & Scanned PDFs

Turn images and scanned PDFs into clean, searchable text in bulk. Paste links to PNG, JPG, WEBP, TIFF, HEIC or PDF files and get back the text of every image or page in reading order, with a bounding box and confidence score for every line.

OCR runs inside the actor with the open-source PP-OCRv6 models (Apache-2.0). No Google Lens, no Google Cloud Vision, no API key, no residential proxies - so results are stable, fast and cheap. You pay only for images and pages that were actually read.

What does Image to Text OCR do?

Image to Text OCR reads the text in every image or PDF page you link to and returns it as plain text in reading order - one dataset row per image or page. Each row also lists every text line with its pixel position and a confidence score, plus the image size and whether the text came from OCR or from the PDF's own text layer. Scanned PDFs are split into pages and read one by one.

Use cases

  • Invoices, receipts and forms - pull totals, dates and IDs out of scans and photos.
  • Scanned PDFs - make old scanned documents searchable or feed them into a RAG pipeline.
  • Screenshots - extract text from app screenshots, chat logs, dashboards and error messages.
  • AI agents - give an LLM agent eyes for documents via the Apify MCP server (the output is plain JSON text).
  • E-commerce and ads - read text on product photos, banners and packaging (English and Chinese both work).
  • Data entry automation - replace manual typing with a scheduled run plus a webhook to Make, Zapier or n8n.

Who is it for?

  • Finance and operations teams digitizing invoices, receipts and forms.
  • Developers who need an OCR API without Google Cloud Vision keys or per-seat plans.
  • AI and RAG builders whose source documents are scans or screenshots.
  • Automation users on Make, Zapier or n8n replacing manual data entry.
  • Archivists and researchers making scanned pages searchable.

Why this OCR actor

This actorGoogle-Lens-based OCR actors
EngineLocal PP-OCRv6 (open source)Scrapes Google Lens
Scanned PDFsYes, page by pageUsually images only
PDFs that already contain textUses the exact text layer (auto)-
Line bounding boxes + confidenceYesVaries
Price per 1,000 images/pages$3$4 - $6

Languages

The multilingual PP-OCRv6 models read English and other Latin-script languages (German, French, Spanish, Italian, Portuguese, Dutch, Polish, Turkish, Vietnamese...), Chinese, Japanese, numbers and symbols.

  • fast is the right choice for Latin-script text, screenshots and documents.
  • Use accurate for Japanese (kana), dense Chinese, stylized fonts and poor photos. In our tests the fast model garbled Japanese kana while the accurate model read the same lines perfectly.

Handwriting works only when it is neat.

How to use it

  1. Click Try for free.
  2. Paste links to your images or PDFs into Sources, one per line.
  3. Keep Quality on fast, or pick accurate for Japanese, dense Chinese or poor photos.
  4. Click Start, then download the text as JSON, CSV or Excel, or read it through the API.

Input

FieldWhat it doesDefault
sourcesImage or PDF URLs, one per line3 sample files
qualityfast (tiny model) or accurate (small model, ~4x slower, better on dense CJK text and poor photos)fast
includeLinesAdd every text line with its pixel box [x0, y0, x1, y1] and confidencetrue
minConfidenceDrop lines recognized below this confidence0.5
pdfModeauto = use a page's own text layer when it has one, OCR otherwise; ocr = always OCRauto
maxPdfPagesRead only the first N pages of each PDF50
pdfDpiRender resolution for scanned PDF pages (300 for small print)200
skipEmptyPages with no text are reported but not billedtrue
{
"sources": [
"https://example.com/scans/invoice-0142.pdf",
"https://example.com/photos/receipt.jpg"
],
"quality": "fast",
"includeLines": true
}

Output

One dataset item per image or per PDF page. Real output from a test run (the lines array is trimmed to its first two entries):

{
"sourceUrl": "https://raw.githubusercontent.com/tesseract-ocr/tessdoc/main/images/eurotext.png",
"fileName": "eurotext.png",
"fileType": "image",
"page": 1,
"pageCount": 1,
"method": "ocr",
"width": 640,
"height": 500,
"text": "The (quick) [brown] {fox} jumps!\nOver the $43,456.78 <lazy> #90 dog\n& duck/goose, as 12.5% of E-mail\nfrom aspammer@website.com is spam.\nDer ,schnelle\" braune Fuchs springt\nüber den faulen Hund. Le renard brun\n«rapide» saute par-dessus le chien\nparesseux. La volpe marrone rapida\nsalta sopra il cane pigro. El zorro\nmarrón rápido salta sobre el perro\nperezoso. A raposa marrom rápida\nsalta sobre o cão preguiçoso.",
"lineCount": 12,
"charCount": 412,
"averageConfidence": 0.9842,
"lines": [
{ "text": "The (quick) [brown] {fox} jumps!", "confidence": 0.9792, "box": [61, 32, 522, 74] },
{ "text": "Over the $43,456.78 <lazy> #90 dog", "confidence": 0.9835, "box": [61, 62, 560, 105] }
],
"processingTimeMs": 2106,
"error": null,
"quality": "fast"
}

method tells you how the text was obtained: ocr, or pdf-text-layer when a PDF page already contained selectable text (exact and instant). Files that fail are listed with an error message and are not charged.

How much does it cost to extract text from images?

Pay per event - you are billed only for results:

EventPrice
Image or PDF page read (fast model, or PDF text layer)$0.003 ($3 per 1,000)
Image or PDF page read with the accurate model$0.008 ($8 per 1,000)

Worked examples:

  • 1,000 receipt photos, fast model: $3.00
  • A 40-page scanned contract: 40 pages x $0.003 = $0.12
  • 200 screenshots with the accurate model: 200 x $0.008 = $1.60

Downloads that fail, unreadable files and pages without text cost nothing. Set Maximum cost per run in the run options and the actor stops cleanly when it is reached.

Integrations and API

Run it from your own code with the official apify-client package (Python shown; JavaScript works the same way):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("kantolabs/image-to-text-ocr").call(run_input={
"sources": [
"https://raw.githubusercontent.com/tesseract-ocr/tessdoc/main/images/eurotext.png"
],
"quality": "fast"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Or get the results in a single HTTP call:

curl -X POST "https://api.apify.com/v2/acts/kantolabs~image-to-text-ocr/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"sources": ["https://raw.githubusercontent.com/tesseract-ocr/tessdoc/main/images/eurotext.png"], "quality": "fast"}'
  • AI agents (MCP): add the Apify MCP server to Claude, ChatGPT, Cursor or any MCP client and the agent can call this Actor as a tool.
  • No-code: Make, Zapier, n8n, Google Sheets, webhooks and Apify Schedules work out of the box.

Limits

  • Files must be reachable by a direct link. 50 MB per file by default (up to 200 MB) and up to 500 pages per PDF (50 by default).
  • Tested languages: English and other Latin-script languages, Chinese and Japanese. Other scripts are not tested.
  • Handwriting is read only when it is neat.
  • Returns text lines with positions, not rebuilt tables or form fields.

FAQ

Can I upload files instead of giving URLs? Put them in an Apify key-value store (or any bucket, Google Drive/Dropbox direct-download link, your own server) and pass the record URLs.

Is my data used for anything else? No. Files are processed in the run's container and only the results you see in the dataset are stored, in your own Apify account.

How accurate is it? Clean screenshots and scans come out nearly perfect - the sample above averages 0.98 confidence. For blurry phone photos, Japanese or dense Chinese text, or decorative fonts, switch quality to accurate. Every line carries its own confidence, so you can flag uncertain lines for review.

Does it keep layout? Text is returned in reading order with line breaks and blank lines between paragraphs. Use lines[].box if you need exact positions (for example to rebuild tables or to find a value to the right of a label).

Is there a size limit? 50 MB per file by default (up to 200 MB), and up to 500 pages per PDF.

Something is not working? Open an issue on the actor's Issues tab - it is answered quickly.