Private by architecture
There is no upload endpoint to trust. The PDF is parsed by PDF.js inside the tab, so confidential drafts, medical records and NDAs never leave your laptop.
Drop a PDF and get clean Markdown with headings, lists and paragraphs intact. Parsing runs inside this tab with PDF.js — the file never touches a server, and it keeps working even when you are offline.
No file selected · processed locally, nothing is sent anywhere
Why PDFtoMD
Most converters email your contract to a server. This one reads the bytes on your own machine and hands back Markdown that is ready for a language model, a wiki, or a git repo.
There is no upload endpoint to trust. The PDF is parsed by PDF.js inside the tab, so confidential drafts, medical records and NDAs never leave your laptop.
Markdown is the cheapest format to send to a model. Output keeps heading hierarchy and bullet structure instead of the shredded lines a plain copy-paste gives you.
Font size decides heading level, bullet glyphs become list items, and line breaks inside a paragraph are merged back into a single sentence.
How it works
Everything below happens in your browser. You can disconnect from the network after the page loads and the converter still runs.
Drag a file onto the panel or pick one from disk. Nothing is transmitted — the browser reads the bytes with the File API.
Each page's text layer is read item by item. The converter measures font sizes to rank headings, drops repeated running headers, and rebuilds paragraphs.
Fix anything by hand in the source pane, watch the preview update, then copy to the clipboard or download a .md file.
FAQ
A scanned PDF is a picture of a page. There is no text layer to read, so a browser-side extractor returns nothing — that is a limit of the file, not of the converter.
Reading those files needs OCR, which means shipping a model of a few megabytes and a much slower conversion. OCR is not in the free preview; the converter tells you when a file has no extractable text instead of pretending it succeeded.
PDF has no concept of a table. What looks like a grid is usually a set of absolutely positioned text fragments, and the spacing between columns is the only thing holding it together.
Simple tables often survive because the columns stay on one line. Complex ones with merged cells, wrapped headers or invisible borders need geometry that this free build does not compute, so rows can collapse into a single line. Paste the result into your editor and rebuild the pipes, or rebuild tables by hand in your editor.
No. The PDF is never put into a request body — parsing happens locally with PDF.js, and the output is generated by JavaScript running in this page.
The only network calls are for the page itself and the PDF engine script. You can confirm this in the network panel of your developer tools, or simply switch off your connection after the page loads and convert a file offline.
Input is PDF with a real text layer. Output is Markdown, which you can copy or download as a .md file.
Plain text is accepted too — open the paste panel and it runs through the same heuristics, which is handy for pages that were copied from a reader. Word documents, images and scanned pages are not supported in the free build.
Pricing
The local converter stays free. Harder OCR/layout cases may need other tools for now.
Local conversion with no account and no upload.
.mdFor scanned archives, academic papers and anything the free tier cannot read.
Coming later — not available yet