Scanned PDF to Markdown
AI OCR — Tables Included
Drop a scanned PDF and get clean Markdown. Pages without selectable text are read by an AI vision model, tables as Markdown tables. Free for the first 2 pages of each file — no account, no install.
Why scanned PDFs come out empty
Most PDF-to-Markdown converters, including Microsoft's MarkItDown, read the PDF's text layer: the characters stored in the file. A scanned PDF has none. Each page is a picture of text, so the converter finds nothing and returns an empty file, or one that holds only page numbers. MarkItDown users report it on GitHub: "Markitdown produces nothing?" and OCR on non-text-layer PDFs generating only page numbers.
How RawMark reads a scanned page
Find the scanned pages
Every page is checked for selectable text. Pages that have it go through MarkItDown, as before.
Render at full resolution
Each scanned page becomes an image 1,568 px on its long side, whatever page size the PDF declares, so small print stays legible.
Read with AI
A vision model (Anthropic Claude) transcribes the page into Markdown: headings, lists, paragraphs, and tables row by row.
What we tested
On 12 October 2026 we built six documents with known content, printed them to PDF, then turned each into a scan: rasterized at 150 dpi, slightly rotated, with grain added. Then we compared RawMark's output with the original text, word by word and row by row.
Tables
An income statement, an invoice, a 7-column timetable and a results table: every row of every table came back exactly as printed.
Dense text
A two-column page in 9 pt type, 571 words: all 571 came back, in the right order.
Plans and limits
- Free: the first 2 scanned pages of each file, within 5 free conversions a day.
- Paid plans: up to 50 AI-read pages per file. The Unlimited plan includes 2,000 AI-read pages a month.
- Files: PDF up to 20 MB. Pages beyond the limit are marked in the result, never skipped silently.
Paid plans can also turn on AI accuracy, which reads every page of a digital PDF with AI: useful when MarkItDown merges the columns of a table. See pricing.