PDF to Text & Markdown Converter with OCR (DOCX, Images)
Pricing
Pay per event
PDF to Text & Markdown Converter with OCR (DOCX, Images)
Use this when you need text or LLM-ready Markdown from a PDF, DOCX or image URL, incl. scanned pages (OCR, 27 languages). $0.003/document + $0.0003/text page (first 30) or $0.005/OCR page. Input: {"url":"https://arxiv.org/pdf/1706.03762"}. Output: markdown, text, pageCount, ocrPages, metadata.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Isaac
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
PDF to Text & Markdown Converter with OCR
Convert PDFs, Word documents (DOCX) and images into clean plain text and LLM-ready Markdown, in bulk, with automatic OCR for scanned pages. Paste a list of document URLs and get back one tidy result per document (or per page): full text, Markdown with headings and lists, page counts, OCR stats and document metadata. Built for RAG pipelines, vector databases, AI agents, search indexing, data extraction and archiving.
- 📄 PDF to text and PDF to Markdown: keeps reading order on multi-column layouts (research papers, reports, newsletters)
- 🔍 Automatic OCR of scanned or image-only pages, and of pages whose fonts produce garbled text. 27 OCR languages
- 📝 DOCX to Markdown (Word) and image to text (PNG, JPEG, TIFF incl. multi-page, WebP, BMP, GIF)
- 🧩 One result per page option, so you can chunk and cite page numbers in RAG
- 🧹 Strips repeating headers, footers and page numbers; joins hyphenated words; turns dot leaders into clean tables of contents
- 🏷️ Metadata: title, author, subject, keywords, creator, producer, creation/modification dates, PDF version, page size, encryption
- 🔗 Works with direct links, Google Drive and Dropbox share links. Handles redirects, slow servers and retries
- 💸 Pay only for what converts. Broken links, web pages, unsupported or oversized files cost nothing. No monthly fee, no start fee
What can I use it for?
- Feed documents to ChatGPT, Claude, LangChain, LlamaIndex or a vector database. Markdown output keeps structure, which makes embeddings and answers better than raw text.
- Digitise scanned archives, such as old contracts, government releases, invoices, forms and books, into searchable text.
- Monitor and index reports, like annual reports, central-bank statements, tenders and research papers, alongside a scraper.
- Bulk-extract text from thousands of PDFs found by another Apify Actor (pass its dataset URLs straight in).
How to use it
- Add one or more document URLs to Document URLs (the form is prefilled with a working example).
- Pick Markdown + plain text, Markdown only or Plain text only.
- Leave OCR = Auto (recommended). Pages that already contain text are read directly; only scanned pages are OCRed.
- Click Start. Results appear in the Output tab, and you can export them as JSON, CSV, Excel or HTML, or read them through the API.
Input example
{"urls": ["https://arxiv.org/pdf/1706.03762","https://github.com/tesseract-ocr/test/raw/main/testing/phototest.tif"],"outputFormat": "both","outputMode": "document","ocrMode": "auto","ocrLanguages": ["eng"]}
Output example (one document)
{"url": "https://arxiv.org/pdf/1706.03762","success": true,"fileType": "pdf","pageCount": 15,"textPages": 15,"ocrPages": 0,"words": 6280,"markdown": "### Attention Is All You Need\n\nAshish Vaswani ...\n\n#### Abstract\n\nThe dominant sequence transduction models ...","text": "Attention Is All You Need\n\nAshish Vaswani ...","metadata": { "title": null, "producer": "pdfTeX-1.40.25", "pdfVersion": "1.5", "encrypted": false, "pageFormat": "letter" },"durationMs": 312}
In page mode you get one item per page with page, ocr, ocrConfidence, text and markdown. Turn on Also save .md / .txt files to get downloadable files in the key-value store. Very large documents are always saved as files, and their dataset text is shortened.
Pricing
Pay-per-event, no subscription and no start fee:
| Event | Price |
|---|---|
| Document converted | $0.003 |
| Text page (from the PDF's own text layer, or per Word page), first 30 text pages per document only | $0.0003 |
| OCR page (scanned page or image that produced text) | $0.005 |
Long digital documents are capped. You pay for at most 30 text pages per document, so a 500-page book costs the same as a 30-page report.
Examples:
- 10-page digital PDF: $0.006
- 10-page scanned PDF: $0.053
- 500-page digital PDF: $0.012
- 1,000 single-page receipt photos: $8.00
How does the price compare?
Totals calculated from each Actor's public Apify Store pricing (free-tier prices, checked 19 October 2026):
| Actor | 10-page digital PDF | 10-page scanned PDF |
|---|---|---|
| This Actor | $0.006 | $0.053 |
| amanatools/pdf-ocr-extractor | $0.017 | $0.157 |
| ely_source/pdf-ocr | OCR only | $0.21 |
| nerolabs/bulk-ocr-image-pdf-to-text | OCR only | $0.05 |
| nidamindllc/doc-ocr | OCR only | $0.04 |
This Actor handles digital PDFs, scans, DOCX and images in one run, and digital pages are capped at 30 per document.
Blank pages are not charged as OCR pages, and failed documents are free. Set Maximum cost per run in Apify and the Actor stops cleanly at your limit. It never runs over.
Tips for best results
- Use OCR languages that match the document. 1–3 languages give the best speed and accuracy.
- Raise OCR resolution to 300 DPI for tiny print, or lower it to 150 for large, clean scans.
- Use Max pages per document to sample huge files cheaply.
- Use OCR = Never for pure digital PDFs when you want the lowest price and the fastest speed.
FAQ
Does it work on scanned PDFs? Yes. Auto mode detects pages without a usable text layer and runs Tesseract 5 (LSTM) OCR on them. It also catches PDFs whose embedded fonts produce garbage characters.
Can it read tables? Table text is extracted in reading order, but it is not rebuilt as Markdown tables.
Password-protected PDFs? PDFs that open without a password (owner-password restrictions only) work. PDFs that need a password to open are reported as errors and are not charged.
Is my data stored? Files are downloaded into the run's temporary container and deleted after conversion. Results live only in your own Apify storage.
Can AI agents use it? Yes. It runs with limited permissions and simple pay-per-event pricing, and it works from the Apify API, MCP server and integrations (Make, Zapier, n8n, LangChain).
How much does a huge PDF cost? Text pages are capped at 30 per document, so a 500-page digital PDF costs $0.012 in total. OCR pages are always charged per page, because each one needs real compute.
What file size is supported? Up to 500 MB per file (default limit 100 MB), with thousands of pages per document.
Which languages can OCR read? English, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Swedish, Danish, Norwegian, Finnish, Czech, Turkish, Russian, Ukrainian, Greek, Arabic, Hebrew, Hindi, Vietnamese, Indonesian, Thai, Chinese (Simplified and Traditional), Japanese and Korean.
Use it from the API
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("poised_beardlichen/pdf-to-text-markdown-ocr").call(run_input={"urls": ["https://arxiv.org/pdf/1706.03762"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["markdown"][:500])
cURL (waits for the run and returns the results)
curl -X POST "https://api.apify.com/v2/acts/poised_beardlichen~pdf-to-text-markdown-ocr/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"urls": ["https://arxiv.org/pdf/1706.03762"]}'
Use with AI agents and RAG (MCP)
Give Claude, Cursor or any MCP client the ability to read PDFs through the Apify MCP server:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=poised_beardlichen/pdf-to-text-markdown-ocr","headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }}}}
For RAG, turn on page mode. Each page becomes its own item with a page number, ready to chunk, embed and cite. It also works with LangChain's ApifyWrapper, LlamaIndex, Make, Zapier and n8n.
Calling it from an AI agent or a script (async pattern)
A single text PDF usually finishes in under 30 seconds. Long scanned PDFs (OCR) take longer, roughly 1–3 seconds per page. The Apify MCP server waits only about 30–45 seconds for a run before it returns. So for batches, slow pages, or whenever a call returns before the run is done, start the run and fetch the results afterwards rather than waiting on it:
- Start the run:
POST https://api.apify.com/v2/acts/poised_beardlichen~pdf-to-text-markdown-ocr/runswith input such as{"url": "https://arxiv.org/pdf/1706.03762"}. The response containsdata.id(the run ID) anddata.defaultDatasetId. - Wait for it to finish: poll
GET https://api.apify.com/v2/actor-runs/<runId>?waitForFinish=60untilstatusisSUCCEEDED. - Fetch the results:
GET https://api.apify.com/v2/datasets/<defaultDatasetId>/items?clean=true.
Send your token as Authorization: Bearer <APIFY_TOKEN>. Through MCP, if the call returns a run ID instead of results, use the server's run-status and dataset tools (e.g. get-actor-run, then get-dataset-items) with that ID. For small, quick jobs you can use the synchronous endpoint POST /v2/acts/poised_beardlichen~pdf-to-text-markdown-ocr/run-sync-get-dataset-items instead, which waits for up to 300 seconds.
Other tools by us
- Website Screenshot & PDF API: turn any web page into a PDF or screenshot with cookie banners removed, then convert that PDF to text here.
- Bulk Email Verifier & Validator: check email lists for valid syntax, MX records, disposable and role addresses and typos, at $0.30 per 1,000 emails.
- Image to Text OCR API: extract text from PNG, JPEG, TIFF and WebP images in 27 languages, at $1.50 per 1,000 images.
- Bulk PageSpeed & Lighthouse Checker: Lighthouse scores, Core Web Vitals and top fixes for many URLs on mobile and desktop, from $0.005 per audit.
- Website Screenshot & PDF for AI Agents: a lightweight copy of the screenshot tool for agents and one-off calls (no Standby). Same prices, starting at $0.0015 per screenshot.
Support
Found a document that doesn't convert well? Open an issue on the Actor's Issues tab with the URL. We usually fix problems within a few days.