MarkItDown
Python utility converting PDFs, Office docs, images, and audio to Markdown for LLMs.
About
MarkItDown is a lightweight Microsoft Python utility that converts files and office documents to Markdown for use with LLMs and text-analysis pipelines. It is positioned as a Markdown-focused alternative to textract: it preserves document structure that matters to models, including headings, lists, tables, and links. Supported inputs include PDF, PowerPoint, Word, Excel, images (EXIF metadata and OCR), audio (EXIF metadata and speech transcription), HTML, CSV/JSON/XML, ZIP archives, YouTube URLs, and EPUBs.
The output is meant to be consumed by text-analysis tools rather than for high-fidelity human reading, and the README carries an explicit security note: MarkItDown performs I/O with the privileges of the current process, so inputs should be sanitized in untrusted environments and the narrowest convert function used. It requires Python 3.10 through 3.14, is MIT licensed, and is one of the most-starred Microsoft open-source AI utilities at over 190k stars.
What it can do
- PDF, Word, PowerPoint, and Excel to Markdown
- Image OCR and audio transcription to Markdown
- YouTube URL and EPUB conversion
- Structure-preserving output (headings, tables, lists, links)
- Security guidance for untrusted inputs
Setup
- pip install 'markitdown[all]' (use a virtual environment)
- Use markitdown.convert() in Python or the markitdown CLI
- Sanitize inputs when processing untrusted files
Prerequisites
Python 3.10+; optional extras for OCR/audio transcription.
Use cases
Works with
Trust score — 9/10
Scored 9/10 (verified tier, metrics-v1). Evidence: Verified via official GitHub repo (microsoft/markitdown), batch277; GitHub 190,399 stars; security caveat documented by vendor (sanitize untrusted inputs); No official product logo found — logoUrl null, letter-tile fallback; Trending score 95/100 from researcher assessment. License: MIT.
★ 190,399 GitHub stars
Sources
Every fact above was checked against these sources. Where a claim comes from the provider and couldn't be independently verified, the text says so.