Nothing is uploaded
The converter runs inside this page. Contracts, payslips, medical letters stay on your computer — and they are gone the moment you close the tab.
Text, tables and pictures · Private · In your browser
Drop in a PDF and get clean Markdown back — headings, lists, tables and reading order intact, with every photo, chart and diagram saved alongside as a file. Paste it into ChatGPT or Claude, your notes or your docs. The PDF never leaves your computer.
One PDF becomes: report.pdf report.md img-1.jpg img-2.svg
# Quarterly report
Revenue grew **18%** to $4.2M.

The EU and APAC led the year.
## Revenue by region
| Region | Q3 | Q4 |
|--------|-----|-----|
| EU | 1.2 | 1.5 |
| APAC | 0.9 | 1.1 |

Why not just copy and paste?
A PDF records where every letter sits on the page — not what is a heading, what belongs to which column, or where a table starts. Copy it out and you get broken words, page numbers in the middle of sentences and tables flattened into one long line. pdf2md reads the page the way you do.
ACME Corp — Confidential Page 3 of 12 Quarterly report Revenue grew 18% to $4.2M, led by the EU and APAC. Revenue by re- gion Region Q3 Q4 EU 1.2 1.5 APAC 0.9 1.1 Costs fell for the second quar- ter in a row while head- count stayed flat. 3
# Quarterly report Revenue grew **18%** to $4.2M, led by the EU and APAC. ## Revenue by region | Region | Q3 | Q4 | |--------|-----|-----| | EU | 1.2 | 1.5 | | APAC | 0.9 | 1.1 | Costs fell for the second quarter in a row while headcount stayed flat.
What you get
The converter runs inside this page. Contracts, payslips, medical letters stay on your computer — and they are gone the moment you close the tab.
Headings from font sizes, bullet and numbered lists, tables, code blocks, two-column pages in the right order — and Chinese, Japanese, Korean or right-to-left text, too.
Markdown is what language models read best. The compact profile drops page furniture like dot leaders, so the same document costs fewer tokens.
A scanned page is a photograph of text. pdf2md does not guess at it: it says the document is scanned rather than hand you an empty file.
Tens of milliseconds a page on an ordinary laptop. A long report is done before you find your downloads folder.
How it works
Or tap to choose one. Several at once is fine, and an encrypted one just asks for its password.
Headings, lists and tables appear in a moment. Pick pages or a profile first, if you like.
Copy it, save it as .md, or download a .zip with every picture the document carries.
Images
Photos, charts, diagrams, logos, a scanned signature — every picture on the page is saved as a file any browser opens, and the Markdown links to it. Turn on Extract images and the text and its pictures leave together, in one .zip.
site-visit.zip
├── site-visit.md
└── assets/
├── img-1.jpg photo, as it was
├── img-2.png fax scan, decoded
└── img-3.svg chart, as lines
## Line 3, after the refit

Output reached 1,240 units a day.


A JPEG in the PDF is saved as the JPEG it already was — not decoded, not squeezed a second time. Other pictures become lossless PNG.
Charts, diagrams and logos drawn with lines rather than pixels come out as SVG: sharp at any size, and their labels are still text.
Fax-encoded scans, JBIG2 and JPEG 2000 — formats no browser shows — are decoded to PNG, and print colour (CMYK, Lab) becomes screen colour.
A picture is linked where the page drew it. A chart, a stamp or a sticky note, which a PDF keeps apart from its text, follows at the end of its page.
A PDF is made for printers. Markdown is made for readers — the people and the machines you hand it to.
For AI and for developers
The converter this page runs, reached three other ways. Each counts against the same allowance as the page.
Claude gets the API explained and a ready-to-run request for your file — options checked, a short-lived credential for your account included. No document passes through the chat, in either direction.
The same module, in a browser, in Node or on the command line.
$ npm i @dudko.dev/pdf-to-md-core
$ npx @dudko.dev/pdf-to-md-cli report.pdf
For pipelines: post a document, get Markdown back. Every option is documented, with a form to try it in.
POST /api/v1/convert
Read the API docs
Questions
No. The converter is a WebAssembly module that runs inside your browser tab. The only thing that leaves it is a count of conversions, sent to the sign-in service — never the document, its name or a word of what is in it.
Free to start. A few conversions need no account at all, and a free account adds more. When that is not enough, a paid plan lifts the limit — and the file still never leaves your browser, only the count does.
A scan is a photograph of text, and pdf2md does not do OCR. Instead of handing you an empty file it tells you the document is scanned, so you know to run it through an OCR tool first and convert the result.
Tables drawn with rules, and tables laid out by alignment alone, come out as Markdown tables. Very elaborate ones — cells merged across rows, a table broken over two pages — can need a touch-up afterwards.
Yes. Turn on Extract images and every picture is saved as a file and linked from the Markdown: photos as JPEG or PNG, charts and diagrams drawn with lines as SVG with their labels still text. Fax-encoded scans, JBIG2 and JPEG 2000, which browsers cannot show, are decoded to PNG. A picture that cannot be turned into an honest image file is noted in the Markdown rather than guessed at.
Yes. Paste the Markdown into any chat — it is the format language models read best. In Claude you can also add pdf2md as a connector: it gets a ready-to-run request for your file, and the document itself never passes through the conversation.
Yes. Type the password under Options. It is used inside the tab, like the file, and sent nowhere.
Drop several PDFs at once and each gets its own result. For hundreds or thousands, the command-line tool and the HTTP API do the same job in a script.
Personal and other non-commercial use is free under PolyForm Noncommercial 1.0.0, and there is a 32-day trial for trying it out at work. Commercial use needs a licence — write to sergey@dudko.dev.
Drop to convert
It stays on your computer.