PDF Text and Markdown Extractor
Pricing
from $2.40 / 1,000 pdf processeds
PDF Text and Markdown Extractor
Extract public PDF URLs into clean text, Markdown, page content, OCR state, and document metadata for AI and automation workflows.
Pricing
from $2.40 / 1,000 pdf processeds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
PDF Text Extractor: Text and Markdown from Public PDFs
PDF Text and Markdown Extractor turns public PDF links into clean text, pragmatic Markdown, page-level content, and document metadata. Use this PDF text extractor when you need a repeatable dataset for RAG, AI agents, search, research, or document automation.
Provide one or more direct public PDF URLs. Each URL becomes one dataset row, including an explicit failure row when a download or document cannot be read. That makes batch workflows easier to retry without losing successful documents.
What you get
Successful rows can contain:
- Full extracted text for indexing or analysis.
- LLM-ready Markdown for chunking and retrieval workflows.
- Selected page-level text, Markdown, OCR state, and warnings.
- PDF metadata such as title, author, subject, creator, producer, and dates.
- Character and word counts for quick filtering.
- Clear
success,partial, orfailedstatus with an error when applicable.
Who is it for?
Use this Actor if you work with public reports, research papers, manuals, invoices, policy documents, or document archives and need structured text without manually copying from a PDF viewer.
- AI and RAG teams: prepare PDF text and Markdown for retrieval pipelines.
- Researchers: batch extract papers and reports for search or analysis.
- Operations teams: turn public manuals or compliance documents into usable records.
- Developers: call a PDF to Markdown workflow from the Apify API or an MCP client.
Input recipes
Extract text and Markdown from one PDF
{"pdfUrls": ["https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"includeMarkdown": true,"includePages": true,"maxPages": 20}
Extract selected pages only
{"pdfUrls": ["https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"pageRange": "1-3,5","includeMarkdown": true,"includePages": true}
Use OCR for a scanned PDF
{"pdfUrls": ["https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"enableOcr": true,"ocrLanguage": "eng","maxPages": 10}
Example output
{"sourceUrl": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf","fileName": "dummy.pdf","status": "success","pageCount": 1,"extractedPageCount": 1,"metadata": { "title": null, "author": null },"text": "…","markdown": "…","pages": [{ "page": 1, "text": "…", "markdown": "…", "ocrApplied": false, "warnings": [] }],"ocr": { "enabled": false, "language": null, "pagesOcred": 0 },"charCount": 123,"wordCount": 20,"warnings": []}
Input settings
| Input | Description |
|---|---|
pdfUrls | One to 50 direct, public HTTP(S) PDF URLs. |
pageRange | Optional 1-indexed range such as 1-3,5,8-. |
includeMarkdown | Creates a Markdown rendition from extracted text. |
includePages | Includes selected per-page text, Markdown, and OCR state. |
enableOcr | Attempts OCR for selected pages with no usable text layer. |
ocrLanguage | Tesseract language code used when OCR is enabled. |
maxPages | Per-document page limit; use a low value for a fast first run. |
maxConcurrency | Number of PDF URLs handled in parallel (1–5). |
maxPdfSizeMb | Rejects larger downloads before parsing. |
Output fields
| Field | Description |
|---|---|
sourceUrl, fileName | Requested URL and resolved file name. |
status, error, warnings | Explicit success, partial, or failed lifecycle state. |
pageCount, extractedPageCount | Total PDF pages and selected pages handled. |
metadata | PDF title, author, subject, keywords, creator, producer, and dates when embedded. |
text, markdown, pages | Full text, Markdown, and selected page-level content. |
ocr | OCR setting, language, and number of OCRed pages. |
charCount, wordCount, processedAt | Local output measurements and completion timestamp. |
PDF to Markdown for AI workflows
PDF layouts do not reliably carry semantic structure, so Markdown is a practical text rendition rather than a visual reconstruction. Keep includePages on when an agent needs page context, and use pageRange to limit long documents before sending content to a model or vector store.
For scanned documents, enable OCR only when needed. This PDF OCR API option adds processing time but can recover readable text from pages without a native text layer.
Pricing and limits
A valid run has a small start charge and each successfully processed PDF is charged once. See the live Pricing tab for current rates and tier discounts before a large batch.
This version accepts up to 50 public URLs and applies your configured page and file-size limits. It never bypasses logins, paywalls, password protection, or access controls. Use direct PDF download links rather than viewer pages.
API usage
Run the Actor with the Apify API and read the default dataset for one row per URL.
cURL
curl "https://api.apify.com/v2/acts/fetch_cat~pdf-text-markdown-extractor/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"pdfUrls":["https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"includeMarkdown":true}'
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/pdf-text-markdown-extractor').call({pdfUrls: ['https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf'],includeMarkdown: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("fetch_cat/pdf-text-markdown-extractor").call(run_input={"pdfUrls": ["https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"includeMarkdown": True,})print(client.dataset(run["defaultDatasetId"]).list_items().items)
MCP and agent use
Use the same input in an MCP-enabled agent through the Apify MCP server: open this Actor's tools. The result dataset provides text, Markdown, pages, and status fields for the next step in an automated workflow.
For Claude Code, add the scoped server with:
$claude mcp add apify-pdf-text -- npx -y @apify/actors-mcp-server --tools fetch_cat/pdf-text-markdown-extractor
For a JSON MCP client configuration:
{"mcpServers": {"apify-pdf-text": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--tools", "fetch_cat/pdf-text-markdown-extractor"]}}}
Example prompts: “Extract the first five pages from this public PDF as Markdown” and “Run the PDF text extractor, then summarize only rows where status is success.”
FAQ
What data can I export with pdf text extractor? You can export full text, Markdown, selected pages, OCR state, metadata, counts, warnings, and an explicit status for every requested URL.
Can I run PDF Text and Markdown Extractor through an API, schedule, or MCP client? Yes. The same JSON input works with the Apify API, scheduled Actor runs, and an MCP-enabled client.
How much does it cost to use PDF Text and Markdown Extractor? Pricing is per valid run and successfully processed PDF. See the live Pricing tab for current tier rates.
Can it read scanned PDFs? Yes. Enable enableOcr; pages without usable native text are sent to local OCR.
What happens when one URL fails? It receives a failed row while the remaining public URLs continue.
Can I upload a private file or password? No. This version deliberately supports public PDF URLs only.
Tips
- Start with one direct URL and a low
maxPagesvalue to verify the output shape. - Use
pageRangefor large documents when only a chapter or appendix matters. - Preserve
sourceUrlandprocessedAtwhen loading results into a downstream dataset. - Filter on
statusbefore sending content into a production AI workflow.
Related Actors
- arXiv Paper Search Scraper
- Google Search Results Scraper
- Google Images Scraper
- Bulk URL Status Checker
- Web Page to Markdown Extractor
Support
For a reproducible problem, include the public URL, input options, and the error row when opening an issue on the Actor page.