PDF to Markdown: Word, Excel, PowerPoint & RAG Chunks avatar

PDF to Markdown: Word, Excel, PowerPoint & RAG Chunks

Pricing

from $0.35 / 1,000 pages

Go to Apify Store
PDF to Markdown: Word, Excel, PowerPoint & RAG Chunks

PDF to Markdown: Word, Excel, PowerPoint & RAG Chunks

PDF to Markdown converter for RAG: turn PDF, DOCX, XLSX and PPTX files into clean Markdown, plain text or chunks with page numbers and heading paths. Tables become Markdown tables. From $0.35 per 1,000 pages ($0.50 on the Free plan, less on paid plans); pages without text are free.

Pricing

from $0.35 / 1,000 pages

Rating

0.0

(0)

Developer

Otama Labs

Otama Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

PDF to Markdown converter for RAG and LLM apps: turn PDF, DOCX, XLSX and PPTX files into clean Markdown, plain text or RAG-ready chunks in one Actor. Headings are rebuilt from the layout, ruled tables become Markdown tables, and every chunk keeps its page numbers and heading path, so your LLM app can cite where an answer came from.

From $0.35 per 1,000 pages ($0.50 on the Free plan, less on paid plans). Pages without a text layer (scans, images) are listed in the output and not charged. No per-document fee.

What you can use it for

  • RAG and AI search: feed manuals, policies, reports and contracts into a vector database, with page references for citations.
  • AI agents: let an agent read a PDF or an Office file from a link and get Markdown back.
  • Bulk text extraction: convert a folder's worth of documents (by URL) into text for search, analysis or translation.
  • Spreadsheets and slides for LLMs: Excel sheets become Markdown tables, slides become sections with their notes.

Output example

With Output format = Markdown (one row per document):

{
"url": "https://example.com/remote-work-policy.pdf",
"fileName": "remote-work-policy.pdf",
"fileType": "pdf",
"title": "Sample Document: Remote Work Policy",
"pageCount": 2,
"pagesConverted": 2,
"chargedPages": 2,
"pagesWithoutText": [],
"markdown": "# Sample Document: Remote Work Policy\n\nThis is a sample document ...\n\n## 2. Equipment allowance\n\n| Role | Allowance (USD) | Monitor included |\n|---|---|---|\n| Engineering | 800 | Yes |\n| Design | 900 | Yes |\n| Sales | 500 | No |\n\n## 3. Working hours\n\n...",
"charCount": 1137,
"error": null,
"convertedAt": "2026-10-20T03:05:12+00:00"
}

With Output format = RAG chunks, Chunk size = 500 Chunk overlap = 50 (one row per chunk; each chunk starts with the last line or words of the previous one):

{
"url": "https://example.com/remote-work-policy.pdf",
"fileName": "remote-work-policy.pdf",
"fileType": "pdf",
"title": "Sample Document: Remote Work Policy",
"chunkIndex": 3,
"chunkCount": 4,
"pageStart": 1,
"pageEnd": 2,
"headings": ["Sample Document: Remote Work Policy", "3. Working hours"],
"text": "| Design | 900 | Yes |\n| Sales | 500 | No |\n\n## 3. Working hours\n\nCore hours are 10:00 to 15:00 ...",
"charCount": 212
}

How to use

  1. Paste links to your documents in Document URLs (any public or signed download link, e.g. from S3, Google Cloud Storage or an Apify key-value store).
  2. Pick an Output format: Markdown, plain text or RAG chunks.
  3. Click Start. Results appear in the Output tab; download them as JSON, CSV or Excel, or read them through the API.

The Actor works well from code and from AI agents: call it through the Apify API or the Apify MCP server with a list of URLs and read the dataset.

Input

FieldWhat it does
Document URLsLinks to PDF, DOCX, XLSX or PPTX files. The type is detected from the file content, so download links without an extension work. Up to 50 MB per file. You can also link a text file that lists document URLs (up to 1,000).
Output formatmarkdown (default), text or chunks.
Chunk size / Chunk overlapFor RAG chunks: maximum characters per chunk (default 2,000) and characters repeated from the previous chunk (default 200). Chunks break at headings first, then at paragraphs and sentences.
Add page markersAdds <!-- page N --> comments to the Markdown.
Max pages per documentConvert only the first N pages (0 = all, up to 1,000).
Max rows per Excel sheetDefault 1,000 rows per sheet.

How each format is converted

