PDF to Markdown & Text Converter: Word, Excel, PPT, HTML, RAG
Pricing
from $3.00 / 1,000 documents
PDF to Markdown & Text Converter: Word, Excel, PPT, HTML, RAG
Convert PDF, Word (DOCX), PowerPoint (PPTX), Excel (XLSX), CSV and HTML to clean Markdown and text, plus RAG-ready chunks for LLMs and AI agents. $3 per 1,000 documents.
Pricing
from $3.00 / 1,000 documents
Rating
0.0
(0)
Developer
Giorgos Myrianthous
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Convert PDF to Markdown (and Word, PowerPoint, Excel, CSV, HTML to Markdown/text) in bulk, with heading-aware RAG chunks for LLMs, vector databases and AI agents.
💲 $3 per 1,000 documents (10 pages included per document, then $0.30 per 1,000 extra pages). Failed files are free. Pay only for results. No subscription, and the Apify free plan's monthly credit covers small jobs.
Also known as: PDF to Markdown, PDF to text, PDF parser, Word to Markdown, DOCX to Markdown, PPTX to Markdown, Excel to Markdown, HTML to Markdown, document parser for RAG, MarkItDown alternative.
Quick start
- Click Start. The prefilled input works as is.
- Or paste this input (JSON tab):
{"documentUrls": [{"url": "https://arxiv.org/pdf/1706.03762"}],"chunksAsSeparateItems": true}
Output (one dataset item):
{"url": "https://arxiv.org/pdf/1706.03762","status": "ok","format": "pdf","title": "Attention Is All You Need","pages": 15,"wordCount": 6012,"markdownUrl": "https://api.apify.com/v2/key-value-stores/…/records/1706.03762v7.md"}
Use it from the API, AI agents (MCP), n8n, Make or Zapier
curl -X POST "https://api.apify.com/v2/acts/gmyri~doc-to-markdown/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"documentUrls":[{"url":"https://arxiv.org/pdf/1706.03762"}]}'
- AI agents / MCP: connect
https://mcp.apify.com/?actors=gmyri/doc-to-markdownto Claude, Cursor, ChatGPT or any MCP client. The input schema is fully described for tool calling. - Python:
ApifyClient(token).actor("gmyri/doc-to-markdown").call(run_input={...}) - n8n / Make / Zapier: use the Apify "Run Actor" action with
gmyri/doc-to-markdown, then read the dataset items.
Quick FAQ
- Does it OCR scanned PDFs? No. This Actor reads the text layer. For scanned PDFs and images use OCR Image to Text & Scanned PDF.
- Can I convert private files? Yes, if you pass a signed or temporary URL (S3, GCS, Dropbox, Google Drive direct download, Apify key-value store).
- What if I set a spending limit? The Actor stops cleanly at your Max cost per run and you're never charged above it.
Details
Turn PDF, DOCX, PPTX, XLSX, CSV and HTML files into clean Markdown and heading-aware chunks ready for embeddings, vector databases and LLM prompts. One Actor for every office format, priced per document, with no subscription. It works well as a tool for AI agents through the Apify MCP server.
What it does
- One input, many formats. Paste file URLs. The Actor detects the format from the file's magic bytes, then falls back to Content-Type and file extension.
- Structure-preserving Markdown:
- Word headings become
#/##. Bold and italic, bullet lists and tables are kept. - PowerPoint becomes one
## Slide N: Titlesection per slide, with bullet levels, tables and speaker notes. - Excel and CSV become one Markdown table per sheet.
- HTML is stripped of navigation, scripts and footers.
- PDF text is re-flowed into paragraphs. Hyphenation and bullets are fixed, and page markers are kept (
<!-- page 3 -->).
- Word headings become
- RAG chunks out of the box. Sections are split on headings, then on paragraphs and sentences, with configurable size and overlap. Every chunk carries its
headingPath(for exampleMethods > Training Data) for better retrieval. - Outputs: a dataset row per document (metadata, Markdown, chunks), an optional dataset row per chunk, and a
.mdfile per document in the key-value store. - Fair billing. Failed downloads and corrupt files are never charged. A per-page cap (
maxPagesPerDocument) keeps the cost of huge PDFs predictable.
Supported formats
| Format | Extensions | Notes |
|---|---|---|
.pdf | Text-layer PDFs (poppler). Scanned PDFs return a warning; OCR is not included. | |
| Word | .docx | Headings, lists, bold/italic, tables, core properties |
| PowerPoint | .pptx | Slides, bullet levels, tables, speaker notes |
| Excel | .xlsx, .xlsm | Every sheet becomes a table (formulas are read as their cached values) |
| CSV / TSV | .csv, .tsv | Delimiter auto-detected (, ; tab ` |
| HTML | .html, .htm | Main/article content only |
| Text | .md, .txt, .json | Passed through (JSON is pretty-printed in a code block) |
Legacy binary formats (.doc, .ppt, .xls) are not supported. Save them as the modern format first.
Input
{"documentUrls": [{ "url": "https://arxiv.org/pdf/1706.03762" },{ "url": "https://example.com/files/q3-report.docx" }],"includeChunks": true,"chunkSize": 2000,"chunkOverlap": 200,"chunksAsSeparateItems": false,"maxPagesPerDocument": 0}
| Field | Default | Description |
|---|---|---|
documentUrls | – | Public file URLs, or Apify key-value-store record URLs from your account |
includeChunks | true | Produce RAG chunks |
chunkSize / chunkOverlap | 2000 / 200 | Target characters per chunk and overlap between chunks |
chunksAsSeparateItems | false | One dataset row per chunk (best for vector-DB integrations) |
includeMarkdownInDataset | true | Include the full Markdown in the dataset row |
saveMarkdownFiles | true | Save <name>-<hash>.md to the key-value store |
maxPagesPerDocument | 0 (all) | Convert only the first N PDF pages |
maxRowsPerTable | 500 | Truncate large sheets and tables |
includeSpeakerNotes | true | Include PowerPoint notes |
maxFileSizeMb | 50 | Skip larger files (not charged) |
Output
One dataset item per document:
{"url": "https://arxiv.org/pdf/1706.03762","status": "ok","fileName": "1706.03762v7.pdf","format": "pdf","title": "Attention Is All You Need","pages": 15,"wordCount": 6482,"charCount": 40306,"metadata": { "Creator": "LaTeX with hyperref", "Pages": "15" },"warnings": [],"markdownKey": "1706.03762v7-dd93e904.md","markdown": "## Attention Is All You Need\n\n...","chunkCount": 47,"chunks": [{ "index": 2, "headingPath": "Abstract", "text": "## Abstract\n\nThe dominant ...", "charCount": 1987 }]}
Failed files get "status": "error" and an error message, and are free.
Pricing (pay per event)
| Event | Price | When |
|---|---|---|
document-converted | $0.003 | Each successfully converted file. Includes up to 10 pages, slides or sheets, plus chunking. |
extra-page | $0.0003 | Each PDF page, slide or sheet beyond the first 10 |
apify-actor-start | $0.00005 | Platform default, once per run |
Examples: 1,000 Word documents cost $3.00. A 15-page PDF costs $0.003 + 5 × $0.0003 = $0.0045. You can set a maximum cost per run, and the Actor stops cleanly when the limit is reached.
Use with AI agents (MCP)
Add the Actor to the Apify MCP server, and your agent (Claude, Cursor, ChatGPT and others) can call it as a tool:
https://mcp.apify.com/?tools=<your-username>/doc-to-markdown
The Actor uses pay-per-event pricing only, runs with limited permissions and does not use Standby mode, so it is eligible for Apify agentic payments (an agent can pay per run without an Apify account).
API example
curl -X POST "https://api.apify.com/v2/acts/<your-username>~doc-to-markdown/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"documentUrls":[{"url":"https://arxiv.org/pdf/1706.03762"}],"chunksAsSeparateItems":true}'
Limitations
- OCR is not included. Scanned or image-only PDFs produce a warning and little text.
- PDF headings are detected heuristically (pdftotext gives no font sizes). Tables inside PDFs come out as text, not Markdown tables.
- Only process documents you have the right to use. The Actor downloads only the URLs you give it and does not crawl.
Changelog
- 0.1: First release. PDF, DOCX, PPTX, XLSX, CSV/TSV, HTML, TXT/MD/JSON. RAG chunking. Pay-per-event pricing.