PDF to Text & Markdown OCR — Scanned PDF, DOCX, PPTX to Text avatar

PDF to Text & Markdown OCR — Scanned PDF, DOCX, PPTX to Text

Pricing

Pay per event

Go to Apify Store
PDF to Text & Markdown OCR — Scanned PDF, DOCX, PPTX to Text

PDF to Text & Markdown OCR — Scanned PDF, DOCX, PPTX to Text

PDF to text and PDF to Markdown converter with OCR for scanned PDFs (27 languages). Also DOCX, PPTX, XLSX, EPUB and images to text. LLM-ready. $0.003/document + $0.0003/text page (first 30 only) or $0.002/OCR page. Input: {"url":"https://arxiv.org/pdf/1706.03762"}.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Isaac

Isaac

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Security

Limited permissions

Share

PDF to Text & PDF to Markdown Converter with OCR (Scanned PDF, DOCX, PPTX)

Convert PDFs, Word (DOCX), PowerPoint (PPTX), Excel (XLSX), EPUB e-books, HTML files 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)
  • 📊 PowerPoint (PPTX) to Markdown with slide markers, Excel (XLSX) to Markdown tables (one section per sheet), EPUB e-books and HTML files to clean Markdown (powered by the open-source MIT-licensed markitdown library)
  • 🧩 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

  1. Add one or more document URLs to Document URLs (the form is prefilled with a working example).
  2. Pick Markdown + plain text, Markdown only or Plain text only.
  3. Leave OCR = Auto (recommended). Pages that already contain text are read directly; only scanned pages are OCRed.
  4. 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.

Use in ChatGPT or Claude

Add this tool to your AI assistant as a custom connector (MCP server) with this URL:

https://mcp.apify.com?tools=poised_beardlichen/pdf-to-text-markdown-ocr
  • ChatGPT: Settings → Apps & Connectors → Create (needs Developer mode), paste the URL, choose OAuth and sign in to Apify.
  • Claude: Settings → Connectors → Add custom connector, paste the URL, then click Connect.

Runs go on your own Apify account at the same per-event prices, so the free plan's monthly credit applies.

Try it free

Apify's free plan includes $5 of usage every month, no credit card. That covers roughly 1,500 one-page PDFs or about 2,000 scanned (OCR) pages a month on this Actor, so you can test it on your real documents before paying anything.

Pricing

Pay-per-event, no subscription and no start fee:

EventPrice
Document converted$0.003
Text page (from the PDF's own text layer; per Word page; per PowerPoint slide; per Excel sheet; per ~3,000 characters of EPUB/HTML), first 30 text pages per document only$0.0003
OCR page (scanned page or image that produced text)$0.002

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.023
  • 500-page digital PDF: $0.012
  • 20-slide PowerPoint deck: $0.009
  • 3-sheet Excel workbook: $0.0039
  • Full EPUB novel (~160k characters): $0.012 (text pages capped at 30)
  • 1,000 single-page receipt photos: $5.00

How does the price compare?

Totals calculated from each Actor's public Apify Store pricing (free-tier prices, checked 19 October 2026):

Actor10-page digital PDF10-page scanned PDF
This Actor$0.006$0.023
amanatools/pdf-ocr-extractor$0.017$0.157
ely_source/pdf-ocrOCR only$0.21
nerolabs/bulk-ocr-image-pdf-to-textOCR only$0.05
nidamindllc/doc-ocrOCR only$0.04

This Actor handles digital PDFs, scans, DOCX, PPTX, XLSX, EPUB, HTML 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.

PDF to text

Extract plain text from any PDF URL, in bulk, with reading order kept on multi-column pages.

Scanned PDF to text (PDF OCR)

Image-only or scanned PDFs are OCR'd automatically in 27 languages; you only pay the OCR rate for pages that need it.

PDF to Markdown for LLMs and RAG

Headings, lists and tables come out as Markdown, ready to chunk into a vector database (Pinecone, Qdrant, pgvector) or to send to ChatGPT, Claude or a LangChain/LlamaIndex pipeline.

DOCX to Markdown, PPTX to Markdown, XLSX to Markdown

Word, PowerPoint and Excel files become clean Markdown (one section per slide or sheet).

Use it in n8n, Make or Zapier

Call the actor with the Apify node or app and pass a PDF URL (for example a Google Drive or Dropbox share link); the text comes back in the dataset.

FAQ

How do I convert a scanned PDF to text? Paste its URL. Pages without a text layer are OCR'd automatically; no settings needed.

Can it handle thousands of PDFs? Yes. Add many URLs to one run; each document is processed independently and broken links are free.

Is it an alternative to Adobe, LlamaParse or Google Document AI? For text and Markdown extraction, yes, at $0.003 per document plus a few tenths of a cent per page, with no subscription. It does not do form-field or handwriting extraction.

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.

Does it convert web pages? HTML files whose URL ends in .html or .htm are converted. Other URLs that return a web page are skipped free of charge unless you turn on convertHtml, so a wrong link never costs you anything. Broken links, unsupported files and files with no text are never charged.

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 ApifyClient
client = 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:

  1. Start the run: POST https://api.apify.com/v2/acts/poised_beardlichen~pdf-to-text-markdown-ocr/runs with input such as {"url": "https://arxiv.org/pdf/1706.03762"}. The response contains data.id (the run ID) and data.defaultDatasetId.
  2. Wait for it to finish: poll GET https://api.apify.com/v2/actor-runs/<runId>?waitForFinish=60 until status is SUCCEEDED.
  3. 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

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.