PDF to Markdown for Obsidian

Obsidian is built on Markdown, but PDFs are not. If you want to put a research paper, ebook, or report into your vault, you need a clean .md file — not a PDF attachment that Obsidian can't search, link, or transform. mdstill converts PDFs into GFM Markdown you can drop straight into your vault.

upload_file

Drop file here or click to browse

PDFDOCXDOCPPTXXLSXXLSHTMLEPUBCSVJSONXMLZIPRTFODTPAGESNUMBERSKEY

Max file size: 20MB ·

Why bother converting at all?

Obsidian can display PDFs as embedded attachments, but they are second-class citizens. You can't wikilink into a specific section, the text isn't indexed by Quick Switcher, plugins like Dataview can't read the content, and you can't re-use passages in your own notes. Converting to Markdown fixes all of that — the document becomes native vault material.

What survives the conversion

Headings, paragraphs, ordered/unordered lists, and tables with clear row-and-column structure come through as proper GitHub-flavored Markdown. Your H1/H2/H3 structure in the source PDF maps to Markdown headers that Obsidian treats as linkable anchors — you can write [[Paper Title#Results]] and jump straight to that section from any other note.

What doesn't (be honest)

We extract text from the PDF's embedded text layer. Scanned PDFs without a text layer will come out empty — run them through ocrmypdf or similar first. Complex mathematical notation (LaTeX-heavy papers) is extracted as plain text and may not render cleanly, so for equation-heavy material consider a math-aware tool. Figure captions survive; figures themselves are not extracted as images by default.

Dropping the output into your vault

After conversion, download the .md file and move it into your vault folder. Obsidian picks it up automatically. Headers become Quick Switcher targets and wikilink anchors. If you use Dataview, you can immediately query frontmatter or content from the converted note. For long papers, consider splitting by H2 into separate notes — Obsidian's 'Note Composer' plugin handles that in a couple of clicks.

Frequently asked questions

Related