Convert a Bank Statement PDF to Excel

Transactions as rows, money as numbers, several pages as one sheet — and a check that the opening balance, the transactions and the closing balance still agree. The statement never leaves your device.

Quick answer:

Open the PDF table extractor, drop the statement in, set Extraction to Financial and press Extract tables. Money becomes numbers you can sum, sort codes and account numbers stay as text, and a statement running across pages becomes one sheet with the headings kept once. If the table has a running balance the page checks opening − money out + money in = closing and tells you the result — a statement with one digit misread comes back out by 300.00 rather than passing silently. Everything runs in your browser; the statement is never uploaded.

Can scanned or posted statements be converted?
Yes, with Read scanned pages (OCR) ticked — the recognition runs on your device. All five columns of a five-column statement came back at every scan quality we tested, down to 56 dpi.
Does it check the statement adds up?
Yes, when there is a running balance. It tests opening − money out + money in against the closing balance. A statement with one digit misread comes back out by that amount rather than passing silently.
Will it say which figure is wrong?
No, deliberately. One wrong figure breaks the arithmetic of every row after it, so a per-cell version accuses correct cells about as often as guilty ones. You get one verdict and the amount it is out by.
Can several pages become one sheet?
Yes — Merge matching tables groups the pages into tables first, so a statement running across pages 1 to 3 with a summary on page 4 becomes two sheets, not four.
Is my statement uploaded?
No. It is read and converted by your own browser. If the PDF is password-protected, the password is used on your device and nowhere else, and cleared from the field once accepted.
🏦 Open the PDF table extractor

Runs in your browser. No account, no upload, no bank connection.

Three steps

  1. Drop the statement in and press Extract tables. Your bank's PDF is read on your own machine; nothing is uploaded, which for a document listing every payment you have made is the entire point.
  2. Set Extraction to Financial. Money becomes money, the date column becomes dates where the order is not ambiguous, and your sort code and account number are kept as text instead of being mangled.
  3. Read the verdict, then download. If the statement has a running balance, the page checks the arithmetic of the whole document before you take it away.

If the statement arrived as a scan or a photograph rather than a download, tick Read scanned pages (OCR) first — that recognition also runs on your device.

The check nothing else does: does the statement still add up?

A bank statement is the one document that carries its own proof. Every row moves the balance, so the figures have to agree with each other: opening balance − money out + money in = closing balance. Any converter can produce a grid of numbers. This one does the sum.

That matters because of the failure mode that survives every other test. Suppose one cell is read as 1550.00 where the page says 1250.00. It is a well-formed number, in a money column, of plausible size, in the right row. No format check, no type check, no shape check can see anything wrong with it. The balance underneath it can.

Measured on the real extraction, through the engine the page ships:

DocumentVerdict
Statement extracted correctly✓ Reconciles — opening 1842.17 − money out 1523.94 + money in 5580.22 = closing 5898.45, out by 0.00
The same statement, one digit misread⚠ Does not add up — out by 300.00

It will not point at a cell, and that is on purpose

One wrong figure breaks the arithmetic of every row after it, so a version of this check that blames individual cells accuses correct ones about as often as guilty ones — we built it, measured it at 14 to 17 percent precision, and threw it away. What survives is one honest sentence about the whole document plus the amount it is out by, which is a true statement and tells you where to start.

And it says nothing at all when it cannot tell

Announcing that somebody's good data is broken is the expensive mistake, so the check declines far more often than it runs. It needs a balance column, a money-out and money-in pair or a single signed amount column, and at least three balances to follow. Short of any of that it names what is missing and claims nothing.

13 other documents from our test set went through it — invoices, receipts, a purchase order, a payslip, a financial report, a price list, a timetable, a quotation, a delivery note, a generic table and a supplier's statement of account. 11 declined to check at all. The 2 that were checked were themselves statements, and both reconciled. Not one document was told its figures were wrong when they were not.

