I kept hitting the same wall: I have a folder of PDFs, Word files and spreadsheets, and I want them as clean Markdown so I can feed them to an LLM or a RAG pipeline. Every tool I tried either uploaded my documents to someone's server, or gave me Markdown I had to clean up by hand.
So I built Milldown, a native macOS app that does the conversion entirely on your machine. I'm the developer — this is a "here's the thing I made" post, and I'll happily answer anything technical in the comments.
Drop in files, a URL, or a whole folder. Milldown converts them and shows you the Markdown side by side with a rendered preview, so you can check the output before it goes anywhere near your pipeline.
The bits that matter if you're building with this:
milldown:// URL scheme, so the same conversion you just did by hand can go in a script or a Shortcut.
On that last point, I published the benchmark rather than asking you to take a number on faith: a pinned corpus, defined baselines, committed results. Measured there — web pages 72–95% fewer tokens than raw HTML, PDFs 71–84% fewer than attaching the PDF natively. Spreadsheets go the other way: CSV beats a Markdown pipe table by 12–29%, so that's what it recommends for them.
PDF, Word, PowerPoint, Excel, HTML, CSV, JSON, XML, RSS/Atom, EPUB, ZIP, Jupyter notebooks, Outlook .msg, text/Markdown, JPEG/PNG — plus web pages, Wikipedia articles and YouTube transcripts by URL.
Under the hood conversion is powered by Microsoft's open-source MarkItDown engine (MIT), bundled inside the app. I'm not affiliated with Microsoft — Milldown is the native Mac app around it: the OCR path, folder mirroring, watch folders, chunk export, token accounting and the CLI.
Free for 14 days with every feature unlocked and no account required. After that it's a $39 perpetual licence for up to 3 Macs, or $249 for a 10-seat team licence — 12 months of updates included, renewals optional, nothing billed automatically, 14-day money-back guarantee.
If you're doing local RAG prep on a Mac, I'd genuinely like to know which provenance fields you keep on your chunks — source path, page, heading path, extraction time — and whether you put them in JSONL metadata, front matter, or both. That's the part I'm least sure I've got right.