MarkPrep
All posts
2026-09-17 · 6 min

Convert Word to Markdown Locally (Without the Formatting Mess)

Open any Word document's underlying file and you'll find a horror show. A .docx isn't really a document — it's a zip full of XML describing every font change, every tracked edit, every style you clicked once and forgot about. Word hides all of it behind a clean page. Your LLM does not get that luxury: paste a Word doc's contents into a model and you often drag half of that mess along with it.

That's the actual problem with "just copy it into ChatGPT." You're not moving text; you're moving text plus a decade of Microsoft's formatting decisions. Converting Word to Markdown first is how you hand the model the content and leave the cruft behind. Here's how to do it cleanly, and why doing it on your own machine matters.

What Markdown strips away (and keeps)

Markdown is deliberately poor. It has headings, bold, italic, lists, links, code, and tables — and almost nothing else. That poverty is the point. When you convert a .docx to Markdown, everything that was structure survives (a Heading 1 becomes #, a bulleted list becomes -), and everything that was decoration — the font swaps, the coloured text, the stray double-spaces, the "Normal (Web)" styles — evaporates.

What you're left with is the document's skeleton: the parts a language model actually uses to understand the shape of your text. Headings tell it the hierarchy. Lists tell it these items belong together. A clean table tells it which value goes with which label. None of the visual noise, all of the meaning.

The right way to convert

The mechanics are simple, but two details decide whether the output is usable:

  • Preserve the heading structure. A good converter maps Word's heading styles (Heading 1, Heading 2) to Markdown heading levels. If it just makes everything bold, you've lost the hierarchy that makes the document chunkable later. Check that your #/## levels match the original outline.
  • Handle tables properly. Word tables should come out as Markdown pipe tables, not as a wall of tab-separated text. This is where a lot of converters quietly fail.

Drop your .docx into MarkPrep's Word-to-Markdown converter and both happen automatically — styles map to heading levels, tables reconstruct as real Markdown tables, and the formatting noise is dropped.

Why do it locally instead of uploading?

Word documents are rarely throwaway. They're contracts, drafts, reports, HR letters — the kind of thing you'd think twice about handing to a random website. Most online converters process your file on their server, which means your document leaves your machine to become Markdown.

It doesn't have to. The conversion — unzipping the .docx, reading its XML, rebuilding it as Markdown — can run entirely in your browser, on your own CPU. The file never gets uploaded; close the tab and nothing remains anywhere. For anything you wouldn't email to a stranger, that's the difference between "converted" and "converted and copied to someone's datacenter."

After the conversion: does it fit?

Word documents are sneaky about length. A report that looks like 15 pages of mostly-whitespace can be far more text than a dense 8-page one — page count tells you nothing a model cares about. Once you've got clean Markdown, it's worth checking the token count so you know whether the whole thing fits your model's context window before you paste it in.

If it doesn't fit, the clean heading structure you just preserved pays off again: it gives you natural boundaries to split on, so you can chunk the document on sections rather than hacking it apart mid-paragraph.

The short version

"Copy from Word, paste into the model" feels fine until the formatting sabotages you. Converting to Markdown first is a two-second habit that hands your LLM clean structure instead of Microsoft's leftovers. Do it in your browser, keep the file on your machine, check the token count, and paste something the model can actually read.

Try it on your own file

Convert a document and watch the token counter — free, no account, nothing uploaded.