Drop a file, or paste a URL
Drop it.
PDF · DOCX · PPTX · XLSX · HTML · CSV · MD
Drag anywhere in the frame, or O
Anything to Markdown. PDF, DOCX, PPTX, XLSX or a URL in — clean, structured, model-ready text out.
Drop it.
PDF · DOCX · PPTX · XLSX · HTML · CSV · MD
Drag anywhere in the frame, or O
Free · one conversion a day, no account. Today’s is still yours.
pip install crunch-md WHY BOTHER
The same document, in a format a model can read without paying to look at a picture of it. Four claims below, each with the number it rests on and where that number came from.
01 · TOKENS
Send Claude a PDF and it charges you for the text it pulls out and for a rendered image of the page. Markdown drops the image. Same words, same headings, same tables — one bill instead of two.
64% fewer input tokens, on Claude.
crunch.md measured in-process over 16 real PDFs, 152 pages, exact tiktoken o200k_base counts · reproduce with ‘crunch bench’ · read 2026-09-06
Anthropic PDF support — the system converts each page into an image, and extracts the text alongside it source ↗ · read 2026-09-06
Anthropic vision — page image costs ceil(w/28) × ceil(h/28) visual tokens, capped at 1,568 source ↗ · read 2026-09-06
Gemini charges a flat 258 tokens per PDF page and doesn't bill you for the text it extracts itself. There our Markdown costs about 2.9× more — crunch.md buys you structure, not tokens. OpenAI publishes no per-page figure at all, so we make no claim about it.
Google document processing — each PDF page counts as a flat 258 tokens source ↗ · read 2026-09-06
OpenAI file inputs — says PDF parsing "can increase token usage", publishes no per-page figure source ↗ · read 2026-09-06
Pipes, hashes and dashes cost 1.34× the bare words — 760 tokens against 566. That is the trade: a third more input, and the table still reads as a table.
Anthropic documents 1,500–3,000 tokens per page for extracted text alone, with the image on top, and its own worked example implies ~2,000 tokens of image a page. We used the documented cap instead. The real saving is likely larger than the bar shows.
02 · PREFILL
A model prefills the whole prompt before it emits a first token, and it does it more slowly the longer the prompt gets. Cutting the input is the only lever that shortens the wait.
MLX M3 Ultra Mac Studio, Qwen 32B, prompt-processing tokens/s by context length source ↗ · read 2026-09-06
Against a native PDF the input drops from 2,134 tokens a page to 760 — 64% less to prefill. And because the rate climbs as the prompt shrinks, a shorter prompt is faster per token as well as shorter.
A local model can't read a PDF at all, so the honest comparison there is against a raw text dump — and our Markdown is about 1.34× that. On your own hardware you pay a little more prefill, and get a document the model can navigate. We are not going to pretend that is a speed-up.
OUR SIDE OF THE CLOCK 365 ms a page · about 2.7 pages a second
ESTIMATEcrunch.md measured in-process over 16 real PDFs, 152 pages, exact tiktoken o200k_base counts · reproduce with ‘crunch bench’ · not yet re-measured on the production box, which is slower than the machine this ran on · read 2026-09-06
03 · MONEY
Input tokens only, at published list prices, on the model you pick. The multiplication is printed underneath so you can check it.
List price for input tokens. Output is the same either way, so it is not counted here.
YOU KEEP $27.48 a month
Anthropic published API list prices, input tokens · a snapshot, they move source ↗ · read 2026-06-24
crunch.md measured in-process over 16 real PDFs, 152 pages, exact tiktoken o200k_base counts · reproduce with ‘crunch bench’ · read 2026-09-06
Read that honestly. At 1,000 pages a month on Haiku 4.5 the saving is $1.37 — real, and small. This is a volume argument, and it is a bill you pay to a model vendor, not to us. If your reason to crunch is structure rather than spend, §04 is the one that matters.
04 · STRUCTURE
Fewer tokens is the argument people check. This is the one that decides whether the answer is right. Headings, tables, lists and footnotes come through as headings, tables, lists and footnotes — so a chunk stays citable and a number stays attached to its row.
Plan Pages/day Formats API Free 1 PDF, DOCX no Plus 200 all no Pro 2,000 all yes
| Plan | Pages/day | Formats | API | | ---- | --------- | --------- | --- | | Free | 1 | PDF, DOCX | no | | Plus | 200 | all | no | | Pro | 2,000 | all | yes |
Illustration — the same rows, formatted two ways. Not a measurement.
HOW WE MEASURED
16 real multi-page PDFs — technical specs, a strategy deck, brochures, a table-heavy
pricing matrix, one-pagers — 152 pages in total, run through crunch-core in-process
with exact tiktoken o200k_base counts rather than a heuristic. Mean 566 tokens of extracted text a page in, 760 tokens of Markdown
out, at 365 ms a page. Run it yourself: crunch bench.
Two caveats we would rather you heard from us. The timing was measured on a developer machine, not on the production box, which is slower — treat it as a floor, not a promise. And the token saving is stated against Claude, which bills a rendered image of every PDF page; on Gemini the same conversion costs more, not less, and §01 says so.
Last checked 2026-09-06.
WHO THIS IS FOR
A token count is abstract until it is your document. Pick the desk you recognise. The panel says what arrives, what it costs to hand a model the file as it is, which part of the structure a plain text dump destroys, which surface fits the workflow — and what crunch.md still gets wrong on that desk.
A 180-page share purchase agreement: ninety pages of operative clauses numbered four levels deep, sixty pages of schedules, and a scanned execution bundle at the back.
Hand the file over as it is and the context window is largely spent before anyone asks a question about clause 8.2.1.
8.2.1 stays nested under 8.2, under 8. Defined terms keep their capitals, schedules stay tables. Flatten it and a model can still quote clause 8.2.1 — it just can no longer tell you what that clause hangs off, which is usually the answer.
Drop the file on this page for one agreement. Call POST /v1/crunch when the bundle arrives as forty attachments and nobody is going to drag them across one at a time.
The execution bundle is scanned. OCR is not shipped yet, so crunch.md detects the scan, refuses to invent text, and names the pages it could not read rather than returning an empty section that looks converted.
A 200-page prospectus: rate tables by tenor and currency, a fee schedule, risk factors, and four pages of footnotes that every figure above depends on.
One document, and the page images alone outweigh everything else you were going to put in the request.
Every cell keeps its row label and its column header. In a flat dump 3.75 arrives as a bare number and the model infers which tenor and which currency it belonged to — the one thing on the page nobody may infer.
pip install crunch-md and run it inside the perimeter. The base path is deterministic and makes no model call, so the prospectus never leaves the building in order to become Markdown.
A cell merged across two columns is flattened into one. The conversion does not hide it: the response carries a warning naming the table, so you know which one to check by eye.
A 90-page clinical protocol: inclusion and exclusion criteria, a schedule-of-assessments grid, and a dosing table banded by weight.
Multiply it by every amendment and every sister protocol in the study folder, before the first question is asked.
A dose stays bound to its weight band and its unit. Flattened, 12.5 floats free of the band it belongs to — and a misattributed dose is not a formatting problem.
POST /v1/crunch from inside the pipeline. The base path is deterministic — same input, same Markdown, same structure map — which is what a validated system has to be able to say about a step.
Figures are not read. A structure diagram or a gel image comes back as a placeholder holding its position in the document, never as a description we generated for it.
A tender pack of about 300 pages: an ITT in PDF, the requirements matrix as XLSX, a question-and-answer addendum in DOCX, and two annexes nobody mentions until day nine.
That is the pack once. A bid team goes back into it a dozen times.
Requirement id, mandatory or desirable, and the response cell stay one row you can answer down. Flatten it and every M and D comes loose from the requirement it graded.
Drop one document here to see what comes back. Then run the CLI over the folder: four formats, one command, one Markdown tree the whole bid team can search.
Older consultations and scanned statutory instruments are images of text. Those need OCR, which is not shipped. Born-digital PDF converts; a 1998 photocopy does not.
A 60-page component datasheet: parameter tables with min, typical and max columns, test conditions in footnotes, and dimension drawings at the back.
A part library holds hundreds of these, and every one of them gets revised.
The units row stays attached and a footnote marker stays in the cell it qualifies. Flattened, 2.7 3.3 3.6 is three numbers with no column and no test condition.
Run the CLI across the library and rebuild it when a revision lands — the output is deterministic, so the diff is the revision. Point an MCP client at the result and an engineer can ask across the whole set instead of one datasheet at a time.
A dimension drawing is a figure placeholder. The callouts inside it live in the image, not in the text layer, so the tolerances you can cite are the ones that were in a table.
Whatever the ticket has attached: a 40-page vendor PDF, an exported wiki page, a spreadsheet of test cases — arriving mid-conversation, in four formats, unannounced.
For one attachment, on one turn, inside an agent loop that had other things to spend a window on.
Headings come back as a structure map, so chunks can break where the document breaks instead of every thousand characters. A table survives inside the chunk that cites it.
The agent calls the crunch tool before it reads. The model sees Markdown; the raw file never enters the context window at all.
crunch.md does not chunk, embed or store anything. It returns Markdown and a structure map — the splitter, the index and the retrieval are still yours to write.
The six documents above are typical shapes, not files we converted, and nobody named here is a customer. Every total is arithmetic rather than a measurement: page count × 1,500–3,000 tokens per page, which is the range model vendors quote for native PDF input, where each page arrives as a rendered image alongside its extracted text. We did not measure that range: it is a planning figure, and it gets replaced by measured per-page values once the benchmark corpus runs. Read every total as an estimate. Read the catches as the part we would rather you found here than after you uploaded something.