Skip to content

PDF to Markdown

Drop a PDF here, paste, or click to browse

.pdf

Processed on your device — nothing is uploaded. Verify in your network tab.

Drop a PDF and get Markdown back — not a flat wall of text, but structured Markdown with headings, lists, and paragraphs reconstructed as faithfully as the source allows. It is built for the job most people converting PDFs now have: getting a document into a shape an LLM can actually use, whether that is pasting context into a chat, chunking files for a retrieval pipeline, or keeping clean source notes in a Markdown editor.

The conversion runs entirely inside your browser tab. Your PDF is opened in a Web Worker on your own machine, parsed there, and never sent to a server. You can verify that yourself: open the network tab before you convert and watch that no upload request fires. That is the whole point for confidential material — internal reports, contracts, research under NDA, financials — the kind of document you cannot legally or comfortably paste into a random web uploader still converts here, because it never leaves your device.

Structure reconstruction is best-effort and we are honest about where the seams are. Clean, single-column documents come out looking like hand-written Markdown; dense multi-column layouts and complex tables are approximated rather than perfectly preserved. If you are wiring this into a pipeline, a metered REST API and a hosted MCP server are on the way so you can call the same conversion from your own code and agents instead of doing it a file at a time.

How it works

  1. 01

    Drop your PDF

    Drag a PDF onto the page or click to select one. The file is handed straight to a Web Worker in your browser — it is not uploaded anywhere. Single-page memos and multi-hundred-page reports both work, limited only by your device's memory.

  2. 02

    Let it rebuild the structure

    The tool reads the PDF's text layer and infers document structure from it — promoting large or bold lines to headings, turning bulleted and numbered runs into Markdown lists, and keeping paragraph breaks. This all happens locally, in a background worker, so nothing is transmitted.

  3. 03

    Copy or download the Markdown

    Review the Markdown in the result pane, then copy it to your clipboard or download it as a .md file — ready to paste into an LLM, drop into a notes app, or feed a RAG indexer. Nothing was stored on a server, so closing the tab is the only cleanup needed.

Why Markdown instead of plain text

Plain text throws away the one thing an LLM finds most useful about a document: its shape. Markdown keeps that shape in a lightweight, model-friendly way.

A heading written as ## Section 3 tells a model — and a retrieval pipeline — exactly where one topic ends and the next begins. A bulleted list rendered as real - items reads as a set of parallel points rather than an ambiguous run-on. That structure is what lets you chunk a document on its headings instead of blindly every N characters, so each chunk you embed is a coherent unit of meaning rather than a fragment sliced mid-sentence.

Markdown is also close to the format most models were heavily trained on, so headings, lists, and emphasis are interpreted the way you would expect. And unlike HTML or a raw PDF, Markdown spends almost no tokens on markup — you get the structure without paying for a pile of tags in your context window. If you only need selectable prose with no structure, our PDF to Text tool is the lighter choice; choose Markdown when the hierarchy matters.

How structure is reconstructed — and its limits

A PDF does not actually store headings and lists. It stores glyphs at coordinates on a page. Rebuilding structure means inferring intent from those clues, and that inference is best-effort, not exact.

Here is what the tool does well: it reads font sizes and weights to promote likely titles and section headers to Markdown headings, detects bullet and number prefixes to form lists, preserves paragraph boundaries, and keeps reading order correct on single-column pages almost every time.

Here is where it approximates. Multi-column layouts — papers, newspapers, brochures — have to be linearized into one stream, and the tool follows the order recorded in the PDF, which usually but not always matches how you would read it. Complex tables are the hardest case: simple grids convert to Markdown tables, but merged cells, nested headers, and heavily designed tables are flattened to their best readable approximation. Heading levels are inferred from typography, so a document with unusual styling may get the nesting slightly wrong. For LLM context this is normally fine — models are tolerant of minor structural noise — but it is worth a glance before you rely on the output verbatim.

Built for LLM context and RAG pipelines

This tool exists because "turn a PDF into something I can feed a model" has become an everyday task, and most PDFs are hostile to it out of the box.