A disagreement is not automatically the extraction's fault, either. A statement can carry something this arithmetic does not know about — an interest adjustment printed outside the columns, a brought-forward line that is not a transaction. The number is a reason to look, not a verdict on your bank.

The line that ruins most statement conversions

It is the letterhead. A page headed Northbridge Bank — Statement of Account with Page 1 of 3 over on the right is two pieces of text separated by a wide gap, which from the outside is exactly what a table row looks like. The title string is long enough to cover the gap between the first two columns, and because column positions are pooled across the page, one line bridging a gap welds two columns together for every row.

Measured on a five-column statement: Date and Description came back in the same cell on every row of every page. That is the commonest document anyone brings to a converter, so the fix is worth stating. The rows that end up in the spreadsheet and the rows that decide where the columns go are treated as two different sets — a title line still lands in your sheet, but it is not allowed a vote on the columns if that vote would merge columns the real rows already agreed on.

The same letterhead has a second effect that is easy to miss. Financial extraction works out which column is money out and which is money in from the header words, and on a statement the header is not the first row — it is four or five lines down, under the bank's name, the account number and the statement period. Read off row 0 instead, the two money columns become indistinguishable and nothing can be reconciled.

Three pages, one table

A statement whose transactions run from page 1 to page 3 with a summary on page 4 is two tables, not four and not one. One sheet per page cuts your transactions into three; everything in one sheet welds the summary onto the end, where its category column lands underneath your dates.

Choose Merge matching tables — it is suggested automatically when the pages really do line up — and the pages are grouped into tables first. A continuous statement becomes one sheet with the column headings kept once and no blank rows wedged between the pages, and the repeated headings on pages 2 and 3 are removed, with the number of removed rows reported rather than dropped silently.

Deciding which pages continue each other took three rules together, and each one is the only one that handles a particular case: the same column count, the same headings (or no headings at all, which is what a continuation page usually has), and every column still sitting where it did on the page before. Over ten multi-page fixtures: headings alone got 8 of 10 right with 2 tables wrongly welded together, column count alone 8 of 10, the two combined 9 of 10 — and all three together 10 of 10, nothing wrongly merged and nothing wrongly split.

Wrongly merging is the failure that matters here. Two tables in one sheet means a column silently stops meaning the same thing halfway down. A wrong split is visible in the preview and the other two modes are one dropdown away.

Dates, sort codes and account numbers

Why some date columns are not converted

03/04/2026 is the third of April to a British reader and the fourth of March to an American one, and the PDF does not record which. Rewriting every date in a statement on a guess is worse than leaving the column alone, so a date column becomes real Excel dates only when something in it settles the order: a day above 12 somewhere in the column, an ISO 2026-03-04 shape, or a written month name. Otherwise the values stay exactly as printed.

The whole column always goes one way. A column that is half real dates and half text sorts into nonsense, and it is the kind of nonsense that looks fine until the twelfth of the month.

Why account numbers stay text

Because a spreadsheet destroys them otherwise. 00417829 becomes 417829 the moment it is a number, and a sort code written 20-31-05 is read as a date by every spreadsheet ever made. Account numbers, sort codes, IBANs and masked card numbers are pinned to text format, so they arrive as printed and stay that way when the file is reopened.

Why not just download the CSV from your bank?

When you can, do — it is the better route and nobody should pretend otherwise. The reasons people end up with a PDF instead are mundane and mostly outside your control:

And when a bank's CSV does exist it is rarely the same table: dates in the bank's own convention, descriptions truncated, the running balance sometimes absent altogether. Extracting from the PDF gives you the statement as it was actually printed and reconciled.

Posted, scanned and photographed statements

A scan holds a picture of a statement, not a statement. Tick Read scanned pages (OCR) and the characters are recognised in your browser after a one-off engine download of about 6 MB. Every competing tool that serves this query uploads your bank statement to do the same job.

The honest part is that structure survives far better than characters do. Measured on a five-column statement rendered at falling quality, all five columns came back every time:

