Image & Scanned PDF OCR: Image to Text (Tesseract) avatar

Image & Scanned PDF OCR: Image to Text (Tesseract)

Pricing

$3.00 / 1,000 page read (ocr)s

Go to Apify Store
Image & Scanned PDF OCR: Image to Text (Tesseract)

Image & Scanned PDF OCR: Image to Text (Tesseract)

Image to text: reads the text in images, screenshots and scanned PDFs with Tesseract OCR, offline: no AI, no third-party API. Plain text, per-page confidence, and optional words with bounding boxes, in 27 languages. Respects robots.txt and PDF permissions. Failed files are free.

Pricing

$3.00 / 1,000 page read (ocr)s

Rating

0.0

(0)

Developer

WrenTools

WrenTools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Image to text: read the text in photos, screenshots, scanned letters, receipts, forms and scanned PDFs. Give it links to image or PDF files, or send files inline as base64, and get back for each one: the text, line by line, a confidence score per page, and optionally every word with its position on the page.

Everything runs inside the Actor with Tesseract OCR and its tessdata_fast language models (both Apache-2.0). Your files are not sent to any AI model or third-party API, and the result for the same file is the same every time.

If your PDFs already have a text layer (they were made by a word processor, not a scanner), the PDF to Text & Markdown Extractor reads them faster and for less. Its pagesWithoutText field tells you which pages need OCR.

Code examples, in Python and Node, each run against this Actor before publishing: scanned PDFs and images from links, and a folder of screenshots into one searchable CSV (the files are sent inline, so they need not be online).

What you get

  • Text for each file, one line per printed line, with a blank line between paragraphs and blocks.
  • Confidence: meanConfidence (0-100, weighted by characters) for the file and for each page, and lowConfidencePages listing pages below 60, so you can send those for a human look.
  • Per-page results (includePages): text, confidence and the page's pixel size.
  • Words with bounding boxes (includeWords): each word's text, confidence, left, top, width and height in pixels, for parsing invoices and forms by position.
  • 27 languages: English, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Czech, Swedish, Danish, Norwegian, Finnish, Turkish, Romanian, Hungarian, Greek, Russian, Ukrainian, Vietnamese, Indonesian, Japanese, Chinese (simplified and traditional), Korean, Arabic and Hindi. Up to 3 per run.
  • Files: PNG, JPEG, TIFF (every page of a multi-page TIFF), GIF, BMP, WebP and PDF (every page rendered at pdfDpi). Photos are turned upright from their EXIF orientation; transparent images are read on white.
  • pagesWithoutText lists pages where no text was found, and downscaledPages lists images over 40 megapixels that were scaled down before reading.

Failed files are reported in the dataset with a reason and are not charged: fetch-failed, file-too-large, unsupported-file, unreadable-image, image-too-large, unreadable-pdf, robots-disallowed, password-required, extraction-not-permitted, ocr-timeout, ocr-failed, invalid-base64.

Respectful by design

  • Only the files you name are downloaded, one request each. The site's robots.txt is read first and obeyed, and downloads from one site are spaced (500 ms by default). No proxy, no browser, no login.
  • PDF permissions are honoured. A PDF that needs a password is refused (the Actor takes no password), and so is a PDF whose owner has forbidden copying or extracting its text: reading its pixels back would be the same extraction.
  • Only public internet addresses are fetched: a URL or redirect into a private, loopback or link-local network is refused.

Process only documents you have the right to use.

Input

FieldTypeDefaultNotes
fileUrlsstring[]links to images or PDFs
filesBase64arraybase64 strings, or {"name": "scan.png", "data": "<base64>"}; a data: prefix is fine
languagesstring[]["eng"]1 to 3 codes, e.g. ["eng", "deu"]
pageSegmentationstringautoauto, singleColumn, singleBlock (receipts, labels), sparse (forms, photos)
includePagesbooleanfalseper-page text and confidence
includeWordsbooleanfalsewords with bounding boxes (adds pages too)
pdfDpiinteger30072 to 600; raise it for small print
maxPagesPerFileinteger100longer files are marked truncated
maxFileSizeMbinteger50larger downloads stop, uncharged
requestDelayMsinteger500pause between downloads from one site

Give fileUrls, filesBase64 or both. Results come back in input order.

Output

One dataset item per file (this is the Store example: a tilted, speckled phone scan of a notice):

{
"source": "https://example.com/scans/notice.png",
"url": "https://example.com/scans/notice.png",
"finalUrl": "https://example.com/scans/notice.png",
"fileName": "notice.png",
"status": "ok",
"error": null,
"fileType": "image",
"pageCount": 1,
"pagesProcessed": 1,
"truncated": false,
"meanConfidence": 96.4,
"pagesWithoutText": [],
"lowConfidencePages": [],
"downscaledPages": [],
"charCount": 194,
"wordCount": 31,
"text": "NOTICE OF SCHEDULED MAINTENANCE\nWater service on Alder Street will be off\n\non Tuesday 4 November from 9:00 to 13:00.\n..."
}

A failed file has "status": "error" and "error": {"code": "password-required", "message": "..."}. If a result is too large for one dataset item (over 8 MB), its text and pages are stored in the run's key-value store, and the item carries fullOutputKey and fullOutputUrl. The run's SUMMARY record counts files read and failed, and pages read.

Pricing

Pay per event, no start fee, and nothing for files that fail:

EventPricePer 1,000
page-ocr (one image, or one page of a PDF or TIFF, read)$0.003$3.00

A single image costs $0.003; a 20-page scanned PDF costs $0.06. When you set a maximum charge for a run, the Actor stops before a file it cannot pay for, and reads only the pages the remainder covers (the item is marked truncated).

Limits

  • Tesseract reads printed text well and handwriting poorly. Low-contrast photos, heavy skew and decorative fonts lower the confidence; lowConfidencePages shows where.
  • Tables come out as text lines; their cell structure is not rebuilt. Use includeWords positions to rebuild columns.
  • A page that takes over 180 seconds is stopped and reported as ocr-timeout. Very large pages are scaled down to 40 megapixels first.