For ad-hoc context, the workflow is direct: convert, copy the Markdown, and paste it into your chat. You get clean structure and no wasted tokens, and because the file never left your machine, you can do it with documents you would never upload to a third-party service.

For RAG, the Markdown gives you natural split points. Chunk on #/## boundaries so each embedded passage is a self-contained section; keep the heading text in the chunk so retrieval has a topical anchor; and store the .md alongside your source PDF for traceability. Cleaner input here directly improves retrieval quality — garbage-extracted PDFs are a common, invisible cause of bad RAG answers.

When you outgrow converting files by hand, a metered REST API and a hosted MCP server are on the roadmap, so the same file-to-Markdown conversion becomes a call you make from a script, an ingestion job, or an agent. The browser tool and the API are meant to be two front doors to the same conversion.

Why it runs on your device

Most online converters send your PDF to their servers to do the work, which means a copy of your document lands in someone else's storage, however briefly. This tool does the parsing in your browser instead, using the same local runtime that powers offline web apps.

The consequences are concrete. There is no upload, so there is no server-side copy of your document, no processing log tied to your file, and nothing for a future breach or subpoena to reach. It also means the tool keeps working on the documents that matter most — the confidential ones you are contractually or ethically barred from pasting into a cloud service. The first conversion loads a small amount of parsing code, then everything runs locally and works offline afterward. If you want proof rather than a promise, watch the network tab: the conversion finishes with no file leaving your browser.

Frequently asked questions

How do I convert a PDF to Markdown for free?
Drop the PDF onto this page and structured Markdown appears in the result pane, ready to copy or download as a .md file. It is free with no sign-up and no page limit. The tool reads the PDF's text layer and rebuilds headings, lists, and paragraphs as Markdown. Everything runs in your browser, so the file is never uploaded to a server.
Is my PDF uploaded to a server?
No. The PDF is opened and converted inside your browser tab by a local Web Worker, and it is never transmitted anywhere. You can confirm this by opening your browser's network tab before converting and checking that no upload request fires. That is what makes the tool safe for confidential documents you cannot paste into a cloud service — contracts, financials, or research under NDA.
Why convert PDF to Markdown instead of plain text for an LLM?
Markdown preserves the document's structure — headings, lists, and paragraph breaks — in a compact, model-friendly form. That lets you chunk a document on its headings for retrieval instead of slicing it blindly, and it spends almost no tokens on markup. Plain text discards that hierarchy. If a model only needs raw prose, plain text is fine; when structure carries meaning, Markdown gives better results.
Does it preserve tables and headings accurately?
Structure is reconstructed best-effort. Headings are inferred from font size and weight, and lists from their bullet or number prefixes, so clean single-column documents convert well. Simple tables become Markdown tables, but merged cells and heavily designed tables are flattened to a readable approximation. Heading levels are inferred from typography, so unusual styling can occasionally nest sections slightly wrong. Skim the output before relying on it verbatim.
Can I use this to prepare documents for RAG?
Yes — that is a core use case. The Markdown gives you natural split points, so you can chunk on heading boundaries and keep each embedded passage as a coherent section rather than a mid-sentence fragment. Keeping the heading text inside each chunk gives retrieval a topical anchor. Because conversion is local, you can index confidential documents without ever uploading them to a third-party service.
Is there an API or MCP server for this?
Not yet, but both are on the roadmap. A metered REST API and a hosted MCP server are being built so you can call the same PDF-to-Markdown conversion from your own scripts, ingestion jobs, and agents instead of converting files one at a time in the browser. The in-browser tool and the API are intended as two front doors to the same underlying conversion.
What about scanned PDFs with no text layer?
This tool works from a PDF's text layer, so digital PDFs exported from software convert best. A scanned PDF is really page images with no text to read, so structure reconstruction has nothing to work from. For scans, use our PDF to Text tool, which auto-detects the missing text layer and runs on-device OCR on the page images to recover the characters first.
Is there a page or file-size limit?
There is no fixed page limit, and long documents of many hundreds of pages work fine. The practical ceiling is your device's memory, because everything is processed locally rather than on a server. Large documents simply take a little longer to parse. Since nothing is uploaded, there is no bandwidth cap or server-side size restriction to work around.