Scan qualityColumns recoveredCells exactly right
150 dpi, light grain5 of 5100%
100 dpi5 of 591%
75 dpi5 of 591%
56 dpi, heavy grain5 of 585%
150 dpi, photographed at 1.5° of skew5 of 591%
150 dpi, heavy grain and hard JPEG compression5 of 597%

On a denser page the figures tell the same story from the other side: a 30-row statement at 150 dpi gave 60 of 60 money figures exactly right, and a rough 82 dpi version of the same page 53 of 60. So on a poor scan, check the figures — and this is exactly where the reconciliation above earns its place, because a misread digit shows up in the total even when it looks perfectly reasonable in its cell.

Cells that cannot be what their column is are marked ⚠ for you: 12O0.00 with a letter O in a money column, for instance. On deliberately corrupted figures that check found 6 of 6 with no false alarms, and it raised nothing at all on 6 correctly extracted typed pages. It catches roughly one OCR mistake in five overall, because most of the rest are in description text where there is nothing to check a word against. A page with no marks is not a page with no errors.

Getting something useful out of the description column

The description is the column everybody wants to work with and the one banks treat worst. A single cell routinely holds a merchant name, a town, a card suffix, a payment method and a reference, run together with no consistent separator — CARD PAYMENT TO SAINSBURYS S/MKTS, LEEDS ON 14 APR CLP 4417.

None of this is automated here on purpose. Splitting somebody's description column on a guess about their bank's layout would quietly lose information that only exists in that string, and unlike a number there is nothing to check it against.

Joining twelve monthly statements into one year

Mortgage applications, tax returns and accountants all tend to want a year, and banks issue a PDF a month. Each file is extracted on its own — there is no queue on a server, because nothing is uploaded — so the routine matters:

  1. Extract each month and paste it under the last, oldest first.
  2. Add a statement month column of your own and fill it down each block, so a sort by amount does not scramble which period a row belongs to.
  3. Check the joins. The closing balance of one month must equal the opening balance of the next. Where two consecutive files disagree, either a month is missing from the pile or a figure was misread — and this is a check no single-file converter can make for you, because it spans documents.
  4. Only then delete the repeated heading rows between blocks, once you have used them to confirm the columns line up.

Carrying balances forward like this is also the quickest way to spot a gap in a set of statements before an underwriter or an accountant finds it. A quarter that does not carry is a missing month, not a rounding problem.

Banks do not agree on how to print a transaction

There are two conventions and your spreadsheet has to know which one it is holding, because the arithmetic differs:

Both are handled, and a mixed pile of accounts will give you both. Before you combine them, settle on one convention for your own sheet and convert the other to it — a single signed column is usually the easier to work with, and a two-column statement folds into it with =D2-C2.

Credit cards add a trap worth naming: on a card statement a purchase increases what you owe, so the sign convention is the mirror of a current account. Combining a card and a current account in one sheet without a column recording which is which produces totals that look plausible and mean nothing.

What this will not do

If the PDF is locked, remove the password first — or type it when the extractor asks, which is used on your device and nowhere else.

Where to go next

Frequently Asked Questions

