PDF to Markdown
Convert the text in a PDF to Markdown instantly. Your file is not kept on our server. Works with PDFs that have selectable text, such as those from Word or Google Docs.
Limits
- Files up to 10 MB and 50 pages, up to 3 MB of content after decompression, and up to 20 seconds of reading. Output is cut at 2 MB and flagged with truncated.
- Reads the text layer only, with no OCR. Images, tables and columns come out as text in position order.
- Files are not stored or logged. They are read in a separate process that holds no secrets, and removed from memory as soon as we reply.
- 30 requests per IP every 15 minutes (IPv6 counts the whole /64), and 2 files read at once across the whole system. Beyond that you get 503 busy with Retry-After.
- This page calls the same API you can call yourself. Nothing extra happens in the browser.
Frequently asked questions
- Why do I get plain text with no # headings or Markdown tables?
- A PDF only stores where each character sits, not headings or tables. So we return the lines as read and only separate pages with ---. If you need structure, ask for the source file (.docx) or use a layout analysis tool.
- Can I use a scan or a photo of a document?
- Not yet. You get 422 no_text_layer because the file has no text in it. OCR is planned, but it needs a job queue first.
- Can it read Thai?
- Yes, when the file embeds its fonts with a Unicode table, which files from Word, Google Docs and browsers already do. Older files without embedded fonts may come out garbled.
- Why are there gaps inside words or odd characters?
- Files printed from a browser place characters in groups, and we return them that way. Some fonts also merge fi and fl into one character. Use text.normalize('NFKC') in JavaScript to split them back.
- Is my file safe?
- The file stays only in the memory of the process reading it. It is not written to disk, its content is not logged, and nobody on our team sees it. The requestId in an error can trace a request without any of the file's content.
- Can I call it from JavaScript on my website?
- Yes. The API sends CORS headers for every domain, so you can send the file with fetch and FormData directly, without going through your server.
Related tools
- Pick colors from an image
Tap a color in an image or on your screen, then copy HEX, RGB, HSL and the main palette as CSS. Full-screen mode included. Images are not uploaded. Picking from the screen needs a supported browser.
- ReefLink
Shorten links on reefsight.tech with a QR code and click counts.
- Quotations, invoices and receipts
Fill in the company, customer and items to get an A4 quotation, invoice or receipt with VAT, discounts, withholding tax and the amount in words. Save as PDF. Your data stays on your device.