PDF to Text & Markdown Converter - Bulk Extractor for RAG
Pricing
$2.00 / 1,000 pdf converteds
PDF to Text & Markdown Converter - Bulk Extractor for RAG
Convert PDF URLs into clean plain text and LLM-ready Markdown with headings and lists, plus metadata and per-page text. Bulk, fast, page ranges, password PDFs. $2 per 1,000 PDFs.
Pricing
$2.00 / 1,000 pdf converteds
Rating
0.0
(0)
Developer
Wood Between Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Features
Share
PDF to Text & Markdown Converter: Bulk PDF Extractor for LLMs & RAG
Turn PDF URLs into clean plain text and LLM-ready Markdown in bulk. Headings, paragraphs and bullet lists are rebuilt from the PDF layout. Metadata and optional per-page text come with every document. No API key and no setup.
Why use it?
- Markdown built for AI. Headings are detected from font sizes, broken lines are joined back into paragraphs, lists are restored and page numbers are dropped. You can feed the output straight to embeddings, vector databases or prompts.
- Bulk and fast. Process many PDFs in parallel. A typical 15-page paper takes about a second.
- Page ranges. Extract
1-5, 8, 12-instead of paying for a 400-page manual when you need three pages. - Password-protected PDFs are supported.
- Rich metadata: title, author, subject, keywords, creator, producer, PDF version, and ISO creation and modification dates.
- Scanned-PDF detection. Image-only documents are flagged with
likelyScanned: true, so you know which ones need OCR. - Low, flat price: $2 per 1,000 PDFs. Failed downloads are never charged.
Use cases
- RAG pipelines and AI agents (LangChain, LlamaIndex, custom GPTs and MCP clients)
- Research: batch-convert arXiv papers, reports and theses
- Legal and compliance: make filings, policies and contracts searchable
- Data pipelines: send text to Make, Zapier, n8n, Google Sheets or your own code through the Apify API
Input
| Field | Default | Notes |
|---|---|---|
urls | — | Direct links to .pdf files |
includeMarkdown | true | Markdown rendition |
includeFullText | true | Plain text |
includePerPageText | false | pages: [{page, text}] |
pageRange | all | e.g. 1-5, 8, 12- |
maxPagesPerPdf | 500 | Safety cap |
pdfPassword | — | For protected files (stored as a secret) |
maxConcurrency | 4 | Parallel PDFs |
maxPdfSizeMb | 100 | Larger files are skipped and not charged |
Example
{ "urls": ["https://arxiv.org/pdf/1706.03762"], "pageRange": "1-5", "includePerPageText": true }
Output
{"url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf","status": "success","pageCount": 6,"extractedPageCount": 6,"metadata": { "title": "Form W-9 (Rev. March 2024)", "author": "SE:W:CAR:MP", "creationDate": "2024-03-...", "producer": "..." },"wordCount": 6284,"likelyScanned": false,"text": "Form W-9 (Rev. March 2024) ...","markdown": "## Form W-9\n\n# Request for Taxpayer Identification Number and Certification\n\n..."}
Failed items have status: "failed" and a clear error, such as HTTP 404, not a PDF, wrong password or too large.
Pricing
$2.00 per 1,000 PDFs converted ($0.002 per PDF). Platform usage is included. Failed PDFs are free. Set a maximum charge per run if you want a hard cap.
Limits
- Tables come out as text lines, not cells. Images aren't extracted.
- Scanned image-only PDFs have no text layer. They're flagged rather than OCRed.
- Very large documents (over about 3 million characters) are truncated to fit one dataset row and flagged with
truncated: true. UsepageRangeto split them.
Responsible use
Only process PDFs you have the right to access. The Actor doesn't bypass logins, paywalls or DRM.
Support
Want OCR, table extraction or file uploads? Open an issue on the Issues tab. We read every one.
Call it from curl, JavaScript or Python
You can run this Actor in the Apify Console with no code, or call it as an API from curl, JavaScript or Python. Replace YOUR_TOKEN with an Apify API token.
curl
curl "https://api.apify.com/v2/acts/wood-between-studio~pdf-to-markdown/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://arxiv.org/pdf/1706.03762"], "pageRange": "1-5"}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('wood-between-studio/pdf-to-markdown').call({"urls": ["https://arxiv.org/pdf/1706.03762"],"pageRange": "1-5"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("wood-between-studio/pdf-to-markdown").call(run_input={"urls": ["https://arxiv.org/pdf/1706.03762"],"pageRange": "1-5"})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
You can also schedule the Actor, cap the spend per run, and send the dataset to Google Sheets, Slack or a webhook from the Console. Store page: apify.com/wood-between-studio/pdf-to-markdown.