Open the PDF table extractor, drop the statement in, set Extraction to Financial and press Extract tables. The transactions come out as a spreadsheet with money as numbers you can sum, and a statement that runs across several pages becomes one sheet with the headings kept once. It runs in your browser, so the statement is never uploaded.
Yes, when the table has a running balance. It checks opening balance minus money out plus money in against the closing balance and shows the result. A statement extracted correctly reconciles to the penny; change a single digit in one cell and it reports the document as out by 300.00. It is the only check that can see a misread digit at all, because a wrong number in a money column is still a perfectly well-formed number.
No, deliberately. One misread figure breaks the arithmetic of every row after it, so a per-cell version of the check accuses correct cells about as often as wrong ones — we measured it at 14 to 17 percent precision and did not ship it. You get one verdict about the document and the amount it is out by, which tells you where to start looking. Cells that cannot be what their column is are marked separately.
No. The check needs a balance column, a money-out and money-in pair or a single signed amount column, and at least three balances to follow; short of that it says what is missing and claims nothing about the totals. Of 13 other documents in our test set — invoices, receipts, a purchase order, a payslip, a financial report and more — 11 declined to check, the 2 that were checked were themselves statements and both reconciled, and there were 0 false alarms.
Yes. Choose Merge matching tables, which is suggested for you when the pages line up. The pages are grouped into tables first, so a continuous statement becomes one sheet with its headings kept once and no blank rows between pages, while a summary table elsewhere in the same PDF gets a sheet of its own. The repeated headings from pages 2 onward are removed and the number removed is reported.
Because the order was ambiguous. 03/04/2026 is the third of April to half the world and the fourth of March to the other half, and the PDF does not say which. A date column is converted to real Excel dates only when something settles it: a day above 12 somewhere in the column, an ISO 2026-03-04 shape, or a written month name. Otherwise the values are left exactly as printed, because rewriting every date on a guess is worse.
Because a spreadsheet would destroy it otherwise. 20-31-05 is read as a date by every spreadsheet there is, and an account number like 00417829 loses its leading zeros the moment it becomes a number. Sort codes, account numbers, IBANs and masked card numbers are pinned to text format, so they arrive exactly as printed and stay that way when the file is reopened.
Yes — tick Read scanned pages (OCR) before extracting and the recognition runs in your browser. All five columns of a five-column statement came back at every quality we tested, down to 56 dpi and at 1.5 degrees of skew. Characters are less certain: a 30-row statement at 150 dpi gave 60 of 60 money figures exactly right, a rough 82 dpi version 53 of 60. Check them against the original.
No. The PDF is read in your browser, the extraction happens on your device, and the file you download is produced there too. The only thing fetched from the network is the recognition engine when you tick OCR, about 6 MB the first time, which your browser then caches. If the statement is password-protected, the password is used on your device and nowhere else.
One file at a time, then stack them. Extract each month, paste it under the last oldest-first, and add a statement month column of your own filled down each block. Then check the joins: the closing balance of one month must equal the opening balance of the next, and where two consecutive files disagree either a month is missing or a figure was misread. That check spans documents, so no single-file converter can do it for you.
Yes, and it usually has a different shape from a current account. Cards commonly print one signed Amount column rather than separate money-out and money-in columns, and the sign convention is the mirror of a bank account — a purchase increases what you owe. Both shapes are handled, but if you are combining a card and a current account in one sheet, add a column recording which is which or your totals will look plausible and mean nothing.
There is no per-bank template, which is the point — the columns are worked out from the document's own layout, so a bank we have never seen works the same as one we have. What varies is the vocabulary: the money-out and money-in columns are identified from header words like Money out, Paid in, Debit and Withdrawals, which are English. A statement headed in another language still extracts, but the two money columns are not told apart.
Yes — set Format to CSV. Most bookkeeping packages import a CSV of transactions and ask you to map the columns, so check the date order is what they expect before importing. A date column is only converted to real dates here when the order is unambiguous, so if yours came through as text that is deliberate and you should tell the importer which convention the statement used.
Yes, and it is the usual reason people end up here. Plenty of banks offer CSV for recent months and PDF for everything older, which is exactly the direction you need for a mortgage application, a tax return or an accountant. Closed accounts, statements forwarded by someone else, and credit cards, loans and mortgages very often issue a PDF and nothing else.
It depends entirely on where the conversion happens. A statement lists every payment you have made, so uploading one to a service means handing that to a machine you do not control. Here the file is read and converted by your own browser and never leaves the device — open the Network tab and watch if you would rather check than trust. If the document is password-protected, the password is used on your device and nowhere else, and is cleared from the field as soon as it is accepted.

Related Tools