DOCX to Markdown API avatar

DOCX to Markdown API

Pricing

from $1.60 / 1,000 document converteds

Go to Apify Store
DOCX to Markdown API

DOCX to Markdown API

DOCX to Markdown — Word, Excel, Slides & Document Tables: `document-converted` previous/checked $0.002; active Apify record sets fees; usage included; start extra; failed results uncharged.

Pricing

from $1.60 / 1,000 document converteds

Rating

0.0

(0)

Developer

Logan Parker

Logan Parker

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

DOCX to Markdown converts Word files with headings, lists and tables; Excel, PowerPoint, OpenDocument, EPUB, RTF and HTML are also supported, with sheet tables and optional slide notes. AI agents can call and pay through Apify MCP.

The active Apify pricing record determines your bill; for the previous/checked schedules, document-converted previous/checked $0.002; usage is included and failed results are free.

Example result

Example record for the minimal input under How to use it, as this Actor returned it in its deploy check on 2026-10-16:

{
"url": "https://raw.githubusercontent.com/python-openxml/python-docx/master/tests/test_files/test.docx",
"ok": true,
"format": "docx",
"markdown": "# python-docx was here!\n\npython-docx was here too!",
"sections": [],
"truncated": false
}

How to use it

Start a run in Apify Console, by API or from an agent with an input like this one — it is the input Apify runs every day to test this Actor:

{"urls": ["https://raw.githubusercontent.com/python-openxml/python-docx/master/tests/test_files/test.docx"]}

Start with the minimal JSON example above, then adjust the fields in the table below. Read the Example result and Output fields sections for the returned record, Errors for failure codes, and Events and prices for result events and the separate platform start.

FieldTypeRequiredDefaultMeaning
urlsarray of stringsyes—File URLs (.docx, .pptx, .xlsx, .odt, .odp, .ods, .epub, .rtf, .html), http or https, 1–50 per run, up to 50 MB each. The format is read from the file, not its name.
sheetRowLimitintegerno1000Rows read from each spreadsheet sheet, the header row included (1–50,000).
includeNotesbooleannotrueInclude each slide's speaker notes under a Notes heading.

Every limit above is enforced by the input schema and again in code.

Events and prices

The active Apify pricing record determines your bill; each schedule below is conditional on that exact record being active. A pending record does not authorise its charges. Before submission, while pending, and after activation, use the actual active record, not the requested calendar, to determine the bill.

Observed effective start: 2026-10-16T14:17:04.507Z, confirmed by the pricing record; this stage requests no pricing mutation.

Previous schedule — only if that record is active

apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005; document-converted: FREE $0.002, BRONZE $0.002, SILVER $0.0018, GOLD $0.0016, PLATINUM $0.0016, DIAMOND $0.0016.

Checked schedule — only if that record is active

EventTitleCharged whenFREE / BRONZESILVERGOLD / PLATINUM / DIAMOND
document-convertedDocument convertedOne file converted to Markdown.$0.002$0.0018$0.0016

Platform event in the checked schedule: apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005.

The checked start at default memory is (2 events, $0.0001, at the default 2,048 MB).

Worked event subtotal, checked schedule at FREE: if 10 document-converted events are charged, 10 × $0.002 = $0.02 for that event alone. All other charged events and the platform start event add their listed fees; this subtotal is not a run total. The configured maximum-charge floor is $0.01. Platform usage is included; failed results are uncharged.

Call it from an agent

Through Apify's MCP server (https://mcp.apify.com), tool call-actor:

{"actor": "hermeskd/document-to-markdown", "input": {"urls": ["https://raw.githubusercontent.com/python-openxml/python-docx/master/tests/test_files/test.docx"]}, "callOptions": {"maxTotalChargeUsd": 0.05, "timeout": 600}, "waitSecs": 30}

The call returns the run's status and its defaultDatasetId. Read the records with get-dataset-items:

{"datasetId": "<defaultDatasetId from the call>", "limit": 50}

As a dedicated tool, add https://mcp.apify.com?tools=hermeskd/document-to-markdown to your MCP client. A single file finishes well inside the 30-second wait, so one call-actor plus one get-dataset-items is the whole exchange. maxTotalChargeUsd caps what the run can charge; when it is reached the remaining URLs come back as charge_limit_reached records and are not charged.

Output fields

One record per input URL.

