Accountants
Month-end closes where the bank feed didn't cover January, or the client only has PDFs. Convert, check, import, move on.
For accountantsUpload a bank or credit-card statement as a PDF, a scan or a phone photo, and download clean transactions. Every conversion is checked against the printed running balances, and any row that doesn't add up is flagged before you import it.
| Date | Description | Amount | Balance |
|---|---|---|---|
| 2026-03-03 | Card payment | -42.60 | 1,866.31 |
| 2026-03-05 | Deposit | 2,140.00 | 4,006.31 |
| 2026-03-08 | Utilities | -118.75 | 3,887.56 |
| 2026-03-12 | Supplier | -960.00 | 2,927.56 |
| 2026-03-15 | Card payment | -63.40 | 2,864.16 |
| 2026-03-19 | Transfer in | 500.00 | 3,364.16 |
Rebuilt balance 3,364.16 matches the printed closing balance
Xero and most other tools take OFX, QuickBooks takes QBO, Quicken takes QFX, older desktop software takes QIF, and a spreadsheet takes Excel or CSV. Pick the format on the way out. Excel and CSV for spreadsheets, OFX for Xero and most others, QBO for QuickBooks, QFX for Quicken, QIF for older desktop software, JSON if you're building something.
Format compatibility only. We are not affiliated with any of these companies. Compare the formats
Upload the PDF, scan or photo, wait while each page is read, and download the spreadsheet with the balance check already run over it.
Drop in a PDF, a scan, or photos of a paper statement. Bank statements and credit-card statements both work. Up to 20 MB or 100 pages per file.
Every row is extracted: date, description, debit, credit, balance. Then the arithmetic is verified: opening balance plus transactions has to equal each printed balance and the closing balance. Rows that don't reconcile get flagged.
Excel, CSV, QBO, OFX, QFX, QIF or JSON. Your file is discarded the moment the conversion finishes.

