PDF OCR – Scanned PDF to Searchable PDF & Text
Pricing
from $4.50 / 1,000 scanned page ocrs
PDF OCR – Scanned PDF to Searchable PDF & Text
OCR scanned PDFs and images into searchable PDFs (invisible text layer over the original pages) plus full text, per-page text and Markdown. Tesseract 5, 22 languages, only pages without a text layer are OCR'd, confidence per page. $4.50 per 1,000 OCR pages.
Pricing
from $4.50 / 1,000 scanned page ocrs
Rating
0.0
(0)
Developer
Cemal Atakli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
PDF OCR for scanned documents: give it links to scanned PDFs (or photos/scans of pages) and get back a searchable PDF — the original pages with an invisible, selectable text layer — plus the full text, per-page text, Markdown paragraphs and an OCR confidence score. Built on Tesseract 5 OCR, 22 languages, runs in bulk, pay only for the pages that were actually OCR'd.
- 🔎 Scanned PDF → searchable PDF: Ctrl+F, copy & paste and full-text indexing work in any PDF viewer; the page image is not re-compressed or changed
- 🧠 Smart OCR: in
automode only pages without a text layer are OCR'd; pages that already have text are kept and cost $0.0003 - 🖼️ Images → one searchable PDF: combine JPG, PNG, multi-page TIFF, WebP, HEIC scans into one multi-page PDF (or one PDF per image)
- 📝 Text output: full text, text per page, Markdown with re-flowed paragraphs, word counts, OCR confidence (0–100) per page and per document
- 📦 Files: searchable
.pdf,.txtand.mdsaved in the key-value store with direct download links in every row - 💸 $4.50 per 1,000 OCR pages, errors and blank pages free
What does PDF OCR do?
- Downloads each PDF (Google Drive, Dropbox and GitHub share links work) or image.
- Checks every page: does it already have real text? If not (a scan, a photo, broken font encoding), the page is rendered at 300 DPI and read with Tesseract 5 OCR.
- The recognised words are placed as an invisible text layer exactly over the words on the page (correct for rotated pages and cropped pages), so the file looks the same but becomes searchable and selectable — the same technique professional "OCR PDF" tools use.
- Saves the searchable PDF, the text and Markdown files, and pushes one dataset row per document.
Use cases
- Make scanned contracts, invoices, letters and archives searchable for document management systems, SharePoint, Google Drive or Dropbox search
- OCR PDF batches before feeding them to LLMs, RAG pipelines and vector databases (text + Markdown per page)
- Digitise old books, newspapers, typewritten records and library scans (archive.org, BHL, Wikimedia)
- Turn phone photos of documents into one searchable PDF
- Fix PDFs from scanners that save image-only files, or redo a bad OCR layer (
forcemode) - Legal discovery, compliance and accounting teams who need searchable scanned PDF files at scale
Input example
{"pdfUrls": ["https://archive.org/download/IAPSOP-Plummer_to_Crowley_January_7_1914/IAPSOP-Plummer_to_Crowley_January_7_1914.pdf"],"imageUrls": ["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","https://upload.wikimedia.org/wikipedia/commons/5/55/A_text-book_of_agricultural_entomology_%28Page_192%29_BHL9798403.jpg"],"combineImages": true,"ocrLanguages": ["eng"],"ocrMode": "auto","dpi": 300}
| Field | Default | Meaning |
|---|---|---|
pdfUrls | demo scan | Scanned or mixed PDFs, one searchable PDF each |
imageUrls | – | Page images; combined into one PDF by default (combineImages) |
ocrLanguages | ["eng"] | 22 languages: English, German, French, Spanish, Italian, Portuguese, Dutch, Turkish, Polish, Russian, Ukrainian, Czech, Swedish, Romanian, Arabic, Hindi, Chinese (simplified/traditional), Japanese, Korean, Indonesian, Vietnamese |
ocrMode | auto | auto = OCR only pages without text; force = OCR every page (replaces an existing invisible OCR layer) |
dpi | 300 | OCR render resolution (100–600) |
pageRange | all | e.g. 1-5, 1,3,10-, -3--1 |
saveSearchablePdf, saveTextFiles, includePageTexts | on | What to output |
pdfPassword | – | For encrypted PDFs |
Output example
One row per document (shortened, see SAMPLE_OUTPUT.json):
{"type": "document","status": "ok","url": "https://archive.org/download/IAPSOP-Plummer_to_Crowley_January_7_1914/IAPSOP-Plummer_to_Crowley_January_7_1914.pdf","fileName": "IAPSOP-Plummer_to_Crowley_January_7_1914.pdf","source": "pdf","pageCount": 2,"ocrPages": 2,"textPages": 0,"emptyPages": 0,"ocrConfidence": 70.5,"ocrLanguages": "eng","wordCount": 425,"searchablePdfUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/0001-IAPSOP-Plummer_to_Crowley_January_7_1914-searchable.pdf","searchablePdfBytes": 310343,"textFileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/0001-IAPSOP-Plummer_to_Crowley_January_7_1914.txt","markdownFileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/0001-IAPSOP-Plummer_to_Crowley_January_7_1914.md","text": "... appealed to the writer.\n\nMay I be permitted to express the hope that the ensuing year may witness a oloser relationship ...","pages": [{"pageNumber": 1, "method": "ocr", "confidence": 67.3, "wordCount": 344, "textLayerAdded": true, "text": "..."},{"pageNumber": 2, "method": "ocr", "confidence": 83.9, "wordCount": 81, "textLayerAdded": true, "text": "..."}]}
Failed items are separate rows with type: "error", an errorCode (http-404, not-a-pdf, password-required, invalid-pdf, invalid-image, too-large, …) and a readable message. They are free.
Pricing
Pay per event — no subscription, no compute bill on top:
| Event | Price |
|---|---|
Page read with OCR (ocr-page) | $0.0045 ($4.50 / 1,000 pages) |
Page that already had text (text-page) | $0.0003 |
| Actor start | $0.00005 |
| Blank pages, failed pages, errors, files | free |
How it compares (Apify Store, October 2026, published prices):
| Actor | OCR page | Other charges |
|---|---|---|
| PDF OCR (this Actor) | $0.0045 | searchable PDF, .txt and .md included |
| nerolabs/bulk-ocr-image-pdf-to-text | $0.005 | $0.01 per file export, $0.001 per text-layer page |
| amanatools/pdf-ocr-extractor | $0.015 | $0.005 per document |
| eliai/pdf-text-extractor | $0.015 | $0.003 per PDF |
| ely_source/pdf-ocr | $0.02 | $0.01 per run |
| tanod/pdf-ocr | – | $0.03 per document |
Set a maximum total charge on the run and the Actor stops cleanly when it is reached (finished pages are kept, the current PDF is marked partial).
FAQ
What is a searchable PDF? A PDF where each scanned page image has an invisible text layer on top. It looks exactly like the scan, but you can search, select and copy the text, and search engines / document systems can index it.
Does it change how my PDF looks? No. The original page content stays untouched; only invisible text is added (typically +3–10 KB per page). Images you upload as JPEG are embedded without re-compression.
What about PDFs that are already partly digital? In auto mode, pages with real text are left alone and charged $0.0003; only scanned pages are OCR'd. Use force to OCR everything — an existing invisible OCR layer is replaced, visible digital text is never covered twice.
How accurate is the OCR? Tesseract 5 (LSTM) reads clean printed text very well (the demo book page scores 94/100); ocrConfidence (0–100) per page tells you how sure it was. Typewriter scans, faded copies and handwriting give lower confidence. Handwriting is not supported.
Which languages? 22 languages, several at once (e.g. ["eng","deu"]). Pick only the languages present: each extra one slows OCR.
How fast is it? About 3–4 s per page at the default 2 GB memory. Raise memory to 8 or 16 GB to OCR 2–4 pages in parallel at the same price.
Is my data stored? Files live in your run's key-value store (your Apify account) under your data-retention settings. Nothing is sent to third-party OCR APIs — OCR runs inside the Actor.
Rotated pages? Pages rotated with the PDF /Rotate flag are handled (the text layer is aligned for 0/90/180/270°). A page scanned sideways without a rotate flag is OCR'd as it is displayed.
Use with AI agents / Apify MCP
This Actor works as a tool for AI agents through the Apify MCP server (Claude, Cursor, ChatGPT, LangChain, n8n, Make, Zapier). An agent can call gazidev/pdf-ocr with pdfUrls, read the text / pages[].text fields for reasoning, and hand the user the searchablePdfUrl. Example prompt: "OCR these scanned invoices and give me searchable PDFs and the invoice totals."
API call:
curl -X POST "https://api.apify.com/v2/acts/gazidev~pdf-ocr/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"pdfUrls": ["https://example.com/scan.pdf"], "ocrLanguages": ["eng"]}'
Related Actors
- PDF to Text & Markdown (
gazidev/pdf-text-extractor) — digital PDFs to Markdown with tables and RAG chunks - Image to Text OCR (
gazidev/image-ocr) — text, words and boxes from single images
Built with Tesseract OCR (Apache-2.0) and PDFium via pypdfium2 (Apache-2.0/BSD-3).