Bank statements to CSV. One row per transaction, and a balance that adds up.
A CSV converter hands you rows whether or not they mean anything. If amounts arrive as text, a repeated page header lands mid-ledger, or the running balance was never checked, the file breaks the moment it is imported — and the person importing it has no way to know. SheetParser rebuilds the ledger first, proves it row by row, and only then writes the CSV.
1 file a day free, up to 10 pages · paid packs run up to 150 pages per file · files shredded after conversion
Bookkeepers importing to Xero
A five-column file whose order and sign convention match the import screen, so the upload does not bounce back at 11pm.
Analysts feeding a pipeline
Clean UTF-8, one header row, numbers as numbers and ISO dates — no pre-cleaning script between the statement and the data frame.
Owners handing data to their accountant
One file per account with the balance already proven, instead of a folder of PDFs and a question about which month is missing.
What this actually fixes
Amounts arrive as text
Thousands separators, currency symbols and parentheses turn every amount into a string. SUM() returns zero and the pivot table treats the column as a label.
Page furniture becomes data
Repeated headers, 'continued from previous page', page numbers and subtotal lines get written as transactions, so row counts and totals are wrong before anyone touches them.
Nothing checks the arithmetic
A converter writes rows whether or not they reconcile. The break surfaces weeks later inside the accounting system, where it is much harder to trace.
What comes out
One upload, one set of compute-ready outputs — not a screenshot of a table.
One row per transaction
No merged cells, no subtotal rows, no repeated headers. Each line of the statement becomes exactly one row, in the order it appears on the page.
Amounts as numbers, dates as dates
Debit and credit in separate numeric columns with two decimal places, dates normalised to YYYY-MM-DD. No currency symbols, no thousands separators.
Running balance recomputed
Opening + deposits − withdrawals = closing is checked after every row. Where the chain breaks, the row is flagged — never silently corrected.
Three export shapes
A plain comma-delimited CSV with a header row, a Xero-format Date/Description/Debit/Credit/Balance CSV, and the .XLSX workbook if the destination prefers Excel.
Source page per row
In the workspace every row links back to the page and region it was read from, so an odd line can be sent back to the statement in one click.
Opens cleanly in Excel
UTF-8 with a BOM and CRLF line endings, so double-clicking the file does not produce a column of garbled descriptions.
Documents we read
Native PDF, scan, phone photo, Word, Excel, PowerPoint, CSV, HTML, email or image.
How it works
Upload the statement
Native PDF, scan, photo or a CSV that needs to be reshaped. 1 file a day is free up to 10 pages; paid packs open files up to 150 pages.
The ledger is rebuilt and proven
Transaction rows are reconstructed from the page, headers and page furniture are removed, and the running balance is recomputed end to end.
Export the CSV the destination expects
Download the comma-delimited CSV, the Xero-shaped variant, or the .XLSX workbook. Anything flagged stays flagged in the workspace.
Every plan, every audience
- One file = one credit, up to 150 pages on a paid pack
- No merged cells; numbers arrive as numbers
- Every extracted value traces back to its source page
- Files shredded after conversion, never used for training
- A fresh file allowance every billing cycle; cancel anytime
- An optional hash-bound certificate anyone can verify for free
Questions
What columns does the CSV contain?+
By default Date, Description, Debit, Credit and Balance — the five-column layout Xero and most bank import screens expect. A single signed Amount column is available when the destination wants one number per row instead of a debit/credit pair.
Will Excel open it without breaking the characters?+
The file is written as UTF-8 with a BOM and CRLF line endings, so accented merchant names and non-English descriptions survive a double-click in Excel. Plain UTF-8 without a BOM is available for pipelines that prefer it.
What happens if the statement does not balance?+
The row where the balance chain breaks is flagged and listed in the cross-check panel with a link to the source page. The CSV still exports, but you can see exactly which rows are unproven before you import them anywhere.
Does the CSV carry provenance?+
The CSV columns stay clean so the import screen accepts them. Provenance lives in the workspace: every row links to the page and region it came from, and the .XLSX export carries the source table alongside the rows.
Can I get one file per account or per month?+
Yes. Upload the statements as one combined file or as separate months; the export gives one CSV per ledger, with the statement period stated so nothing is merged across accounts by accident.
How much does it cost?+
1 file a day is free up to 10 pages. Monthly plans start at $79/mo with up to 20 files a month, cancel anytime, and annual plans give two months free.
Run your next file
Upload the document, get compute-ready output with the source page behind every number. 1 file a day is free.