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 with a local open-source OCR engine (PP-OCR). Line-level bounding boxes, confidence scores and clean reading-order text. No Google, no API key. Pay only per page read.

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

2

Total users

1

Monthly active users

3 hours 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 you can use it for

  • 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.

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.

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.

Pricing

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.

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.