PDF to CSV
PDF to CSV groups a PDF's embedded text into rows and columns by the gaps between characters, using mupdf in your browser - a best-effort guess, not a true table parser, and it can't read a scanned PDF at all.
Drag and drop, or click to upload a PDF
At a glance
- Accepts
- One text-based PDF file (not a scan)
- Outputs
- A CSV file of the detected rows and columns
- Where it runs
- Entirely in your browser, on your device
- What leaves your device
- Nothing - the file never leaves your device
- Limits
- No size or count cap; bounded by your device's memory; column detection is a positional guess and scanned PDFs have no text to read
- Account
- Not required - there is no sign-up
- Price
- Free, with no watermark and no usage cap
PDF to CSV reads a PDF's embedded text with mupdf and groups characters into rows and columns by the gaps between them - a small gap is a space within a cell, a larger one is a new column. It's a positional guess, not a true table parser, so it works best on simple, evenly-spaced tables and won't read a scanned PDF at all, since a scan has no text to read in the first place. Everything runs in your browser tab; the file is never uploaded.
How to use it
- Drag and drop, or click to upload a PDF with a text-based table.
- Check the detected rows in the preview - this is a guess, not guaranteed.
- Download the CSV once it looks right.
Frequently asked questions
Is my PDF uploaded to extract the table?
No - text is read and grouped into rows and columns entirely in your browser using mupdf. The file never leaves your device.
Does this work on scanned PDFs or photos of a table?
No - it reads the PDF's actual embedded text, positioned on the page. A scanned or photographed page has no text layer at all, just an image, so there's nothing here to extract - that needs OCR (optical character recognition), which this tool doesn't do.
How does it know where the columns are?
It groups characters into cells based on horizontal gaps: a small gap is a space within a cell, a large gap (roughly the size of the text itself) is a new column. It's a positional guess, not a true table parser - most simple, evenly-spaced tables come out clean, but a table with merged cells, multi-line cells, or an unusually tight layout may need manual cleanup afterward.
Why do some rows have a different number of columns than others?
Each row's columns are detected from that row's own spacing, independently of every other row. If a row has a genuinely blank cell in the middle, there's no gap there to detect, so the values after it shift left by one column in that row - the same limitation any gap-based extractor has without knowing the table's real grid ahead of time.
What happens with a multi-page PDF?
Every page is read in order and its rows are appended to the same CSV, one after another.
What if it finds no text at all?
You'll see a message saying so rather than an empty download. That almost always means the PDF is a scan - see the question above.