Every row is recalculated against the running balance the bank printed beside it, and any row that does not match is flagged in the file you download.
A converter that reads a statement and hands you a spreadsheet is asking you to trust it. We would rather prove it. StatementTable rebuilds the running balance from the transactions it extracted and compares it, row by row, against the balance printed on your statement.
| Printed on the statement | ||||
|---|---|---|---|---|
| Date | Description | Withdrawals | Deposits | Balance |
| Opening balance | 1,908.91 | |||
| 05/04 | STANDING ORDER RENT | 42.85 | 1,866.06 | |
| 05/07 | SERVICE FEE | 310.99 | 1,555.07 | |
| 05/10 | PAYROLL ACME CORP | 512.09 | 2,067.16 | |
| 05/11 | HOME DEPOT #6101 | 2.88 | 2,064.28 | |
| What you download | |||||
|---|---|---|---|---|---|
| Date | Description | Debit | Credit | Balance | Check |
| 2026-05-04 | STANDING ORDER RENT | 42.85 | 1,866.06 | ||
| 2026-05-07 | SERVICE FEE | 310.99 | 1,555.07 | ||
| 2026-05-10 | PAYROLL ACME CORP | 512.09 | 2,067.16 | ||
| 2026-05-11 | HOME DEPOT #6101 | 2.88 | 2,064.28 | ||
Rebuilt from the four rows above, the closing balance lands on the printed 2,064.28.
You get a green badge and can import with confidence.
That row is highlighted so you can fix one cell instead of re-reading 80. We never silently correct an amount.
Most credit-card statements print no running balance. The export marks the check as unavailable on those, rather than implying it passed.
Ask a general-purpose assistant to convert a statement and it does one thing: it reads the document and answers. A conversion here passes through seven layers, and four of them exist only to catch what the reading missed.
A PDF with real text under it, a scan, and a photo taken on a phone are three different problems. This layer counts the pages, decides whether the text layer can be trusted, and picks the reading path and the model from that. A native PDF never pays for image work it does not need.
A sixty page statement becomes sixty small independent problems, five in flight at a time. Nothing depends on one model holding sixty pages in mind at once, which is where long documents quietly lose rows out of the middle.
One pass instead The whole document in a single context, where the middle gets the least attention.
Each page comes back as data with a fixed shape, not as prose that has to be picked apart afterwards. A field the statement does not print comes back empty. Turkish and European number formats are converted, dates are disambiguated from the document's own country and language, and DR and CR suffixes keep their sign.
Worth knowing The statement is treated as data, not as instructions. Text planted inside a document to steer the model is ignored.
Statements print things at the page edge that are not transactions: balance brought forward, carried forward, devreden, nakli yekûn, page subtotals. Those come out. A transaction whose description runs over the break is joined back into one row. A row printed on both sides of a boundary is deduplicated.
One pass instead Those lines arrive as transactions, and the total is wrong by an amount nobody thinks to look for.
Opening balance plus every credit minus every debit has to equal each printed balance, and then the closing balance. Statements that print newest first are detected and checked in that direction. On credit-card statements the sign flips, because the printed figure is debt: purchases raise it and payments lower it.
One pass instead Nothing adds the column up, so a misread digit looks exactly like a correct one.
When the chain breaks at a page boundary, the two pages on either side are read again together in one request so the join is visible. The new answer replaces the old one only where it scores better against the printed balances. If the chain is still broken, the exact pages the failing rows came from go to a stronger model, up to five of them, under the same rule.
One pass instead Run the whole thing again and compare two answers by eye.
A statement whose chain closes is marked reconciled. A row that breaks it is flagged where it sits, and the amount is never quietly corrected on your behalf. A statement with no running balance column, which is most credit-card statements, is marked Check unavailable rather than passed. The status travels with the data into the JSON export.
The full walkthrough, with the failure each layer was built for
For a two-page personal statement you'll read over by hand, a general-purpose assistant may be enough. It stops being enough at the point where an accountant's work starts.
| The job | A general-purpose chatbot | StatementTable |
|---|---|---|
| Confidentiality for client data | Your problem Consumer chat inputs can be used to improve the model, depending on plan and settings. Under the AICPA confidentiality rule, sending client information to a third-party AI without consent is a disclosure. | Not kept The file exists only while your conversion runs. Our AI document-processing provider does not train on our data, and no file name or account number is logged. |
| Arithmetic and dropped rows | Unchecked A dropped row or a misread digit looks exactly like a correct one, and nothing adds the column up for you. | Reconciled The running balance is rebuilt and compared with every printed balance. Rows that don't add up are flagged. |
| A record for the reviewer | A transcript When someone asks how a figure was produced, a chat log is what you have. | Per-row result The check status sits beside every row, in the spreadsheet and in the JSON, and goes in the workpapers. |
| Repeatable results | Varies No memory between chats, and the columns and categories come out differently from one run to the next. | Same every time The same columns, the same checks, and a JSON export with the check status on every row. |
| Page limits on uploads | Capped Every plan caps pages per conversation and uploads per day, and the ceilings change. A year of statements for one client rarely fits in one chat. | Per file Up to 100 pages per file, as many files as you have pages for. 3 free pages a day, then from $0.079 a page. |
| Accounting import files | CSV to map A CSV has to be mapped to the right columns on every import, and QuickBooks Desktop takes bank transactions only as a QBO file. | OFX, QBO, QFX, QIF Plus Excel, CSV and JSON, all from one conversion. |
The full comparison, including where a chatbot is the better choice
Yes, and the balance check runs on those exactly as it does on a native PDF. Not every statement arrives as a clean PDF. Clients photograph paper statements, and banks hand out scans. Both go through the same pipeline, and the same balance check runs on the result, so a misread figure surfaces as a flagged row instead of a quiet error in your books.
That's the point of the check. On a scan you shouldn't have to trust the reader; you should be able to see where it went wrong, in a highlighted row.
Open the converter on your phone and take a photo of each page. Photos are downscaled in your browser before upload and treated as one statement, in the order you choose.
Month-end closes where the bank feed didn't cover January, or the client only has PDFs. Convert, check, import, move on.
For accountantsTwelve months of statements for a new client, at under 10 cents a page, with no subscription to carry between clients unless you want one.
For bookkeepersA year of statements before the tax deadline, converted in one sitting, with every row checked against the printed balance. A $9 pack covers it.
For sole tradersWe don't keep your file. It exists only while your conversion runs, then it's deleted.
Your statement is processed in memory and discarded when the response is sent. We write no copy of the file or its contents to disk or to a database. What's left afterward is a counter: how many pages were converted and whether the check passed. No file name, no account number, no transaction text.
Our AI document-processing provider reads the pages to extract the table. It doesn't train on the data and deletes inputs within 30 days.
Checkout, invoicing and tax are handled by our merchant of record. Card numbers never reach our servers.
No tracking cookies, no advertising pixels, no third-party analytics.
Buy a pack of pages and use them whenever you like, and they never expire. Converting every month? Practice and Firm roll unused pages over while you're subscribed. Either way, a conversion that fails costs you nothing.
Credit packs, for work that comes and goes
$0
3 pages every day, with or without an account
$9
60 pages · $0.15 a page
$29
300 pages · $0.097 a page
$79
1,000 pages · $0.079 a page
No. Your PDF is held in memory only while it's being processed and discarded when the response is sent. We don't write your file or its contents to disk or to a database. What remains is an anonymous counter, holding the page count, document type and pass or fail, with nothing that identifies you or your bank account. The extraction runs through our AI document-processing provider, which does not train on the data and deletes inputs within 30 days.
No converter can promise a number that holds for every document, and the ones that advertise a percentage are quoting their own test set, not your statement. We answer the question differently: every conversion is checked against the running balance the bank printed, so you can see whether it came across correctly on the document in front of you. Three pages a day are free, so you can settle it with your own statement before you spend anything. How we validate releases.
The extractor reads the printed table rather than matching a bank-specific template, so most banks work on the first try, which is also why scans and photos go through the same path. The supported banks page lists the layouts we have confirmed end to end. If yours is not on it, run one statement on the free tier and read the balance check.
It rebuilds your running balance from the transactions we extracted and compares it against the balance printed on each line of your statement. Opening balance plus transactions has to equal each printed balance and the closing balance. When a line breaks the chain, that row is highlighted with the difference shown, so you can check one cell against the PDF instead of proofreading the whole file.
Many credit-card statements print only a previous balance and a new balance, with no running balance on each line. The check reconciles those totals instead and the badge reads "closing total checked". Where the statement prints no usable total either, the badge reads "check unavailable" and every exported row carries that status, so nothing implies a check that did not run.
Yes. You can upload a scanned PDF or up to 10 JPG or PNG photos of paper pages, including pictures taken with a phone. They take longer, 20 to 40 seconds a page against seconds for a native PDF, because every pixel is read. The balance check matters most here: it's what catches a misread digit.
Excel or CSV if you're working in a spreadsheet. QBO for QuickBooks Online. OFX for Xero and most other accounting software. QFX for Quicken. QIF for older desktop tools. JSON if you're feeding another system. There's a full decision table on the formats page, with import steps for QuickBooks and Xero.
3 pages every day, with no account and no card, and an account does not change that number. Everything is included: every export format, the balance check, scanned and photographed statements. It resets daily, so a short monthly statement costs nothing.
No. Credit packs are one-time purchases and unused pages stay on your account indefinitely. There's no subscription to cancel and no monthly allowance that evaporates, which is the single most common complaint about subscription converters. If you'd rather pay monthly, the Practice and Firm plans roll unused pages over while you're subscribed.
No, and we won't build that. StatementTable only extracts what is printed. It doesn't create, alter or "repair" statements. If you're looking for a tool to modify a bank statement, this isn't it.
More on the help page, including how particular statements are handled.
Three pages a day are free, and you don't need an account to run your own statement through it.
Last updated September 12, 2026