PDF to Markdown
Turn a PDF into clean Markdown you can paste into Obsidian, Notion, a wiki or a Git repo. Nothing is uploaded.
Your files never leave your device
Drop files here
or click to choose files
How it works
This tool converts a PDF into Markdown — the plain-text format behind Obsidian, Notion, GitHub READMEs and most static site generators. It reads the text layer of your PDF in the browser, works out which lines are headings and which are body text, rejoins paragraphs that were split across lines and pages, drops repeated headers and footers, and writes the result as a .md file you can download or copy straight to the clipboard.
What carries over: headings (from relative font size), paragraphs, and bullet or numbered lists. What doesn't: a PDF has no idea what a table or a column is — it only stores positioned glyphs — so tables, multi-column layouts and images are flattened into plain text you may want to tidy up. Optional YAML front matter adds the title, author, source filename and page count for note apps and site generators. If a page is a scan with no text layer, on-device OCR can read it and append the text.
Everything runs locally: your PDF is parsed and converted in your browser, and the Markdown never touches a server. No upload, no account, no watermark, no page limit — safe for contracts, drafts, research papers and anything you'd rather not hand to a cloud converter. You can check the network tab and confirm the file never leaves your device.
Frequently asked questions
Does it keep tables and images?
No. A PDF stores positioned glyphs rather than table structure, so reconstructing a Markdown table reliably isn't possible from the text layer alone — table text comes through as plain paragraphs. Images aren't extracted either; this tool focuses on the reading text. Use PDF to JPG if you need the pages as images.
Can it convert a scanned PDF?
Yes, with OCR. A scan is just images, so there's no text layer to read. The tool flags scanned pages and offers to run OCR (English) on your device, then appends the recognised text to the Markdown. It's slower — a few seconds per page — but nothing is uploaded.
How are headings detected?
By relative font size: lines noticeably larger than the body text become # headings, moderately larger ones become ##. It works well for reports, papers and books with a consistent type scale, and less well for PDFs where headings are the same size as body text and only bold. You can always fix a heading level in the Markdown afterwards.