Yes, there is an open source PDF to Excel converter you can run yourself. Tabula is the best known: it is free, runs on your own computer, and exports a table as CSV that Excel opens. It works only on PDFs with real text, and the setup and cleanup cost time instead of money.
Which open source PDF to Excel converter tools exist?
A handful of open source tools pull tables out of PDFs, and they fall into two kinds: desktop apps with a point-and-click window, and code libraries you call from a script. Tabula is the app. Camelot and pdfplumber are Python libraries. Their built-in table readers need a PDF with real text.
Here is how the common choices compare for someone who wants a bank statement in a spreadsheet:
| Tool | Kind | You need | Output | Fit for a non-programmer |
|---|---|---|---|---|
| Tabula | Desktop app with a browser window | Java (the Mac package bundles it) | CSV | Yes |
| Tabula-py | Python wrapper around Tabula | Python and Java | Data tables in code | No |
| Camelot | Python library | Python | Data tables in code | No |
| pdfplumber | Python library | Python | Text and tables in code | No |
The first row is the practical one. The Tabula project page on GitHub describes it as a tool that helps you "liberate data tables trapped inside PDF files," run through a simple web interface that exports CSV. It is volunteer-run and MIT-licensed, so you can use it at no cost and read its source.
The libraries are for people who already write Python. They give more control, for example choosing exactly where a table starts and which column edges to use, but you write the code to do it. A person who has never opened a terminal should skip them. The rest of this post concentrates on Tabula for that reason.
There is a shared limit that matters more than any feature. The Tabula page states that it "only works on text-based PDFs, not scanned documents." Camelot's README on GitHub says its built-in parsers need a text-based PDF and points scanned files to an optional OCR add-on, and pdfplumber's README says it works best on machine-generated PDFs and does not do OCR. If your statement is a scan or a phone photo, these tools cannot read it as they come, and you need OCR first. That case is covered in converting a scanned PDF to Excel for free.
A quick test saves time before any install. Open the PDF in a viewer and try to select a line of text with your cursor. If words highlight, the file has a text layer and Tabula can work with it. If one block highlights, or nothing does, stop here.
Running an open source table extractor on a bank statement
Running Tabula on a statement takes seven steps: start the app, upload the PDF, mark the table on each page, preview the result, choose an export format and open the CSV in Excel. The worked example below uses an invented two-page statement with a date, a description, an amount and a balance.
Worked steps
- Start Tabula. On Windows, unzip the download and open
tabula.exe. On a Mac, unzip it and open the Tabula app. On Linux, the project offers a snap package. Tabula opens a page in your web browser at a local address, 127.0.0.1, which means the file stays on your own machine. - Click to browse for your PDF and choose Import. Tabula shows each page as an image with the text layer behind it.
- Click Autodetect Tables. Tabula draws boxes around what it takes to be tables. On a bank statement it may box the transactions, the account summary, or both.
- Fix the boxes. Delete the ones that cover the summary or the footer. Drag the edge of the transaction box so it starts at the first transaction and ends at the last balance. Tabula's selections apply per page, so check every page.
- Click Preview & Export Extracted Data. Tabula shows the rows it found.
- Pick an extraction method. Tabula offers one that uses the drawn lines between cells (often called Lattice) and one that uses the gaps between words (often called Stream). Try both on your file. Statements printed without a grid usually need the second.
- Choose CSV as the export format and click Export. Open the CSV in Excel. If Excel puts everything in column A, use Data, Text to Columns, or import the file through Data, From Text/CSV.
Checking the output
Do not trust the first export. Compare it with the PDF in four places:
- The number of rows against the page.
- The opening and closing balance.
- A deposit and a withdrawal with the same dollar amount, to make sure signs and columns are not mixed.
- The last row on each page and the first row on the next, where a split table can drop or duplicate a line.
For a one-off example, imagine a statement whose first page ends with a balance of 3,055.05 and whose second page starts with a transaction dated 03/06. If your CSV has both pages but the 03/06 row sits above the previous balance, the box on page two was drawn too high and picked up a repeated header line.
A statement is more than a table of strings. Dates arrive as text, amounts may carry commas and a trailing minus, and some statements print a debit and credit in one column. The fixes for text amounts are the same as in any spreadsheet and are covered in fixing text numbers in an XLSX export.
Open source converter setup cost: Java, Python and an evening
The money cost of open source is zero. The time cost is the install, the first successful run, and the cleanup on every later file. For Tabula, plan on under an hour for a first working export. For Python tools, plan on an evening if you have never set up Python.
These figures are estimates for a person who is comfortable installing software but is not a developer. Your own times will differ.
| Task | First time | Each later file |
|---|---|---|
| Download and start Tabula (Java included on Mac) | 10 to 20 min | 1 min |
| Install Java separately (Windows or Linux if missing) | 15 to 30 min | none |
| Select tables and export a 2-page statement | 15 min | 5 to 10 min |
| Select tables and export a 10-page statement | 30 min | 15 to 25 min |
| Fix columns and text amounts in Excel | 10 to 20 min | 5 to 15 min |
| Install Python, a library and run a first script | 1 to 3 hours | 5 min if the script works |
Tabula's page says it needs a Java Runtime Environment compatible with Java 7, meaning Java 7, 8 or newer. It also notes the Mac package bundles Java. On a Windows machine where Java is missing, you add a separate download to the job, and corporate laptops often block that install.
The Python route has the biggest first-time cost, and it is a different skill from using a spreadsheet. You install Python, create an environment, install the library, then write or paste a script and adjust its settings until the columns line up. Once a script works for one bank's layout, later files from that bank are fast. A different bank's layout often needs a different script.
What happens when you update or switch banks
Open source tools cost you maintenance as well. The Tabula page says the desktop app is volunteer-run and unlikely to see updates soon, so a later Java or operating system change may go unfixed. A bank that changes its statement layout can break a script that worked last month. No support line answers you. You read project issues, search forums and try things.
None of this makes the tools bad. It means the cost is paid in attention, and the price comparison below turns that attention into dollars.
When does open source PDF extraction beat a paid converter?
Open source beats a paid converter when the PDF has clean text and a ruled table, when you convert in volume with a script that already works, or when a file must never leave your computer. It loses on scans, on messy layouts and on one-off jobs where setup costs more than the fee.
It is a good fit in these cases:
- You are a developer or analyst who already works with Python and wants control over extraction.
- The file is sensitive and policy says it must stay on your machine. Tabula runs locally, so nothing is uploaded. Compare that with the upload questions in a converter's privacy terms.
- Layouts are stable. If one bank sends the same layout every month and you build a script once, later runs cost almost nothing.
- Many files are uniform. Fifty statements from one bank can justify the setup.
It is a poor fit in these cases:
- You have one or two statements and no wish to learn a tool.
- The PDFs are scans or photos.
- The statements come from many banks, so you re-tune the extraction for each.
- Your time is worth more than the fee per statement.
The price comparison
CheapBankConvert charges once per document, with early prices of $2.99 for a statement up to 10 pages and $5.99 for one up to 40, and it previews the first 2 pages free. Those prices may change before launch, and the service is still getting ready to open. If a Tabula run takes you 20 minutes and your time is worth $20 an hour, that file costs about $6.67 in time, before the cleanup. On those numbers the fee is cheaper from the first file. Open source pays off only once a working setup cuts each later file to a few minutes, which is why it rewards volume and patience, not a single job.
If you only want a free route without installing anything, the tools already on your computer may be enough. Can I convert a PDF to Excel with tools I already have? ranks them. A Microsoft 365 subscription gives you another one, described in converting a PDF to Excel with Office 365.
Open source extraction edge case: statements without ruling lines
Many bank statements draw no lines between columns, so an extractor that looks for ruling lines finds no table or the wrong one. The words still sit in tidy vertical bands, and a method that reads the gaps between words can recover them, with a few mistakes you must check.
A ruling line is a drawn horizontal or vertical line between cells, like the grid of a spreadsheet. Statements from online banking often have only shading, spacing or a thin rule under the heading row. Lattice-style extraction needs lines, so it returns nothing or a single cell. Stream-style extraction needs only the white space, so it is the method to choose here.
Why it still misses
Reading by gaps has its own failure modes:
- Two columns merge. If a description runs close to the amount column, the extractor joins them. The row then holds "Example Grocer #114 48.20" in one cell.
- A wrapped description splits. The second line of a long payee has no date or amount, so it becomes its own row.
- A column drifts across pages. The amount column on page two sits a few points to the left of page one, so the same column edges cut it.
- Debit and credit share a column. The extractor cannot tell which is which without the sign or the heading, so the signs need checking by hand.
The practical fix is to draw the column edges yourself. Tabula lets you adjust the selection box, and the libraries let you pass explicit column positions. Draw them from the first page, then check whether they fit page two.
If all this tuning feels like the job you were trying to avoid, it is. A statement with no ruling lines is where hand-tuned open source costs the most time, and where a converter built to read statement layouts earns its price. The same trade applies to the scanned case, linked above.