FormatWhat you get
PDFText in reading order (multi-column pages included), headings from font sizes (# to ###, plus bold one-line headings), bullet lists, ruled tables as Markdown tables. Rotated side text (e.g. preprint stamps) is skipped.
Word (.docx)Headings from the document's heading styles, paragraphs, bullet and numbered lists, tables, in document order.
Excel (.xlsx)One ## section per sheet with the sheet as a Markdown table (values, not formulas; dates as ISO dates).
PowerPoint (.pptx)One ## section per slide with its title, text (bullets keep their indentation), tables and speaker notes.

Pricing

Pay per event: $0.50 per 1,000 pages on the Free plan (page event, $0.0005), lower on paid Apify plans (Bronze $0.00045, Silver $0.0004, Gold and above $0.00035), plus Apify's tiny start fee of $0.00005 per GB of memory per run (the default 1 GB counts as one).

Examples on the Free plan: a 20-page PDF costs $0.01. 1,000 pages of reports cost $0.50. A 10-slide deck costs $0.005.

What counts as a page:

  • PDF: each page that has text. Pages without text (scans, images only) are free and listed in pagesWithoutText.
  • PowerPoint: each slide with content.
  • Excel: each non-empty sheet, plus one more page for every 500 rows after the first 500.
  • Word: Word files have no fixed pages, so every 3,000 characters of text count as one page (at least one).

Documents that cannot be downloaded or read are reported with an error and are not charged. Set a maximum cost per run in the run options for a hard cap; the Actor stops converting when the cap is reached.

Limits

  • Scanned PDFs are not OCR'd in this version: pages without a text layer come back empty (and free) and are listed in pagesWithoutText.
  • Tables are detected when they have ruling lines. Tables drawn only with spacing come out as text lines.
  • Old binary formats (.doc, .xls, .ppt) and password-protected files are not supported.
  • Up to 50 MB per file and 1,000 pages per document. A document is converted completely before its rows are saved, so split very long documents with Max pages per document if you need results sooner.
  • Excel: the first 200 columns are read, and a sheet ends after 1,000 empty rows in a row.

Data and privacy

The Actor only downloads the URLs you give it (one request per file, at most one request per second to the same host). Documents are processed in memory during the run and are not stored anywhere except your own run's dataset. Only convert documents you have the right to use.

FAQ

Why is a page empty? It probably has no text layer (a scan or an image). It is listed in pagesWithoutText and not charged.

Can I send many files at once? Yes, add as many URLs as you like. Files are downloaded in parallel and converted one after another.

Why does a Word file show more "pages" than in Word? Word pages depend on fonts and margins, so the Actor counts 3,000 characters as one page to keep pricing predictable.

Can I use it from LangChain, LlamaIndex, Make, n8n or Zapier? Yes. Call the Actor through the Apify API (for example run-sync-get-dataset-items with your URLs and outputFormat: "chunks") and load the rows into your vector store, or use the Apify integrations for Make, n8n and Zapier. AI agents can call it through the Apify MCP server.

ActorWhat it does
PDF OCRScanned PDFs and images to text, word boxes and a searchable PDF (Tesseract). Use it for the pages this Actor lists in pagesWithoutText.
Website Change MonitorAdded and removed lines of text, Markdown and a screenshot for a list of web pages.
ATS JobsOpen jobs from company career boards (Greenhouse, Lever, Ashby, Recruitee, Personio, Teamtailor) in one schema.
RemoteOK & Jobicy Remote Jobs APIRemote job listings from two official APIs with source credit.

For AI Agents

This Actor is a document-to-text tool an agent can use on its own: it needs no login, charges per page through Apify (pay per event), and runs with limited permissions.

Apify MCP server (Claude Desktop, Cursor, VS Code and other MCP clients). Add only this Actor as a tool:

{
"mcpServers": {
"pdf-to-markdown": {
"url": "https://mcp.apify.com?tools=tamatama/doc-to-markdown"
}
}
}

The client signs in with OAuth on first use (or send Authorization: Bearer <APIFY_TOKEN>). The Actor is exposed as a tool named tamatama--doc-to-markdown; get-dataset-items is added automatically for reading big outputs. A typical agent input:

{ "urls": [{ "url": "https://example.com/report.pdf" }], "outputFormat": "chunks", "chunkSize": 2000 }

Each chunk row has text, pageStart, pageEnd and headings, so the agent can quote the page it read. Chunk rows do not repeat the document figures: to decide whether a document needs OCR, read documents[].pagesWithoutText in the SUMMARY record of the run's key-value store (a fully scanned PDF gives no chunk rows at all), or use outputFormat: "markdown", whose rows include pagesWithoutText.

OpenAPI: https://api.apify.com/v2/acts/tamatama~doc-to-markdown/builds/default/openapi.json (for GPT actions, LangChain or any tool that imports OpenAPI). REST: POST https://api.apify.com/v2/acts/tamatama~doc-to-markdown/run-sync-get-dataset-items with the input above as the JSON body.