Bank statement to CSV
A CSV that imports anywhere, cleanly.
Convert PDF bank statements into a consistent, UTF-8 CSV with one row per transaction: the same column layout every time, whichever bank the statement came from.
50 free page credits · No card · Cancel anytime
- Consistent columns
- One row per transaction
- Scoped to your filters
Export transactions
1,284 rowsFormat
| Date | Description | Amount |
|---|---|---|
| 2025-10-24 | STRIPE PAYOUT 4af2c9 | +4,820.00 |
| 2025-10-23 | AWS EMEA SARL | −1,204.00 |
| 2025-10-22 | WHOLE FOODS MKT | −112.88 |
PDF statement you upload
24/10 STRIPE PAYOUT 4af2c9........4,820.00
23-10 AWS EMEA SARL us-east-1 1,204.00-
22 OCT WHOLE FOODS MKT #214 112.88
21/10 UBER *TRIP..............24.40
20-OCT-2025 GUSTO PAY 9931 18,440.00
[illegible: scan quality]
CSV file you download
date,narration,merchant,category,amount
2025-10-24,STRIPE PAYOUT 4af2c9,Stripe,Income,4820.00
2025-10-23,AWS EMEA SARL us-east-1,Amazon Web Services,Software,-1204.00
2025-10-22,WHOLE FOODS MKT #214,Whole Foods,Groceries,-112.88
2025-10-21,UBER *TRIP,Uber,Travel,-24.40
2025-10-20,GUSTO PAY 9931,Gusto,Payroll,-18440.00
Every bank's CSV is a different CSV.
When a bank offers a CSV download at all, the columns differ from the next bank's: debits and credits split across two columns here, one signed column there, dates in three different orders, descriptions truncated at forty characters. Any script or import mapping you build for one account breaks on the next. Converting from the statement itself gives you one stable schema instead.
How it works
From PDF to CSV, screen by screen
- 01
Upload or forward
Drag in a PDF, CSV, XLSX, or JSON statement up to 50 MB, or forward the statement email to your private import address.

Both routes are on the same screen: upload the file yourself, or hand the bank's email a private address to forward to. - 02
Confirm the import
Review the queued files and set whether statements carrying warnings should count in your analytics. Nothing is read until you confirm.

The warning types that still count are listed by name, so the policy is a decision rather than a surprise. - 03
Parse and validate
Transactions are extracted and reconciled against the statement's opening and closing balances.

The stage and the elapsed seconds are both on screen. This statement was through the queue in four. - 04
Filter to the rows you want
Narrow by date range, amount, category, credit versus debit, or account source before you export.

The totals above the table follow the active filters, so you can see the scope before you export it. - 05
Export the CSV
Download exactly those rows in the standard column layout, ready for import or scripting.

CSV selected, the column set and their order fixed, and the exact rows previewed before the download.
Built to be imported by something else
One stable schema
The same columns in the same order regardless of the source bank, so your import mapping or parsing script only has to be written once.
Filter-scoped exports
The CSV contains exactly the rows your active search and filters produced: one month, one category, one account.
Multi-account merges
Combine statements from several accounts into a single CSV, with a Source column preserving where each row originated.
Validated before it leaves
Balance checks run on the parse, so an incomplete extraction is flagged rather than exported as a quietly short file.
Same data over the API
Anything you can export by hand can be listed or exported programmatically from the v1 API, with webhooks for new statements.
Excel and QBO alternatives
The same reviewed rows export as XLSX for spreadsheets or OFX/QBO for QuickBooks, with no re-work.
CSV column layout
The same header row on every export, whatever the source statement looked like.
| Column | Format |
|---|---|
| Date | ISO-style date, consistent across all banks and statements. |
| Narration | Cleaned description text, quoted so embedded commas are safe. |
| Merchant | Canonical merchant resolved from the narration. |
| Category | Assigned category at the time of export. |
| Subcategory | Finer-grained classification under the category. |
| Tags | Custom tags, comma-separated within the quoted field. |
| Amount | Single signed decimal column: negative debits, positive credits. |
| Source | Originating statement and account. |
Files are UTF-8 encoded with a standard header row, so spreadsheet apps and scripts both read them without configuration.
FAQ
Common questions
How do I convert a bank statement PDF to CSV?
Upload the statement, wait for parsing and balance validation, apply any filters you want, then export as CSV. The download uses the same column layout for every bank.
Why not just download the CSV from my bank?
You can, when the bank offers one, but bank CSVs differ from each other in column layout, date format, and how debits and credits are signed, and they usually only go back a limited number of months. Converting from the statement gives you one consistent schema and whatever history you have PDFs for.
Are debits and credits in one column or two?
One signed Amount column: negative for debits, positive for credits. That keeps SUM and scripted aggregation straightforward.
Can I automate this?
Yes. POST files to /api/v1/parse with a personal access token and list or export the transactions programmatically, or register a webhook to be notified when a statement finishes.
Will the CSV open correctly in Excel?
Yes, though if you are going straight into a spreadsheet the XLSX export is usually better. It carries real date and number types instead of relying on Excel's import guesses.
How much does it cost?
New accounts get 50 free page credits with no card required. See the pricing page for what happens past that.
Converting a statement from a specific bank?
Written up for the format each of these banks prints.
Keep exploring
Bank Statement → Excel
Download a clean XLSX of every parsed transaction.
Bank Statement → OFX
Plain OFX for Xero, GnuCash, and Moneydance.
PDF → QBO
One-click QBO conversion for QuickBooks Desktop and Online.
Live example
A real Bank of America statement read into transactions you can trace back to the page.
Bank Statement → QuickBooks
Categorize first, then export an OFX/QBO QuickBooks imports.
One schema for every bank.
Convert a statement to CSV and see the column layout you can finally build an import against.