Convert Word to Markdown Online Free (.doc/.docx)
Turn a Word document's heading levels, lists, tables, and footnotes into clean GitHub-Flavored Markdown — from a 2003-era .doc to the latest .docx, macro-enabled .docm included. Fully local conversion, under 5 milliseconds median. The output is ready to commit, publish, or feed to an LLM.
Three ways below, pick by scenario: use the online converter for a quick one-off, the CLI for batch jobs, the API to embed conversion in your own code.
Free Online Conversion (Files Never Leave Your Device)
The converter is powered by @firecrawl/anydoc-wasm and runs entirely in your browser via WebAssembly: files are never uploaded to any server, and it even works offline. Drop in a Word document, get Markdown instantly — copy it or download the .md file.
Drop a document here, or click to browse
Conversion runs locally in your browser — files are never uploaded
Three Ways: Pick by Scenario
Way 1: Online Converter — No Install, Fastest Start
That's the converter block above. Best for converting a few documents occasionally without installing anything. It runs the exact same engine as the CLI and the API, so the output is identical.
Way 2: One-Line CLI Command
With Node.js installed, no project setup is needed — one command does it:
# Convert a Word document, write the Markdown to a file
npx @firecrawl/anydoc report.docx -o report.md
# The legacy .doc format converts just as directly
npx @firecrawl/anydoc old-report.doc -o old-report.md
# Read from stdin (pipeline-friendly)
npx @firecrawl/anydoc - --format docx < report.docxThe first npx run downloads the CLI package; after that it runs locally. See the beginner's guide for more.
Way 3: API Integration (Node.js / Python / Rust)
Embed Word-to-Markdown in your own code — one API across all three runtimes:
// Node.js: npm install @firecrawl/anydoc
import { toMarkdown } from '@firecrawl/anydoc'
const markdown = await toMarkdown('report.docx')# Python: pip install firecrawl-anydoc
import anydoc
markdown = anydoc.to_markdown("report.docx")// Rust: cargo add anydoc
let markdown = anydoc::to_markdown("report.docx")?;Need to extract the embedded images to disk? Stop at the toDocument layer and read the raw bytes — see the API quick reference.
Details and Boundaries
- .doc / .docx / .docm all supported: the legacy binary .doc and modern OOXML formats share one parser, so the output behaves identically
- Structure comes back intact: heading levels, nested and task lists, tables, block quotes, and footnotes map to their GFM equivalents; merged cells become a regularized Markdown table
- Noise stripped by design: headers, footers, page numbers, and date/time placeholders are removed for clean LLM input
- Images are not lost: they render as alt text in the Markdown by default, with raw bytes kept on the document model for later extraction
- Format detected from bytes, not extensions: a mislabeled file still converts correctly
- Speed: 4.4ms median conversion — pure Rust, no ML models, no LibreOffice required
FAQ
Is the Word to Markdown conversion free?
Yes. anydoc is open source under the MIT License, and the online converter on this page is free too — it runs locally in your browser, with no usage limits and no sign-up.
Is my document uploaded anywhere?
No. The online converter runs via WebAssembly inside your browser, so the file never leaves your device. The CLI and API versions also convert locally — contracts and internal docs are safe to convert.
Which Word formats are supported?
All three: .doc, .docx, and .docm. Encrypted (password-protected) documents return an encrypted error — remove the password first, then convert.
Is complex formatting preserved?
The output is Markdown, not a layout snapshot: information is complete (headings, tables, footnotes all there), while visual detail (WordArt, absolutely positioned text boxes) degrades to readable text. anydoc targets information integrity, not pixel-perfect reproduction.
Can I batch-convert a whole folder?
Yes — pair the CLI with a shell loop, e.g. for f in *.docx; do npx @firecrawl/anydoc "$f" -o "${f%.docx}.md"; done. At 4.4ms median per document, a few hundred files take seconds.
Related Pages
- Sister format: Convert PDF to Markdown
- Start from zero: Getting Started: First Conversion
- All five bindings on one page: API Quick Reference
- Debugging errors: Error Handling & Limits
- Install for every language: Install
- How it stacks up: markitdown vs anydoc
- Full numbers: Benchmark