Doc To Markdown
Pricing
from $0.50 / 1,000 results
Doc To Markdown
Convert documents (PDF, Word, PowerPoint, Excel, HTML, images) to clean Markdown. Supports batch processing, metadata extraction, and customizable output formatting.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Doc to Markdown: Convert PDF, Word, Excel and More into Clean Text
Doc to Markdown turns documents into clean Markdown text. Paste public URLs, upload files directly, or mix both in the same run, and it converts PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx, .xls), HTML, plain text, Markdown, JSON, CSV, ZIP archives, EPUB, Outlook .msg files and Jupyter notebooks, plus a speech to text transcript from short WAV, MP3, M4A and MP4 audio. Read the results as a structured Dataset, download ready to open .md files from the Key-Value Store, or both from the same run.
Why This Scraper?
- Two ways in, one run. Paste public URLs, upload files directly, or mix both in the same call.
- Wide format coverage. PDF, Word, PowerPoint, Excel (.xlsx and .xls), HTML, plain text, Markdown, JSON, CSV, ZIP archives, EPUB, Outlook .msg files and Jupyter notebooks all convert to Markdown; short WAV, MP3, M4A and MP4 audio gets a speech to text transcript.
- Every file gets a result. A failed download or an unsupported file returns its own
success: falserecord with an error message instead of stopping the whole run. - Two destinations, your choice. Save results to a structured Dataset, download ready to open
.mdfiles from the Key-Value Store, or both from the same input. - Markdown formatted your way. Turn file metadata on or off, auto generate a table of contents, and pick ATX or Setext heading style.
- Batch friendly. Send any number of URLs and uploaded files in a single call and get one record back per file.
Use Cases
- Content and knowledge teams: turn PDFs, Word docs and slide decks into Markdown for a wiki, CMS or static site.
- RAG and AI pipelines: convert manuals, reports and spreadsheets into clean text an LLM can ingest.
- Data migration: bulk convert an old document archive, including zipped folders, into a portable Markdown format.
- Meeting and call archives: get a text transcript of short WAV or MP3 recordings alongside the source file.
- Developers and support teams: convert Jupyter notebooks, Outlook .msg exports or CSV exports into readable Markdown for documentation.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
filename | "quarterly-report.pdf" |
success | true |
error | null (an error message string when success is false) |
format | "pdf" (the file extension that was detected) |
size_bytes | 245678 |
conversion_time_ms | 812 |
markdown | the converted document text; starts with a metadata block when Include Metadata is on, and a table of contents when Generate Table of Contents is on |
metadata | object with the fields below |
metadata.converted_at | "2024-01-15T10:30:00" |
metadata.file_size_bytes | 245678 |
metadata.content_type | "application/pdf" (files fetched from a link, when the server sends a Content-Type header) |
metadata.last_modified | "Mon, 15 Jan 2024 10:00:00 GMT" (files fetched from a link, when the server sends one) |
metadata.format | "PDF", present only for PDF, DOCX, PPTX, XLSX, HTML/HTM, JPEG and PNG; absent for CSV, ZIP, EPUB, .msg, notebooks, plain text and audio |
metadata.format_description | "Portable Document Format", paired with metadata.format |
<filename>.md | Key-Value Store key, saved when Output Format is Key-Value Store or Both, for example quarterly-report.md |
text/markdown | the content type the .md file above is saved with |
How to Use
- Add the documents to convert: paste links under URLs, upload files under Upload Files, or use both in the same run.
- Choose your Markdown formatting: Include Metadata, Generate Table of Contents, and Heading Style (ATX or Setext).
- Pick where results go with Output Format: Dataset, Key-Value Store, or both.
- Click Start, then download the Dataset as JSON or CSV, or open the Markdown files from the Key-Value Store.
Convert a batch of URLs:
{"urls": ["https://example.com/files/quarterly-report.pdf", "https://example.com/files/handbook.docx"]}
Add a table of contents and Setext headings:
{"urls": ["https://example.com/files/manual.pdf"],"includeToc": true,"headingStyle": "setext"}
Dataset only, no metadata block:
{"urls": ["https://example.com/files/notes.txt"],"includeMetadata": false,"outputFormat": "dataset"}
Convert a file already stored in one of your Key-Value Stores to a downloadable Markdown file:
{"files": ["<KEY_VALUE_STORE_ID>#contract.pdf"],"outputFormat": "keyValueStore"}
Each files entry can be a file uploaded in the Console, a direct file link, or a <storeId>#<key> reference to a record in one of your Key-Value Stores. The key's extension (for example .pdf) tells the actor how to read the file.
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/doc-to-markdown").call(run_input={"urls": ["https://example.com/files/report.pdf"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["filename"], item["success"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/doc-to-markdown').call({ urls: ['https://example.com/files/report.pdf'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Choosing Memory (MB) for large or many files
Memory scales automatically with how many files and URLs you send in one run (roughly 256 MB per item, 512 MB minimum). Set Memory (MB) yourself, up to 8192, if you are converting a single very large file rather than many small ones.
Every file gets its own outcome
A file that cannot be downloaded, is corrupt, or has an unsupported format does not stop the run. It comes back as its own Dataset record with success: false and an error message, while every other file in the same run still converts normally. Failed files are not written to the Key-Value Store, so keep Output Format on Dataset or Both if you want to see which files failed.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
files | array | (none) | Upload files to convert directly (PDF, Word, PowerPoint, Excel, HTML, images and more). |
urls | array | sample | URLs of documents to convert. |
includeMetadata | boolean | true | Include file metadata (filename, format, size, conversion time) in the output. |
includeToc | boolean | false | Auto generate a table of contents from the document's headings. |
headingStyle | string | atx | Markdown heading style: atx (# Heading) or setext (underlined; applies to level 1 and 2 headings, deeper levels stay # style). |
outputFormat | string | both | Where to save results: dataset, keyValueStore, or both. |
memoryMbytes | integer | auto | Override automatic memory allocation, from 256 to 8192 MB. Leave empty to scale automatically with the number of files and URLs. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"filename": "quarterly-report.pdf","success": true,"error": null,"format": "pdf","size_bytes": 245678,"conversion_time_ms": 812,"markdown": "---\nfilename: quarterly-report.pdf\nformat: pdf\nsize: 245678 bytes\nconversion_time: 812ms\nconverted_at: 2024-01-15T10:30:00\ncontent_type: application/pdf\nformat: PDF\nformat_description: Portable Document Format\n---\n\n# Quarterly Report\n\nRevenue grew 12 percent year over year.\n","metadata": {"converted_at": "2024-01-15T10:30:00","file_size_bytes": 245678,"content_type": "application/pdf","format": "PDF","format_description": "Portable Document Format"}}
Plan Requirement
Check the Pricing tab on the Store page for the current rate. The actor has no proxy or connection settings: URLs are downloaded directly (60 second limit per download), so a source that requires a login or blocks direct requests will fail for that one item while the rest of the batch keeps converting. Memory scales automatically with how many files and URLs you send in one run; raise Memory (MB) yourself only for a single very large file.
FAQ
How much does it cost?
The Pricing tab shows the current rate. Converting more files or larger files in one run takes longer and needs more memory, so send only the documents you need.
Is it legal to convert documents I do not own?
This actor only converts documents you give it, either by URL or by upload. You are responsible for having the right to access and convert that content; follow the source's terms and the copyright laws that apply to you.
Why did one file come back with success: false instead of the whole run failing?
Each file is converted on its own. A blocked or missing URL, a corrupt file, or a format this actor cannot read produces one record with success: false and an error message, while the rest of the batch still converts. Run the failed item again on its own if you think it should have worked.
Can I get an actual Word or PDF file back, not just Markdown text?
No. The output is always Markdown text, either as the markdown field in the Dataset or as a .md file in the Key-Value Store. It does not produce a converted PDF, DOCX or other binary file.
What happens if I convert a plain photo (JPEG or PNG)?
JPEG and PNG files are accepted, but this actor does not read text out of images or generate an AI description of them. A plain photo typically comes back with success: true and an empty or near empty markdown body, since there is no embedded text for it to extract. Documents that already contain a text layer, such as PDF, Word or HTML, are not affected.
Can I use this actor from an AI agent or automation tool?
Yes. It is a normal Apify Actor: call it from the API, an Apify integration, or any MCP client that talks to Apify's actor tooling, and read the results back from the Dataset or Key-Value Store.
🔗 Want more AI data?
Pair this actor with these related scrapers from the same team:
| 🧩 Doc To Markdown MCP Server An MCP server that converts documents to clean Markdown. Convert PDFs, Word docs, Excel... | 🤖 AI Agent Web Fetcher An advanced web fetcher that can fetch almost all websites and convert them to... |
| 🤖 Web Scraper For Llms Stealth web scraping engine built for LLMs. Converts any web page to clean markdown or... | 📱 Universal Media Extractor Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok... |
| 🔍 Ip Location Check Look up geographic locations for IP addresses. Supports batch lookups with country, city... | 🛒 Dealroom Startup & Market Map Scraper Scrape Dealroom.net market maps, company lookup results, live signals, and newly founded... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.