FileKiln

PDF to CSV Converter

Extract tables and text from a PDF into CSV, entirely in your browser. Built for bank statements and reports - files that should never touch someone else's server.

Ready when you arepdf → csv

Runs on your computer. Nothing gets uploaded.

Your stuff stays yours. Your file is opened with JavaScript inside this page. It is never transmitted, and the tool keeps working with the network unplugged.

Drop in a PDF - a bank statement, a card statement, an exported report - and get its text back as CSV rows you can open in a spreadsheet. Extraction runs on Mozilla's open-source pdf.js, the same engine Firefox uses to display PDFs, entirely inside this page. That matters more here than for any other tool on this site: a bank statement is the single worst file to hand to a random "free converter" server, and with this one there is no server. The reconstruction is honest about being heuristic: text is grouped into rows by position and split into columns at visible gaps, which works well on statement-style layouts - and you can see every row on screen before you download, so nothing is silently wrong.

How to use the PDF to CSV converter

  1. Click Choose a .pdf file, or drag the PDF onto the drop area.
  2. Wait for the status line. It reports how many pages were read and how many CSV rows came out of them.
  3. Read the result in the text box. Each line of CSV is one visual line of the PDF, and an empty line marks the break between two pages.
  4. Click Download CSV. The file keeps the PDF's name with a .csv extension.
  5. Open it in your spreadsheet and delete the header, footer, and summary rows you do not need.

Why a PDF has no real table inside it

A PDF page is a list of drawing instructions. Text is placed by operators that say, in effect, "draw this run of characters starting at this point." Positions are measured in points (1/72 of an inch) from the bottom-left corner of the page. There is no row object, no cell, and no column in an ordinary PDF. A word can be one text run, or the generator can break it into several runs, sometimes one per letter. That is why every PDF-to-spreadsheet tool has to rebuild the table from coordinates.

This tool rebuilds it with a fixed set of rules, applied to the text runs that pdf.js reports for each page:

  • Runs that contain only spaces are dropped.
  • Runs are sorted top to bottom, then left to right.
  • A run joins the current line when its vertical position is within 3 points of the first run on that line. Otherwise it starts a new line.
  • Within a line, a horizontal gap of more than 7 points starts a new cell. A gap between 1 and 7 points is joined with a space, and a gap of 1 point or less is joined with no space.

Nothing else is inferred. The tool does not detect dates or amounts, does not merge wrapped lines, and does not run OCR, so a scanned page contributes no rows at all.

Worked example

Suppose a statement page draws these lines, with wide gaps between the columns:

Date    Description                  Amount     Balance
01/05   WHOLEFDS MKT 10234 PORTLAND  -42.17     1,957.83
01/07   ACME PAYROLL                 1,250.00   3,207.83
01/09   RENT PAYMENT                 -1,400.00  1,807.83

The CSV comes out as:

Date,Description,Amount,Balance
01/05,WHOLEFDS MKT 10234 PORTLAND,-42.17,"1,957.83"
01/07,ACME PAYROLL,"1,250.00","3,207.83"
01/09,RENT PAYMENT,"'-1,400.00","1,807.83"

Values with a comma are quoted, which is standard CSV. Note the last amount: a cell that starts with a minus sign and is not a plain number gets a leading apostrophe. This blocks spreadsheet formula injection, but it also means -1,400.00 arrives as text.

Common problems and fixes

  • Negative amounts will not add up. Cause: the apostrophe guard above, which also applies to values like -$45.00. Fix: use Find and Replace to remove the apostrophe, the currency sign, and the thousands commas in that column, then set the column to a number format.
  • A description wraps onto its own row. Cause: the second line of a long description sits more than 3 points lower, so it becomes a separate line with one cell. Fix: merge it into the row above in your spreadsheet, or use the bank statement to CSV converter, which attaches short continuation lines to the transaction above.
  • Two columns land in one cell. Cause: the gap between them is 7 points or less, which happens with narrow layouts and right-aligned amounts. Fix: split the cell with your spreadsheet's Text to Columns feature.
  • Words are glued together, like WHOLEFDSMKT. Cause: the PDF generator placed the runs with no measurable gap between them. Fix: correct them in the spreadsheet. The spacing is not stored in the file, so the tool cannot recover it.
  • The column header and "Page 2 of 4" appear on every page. Cause: they are real text on each page. Fix: sort or filter the sheet and delete the repeats.

Related tools

For statements that should end up in accounting software, the bank statement to QBO converter builds a QuickBooks file instead of raw rows. Before you share the original PDF, the PDF metadata remover shows which author and software details it carries.

Questions this tool gets asked

Can I convert a PDF to CSV without uploading it anywhere?

Yes - nothing is uploaded. The PDF is parsed by JavaScript in this tab using Mozilla's pdf.js library. Load the page, go offline, and extraction still works. There is no server that could store your bank statement.

Why do my columns come out slightly wrong?

PDFs store positioned text, not tables, so every converter - including expensive ones - reconstructs columns by guessing at alignment. This tool splits columns at horizontal gaps, which suits statements and reports. If a wide cell swallows its neighbor, fix it in your spreadsheet; the row text itself is extracted faithfully.

My PDF produced an error about scans and OCR. What does that mean?

Some statements are scanned images of paper rather than digital text. Those contain no extractable characters, and reading them requires optical character recognition, which this tool does not pretend to do. Statements downloaded from online banking are almost always digital text and work.

Can it handle multi-page statements?

Yes - every page is extracted in order, with a blank line separating pages so month boundaries stay visible. Page count and row count are reported after extraction.

Does it work on password-protected PDFs?

Not currently. Remove the password first (your PDF viewer's print-to-PDF usually does it) and the extraction will run.

Related tools

Printable templates