FieldMeaning
urlThe input URL.
oktrue when the document converted; false with error.
formatThe format read from the file's bytes: docx, pptx, xlsx, odt, odp, ods, epub, rtf or html.
markdownThe document as Markdown. Word and OpenDocument text: headings, nested and numbered lists, tables, bold and italic, links. PowerPoint and OpenDocument presentations: ## Slide N: title, text as bullets by level, tables, notes. Excel and OpenDocument spreadsheets: ## Sheet: name and a table, the first row as its header. EPUB: the chapters in reading order. RTF: the paragraphs (styling is not read). HTML: the whole page body. Images and document properties are left out.
sectionsFor slides and sheets: {index, title} per slide or sheet, in order; empty for other formats.
truncatedtrue when a sheet had more rows than sheetRowLimit, or the Markdown was cut at 6 MB to fit one dataset record.
error{code, message} when ok is false.

Limits and run time

  • 1–50 URLs per run; files up to 50 MB; a zip-based file (Office, OpenDocument, EPUB) may unpack to at most 500 MB in at most 20,000 parts; up to 50,000 rows per sheet (1,000 by default).
  • Each request — its redirects and its whole body included — must finish within 30 seconds (the per-request timeout; a slower file is download_failed); at most 2 requests a second go to one host.
  • One record holds at most 6 MB of Markdown; a longer document is cut there and marked truncated.
  • One document may take at most 120 seconds to convert; a file that needs longer is stopped and answered too_large, and the next document in the run starts fresh.
  • Typical run time: a file converts in well under a second; a run of one file takes a few seconds at the default memory (2,048 MB). The default run timeout is 600 seconds.

Errors

Errors are records with ok: false and error.code; none is charged.

error.codeMeaning
download_failedThe URL did not return the file (status or network error).
unsupported_formatNot one of the listed formats (the message names the Hermes Actor for a PDF or an image; legacy .doc, .xls and .ppt are not read), a damaged file or one its reader cannot handle, or an archive over the unpacking limits.
encryptedPassword-protected, or an EPUB with DRM.
too_largeLarger than 50 MB, or too large or complex to convert within 120 seconds or within the converter's memory.
robots_disallowedrobots.txt forbids fetching the URL.
blocked_hostThe host is on the deny-list, or resolves to a private or local address.
timeoutThe document did not finish within the run's time budget.
internal_errorUnexpected failure; message carries the class.
charge_limit_reachedThe run reached its maximum total charge before this URL; it was not processed.
invalid_inputThe run input passed the input schema but cannot be used (for example no URL at all); the message names the field. One record per input given, or one with url: null when none was given; nothing is processed.

The run fails only when every input failed with an Actor-side code (internal_error, timeout), so a broken Actor is visible. Every other run succeeds — including one where nothing converted because of the caller's own inputs (bad URL, robots, deny-list, an unsupported or encrypted file, invalid input, the charge limit), or where those and Actor-side failures are mixed.

Sources and terms

The source is the caller's file. Process only documents you have the right to process. Fetching follows the Hermes fetch policy: robots.txt is obeyed for the user-agent HermesBot (and *), and a disallowed URL is refused without a request; platforms whose terms forbid automated access, and people-search sites, are on a deny-list and refused without a request; private and local addresses are refused, after DNS and on every redirect; the user-agent is HermesBot/1.0 (+https://apify.com/hermeskd); no login, cookies, credentials, CAPTCHA solving, evasion or proxies are used. Document properties — authors, last editor, comments (their text, author and date) and tracked-change authors — are never returned.

Not affiliated

This Actor is not affiliated with Microsoft, the Document Foundation, OASIS or the IDPF. mammoth, python-pptx, openpyxl, odfpy, markdownify, Beautiful Soup, lxml, striprtf and defusedxml are used under their open-source licences.

Changelog

  • 1.0 (2026-10-26) — store listing rewritten for the people and agents searching for this job: title, description, search-engine title and description, categories, and the README in the order a searcher reads it (what it does, a real result, how to use it, prices, the agent call).
  • 1.0 (2026-10-16) — comments in OpenDocument files are no longer read; a workbook with one far cell converts at once; a slide shape of unknown type is read as text; a file a reader cannot handle is unsupported_format, and one that cannot finish in 120 seconds is too_large.
  • 1.0 (2026-10-16) — first release: nine formats, sheets as tables, slides as sections with notes, refusal of encrypted, damaged and oversized archives.