Bank statement into a spreadsheet, without typing it out again
Start in online banking, not in Excel. Almost every bank has a download option for transactions, usually labelled Download, Export or Statement, and it will offer CSV or sometimes Excel directly. Take that. Then, and this is the part that saves the afternoon, do not double-click the CSV. Open it through Excel's Data tab instead, with the date column set to Text or to the locale the file came from, because Excel left to itself will rewrite dates, drop leading zeros and turn long account numbers into scientific notation, all without saying anything. If your bank only gives PDFs, there are free routes for that too, and they work on real PDFs and not on scans.
Look for the export before you look for a converter
People land on converter sites for statements their bank would have given them as CSV for nothing. The option is there in most online banking, and it is badly signposted.
Where it hides: a small download icon beside the transaction list rather than a menu item, a format dropdown that only appears once you choose a date range, or a statements page holding the PDFs and a different page holding the transactions. Phone apps often leave it out when the desktop site has it, so try a real browser.
Formats, best first for this job: Excel or CSV, then OFX or QIF, then PDF. Take the widest date range the bank allows in one go, since several cap how far back a single export reaches.
Open the CSV the careful way
A CSV is a text file. Double-clicking it hands Excel full discretion over what every value means, and Excel exercises it.
The modern route, on Windows and Mac:
- Open a blank workbook. Data, then From Text/CSV.
- Pick the file. Excel shows a preview and a proposed set of column types.
- Click Transform Data rather than Load, which opens Power Query.
- Right-click the date column, choose Change Type, then Using Locale, and pick the locale the file was written in. English (United States) for month-first dates, your own for day-first.
- Set any reference, account or cheque number column to Text.
- Close and Load.
The locale step is the one worth learning. Microsoft documents three places a locale can come from, resolved in this order: the Change Type setting, Power Query itself, then the operating system. Which is a precise way of saying that if you do not set it, your machine's regional settings decide how your bank's dates are read, and your bank does not know what those are.
The old wizard still exists. File, Options, Data, tick From Text (Legacy), then Data, Get Data, Legacy Wizards, From Text (Legacy). Step three lets you set each column's type, with the date order spelled out.
What Excel changes when you let it decide
Three conversions, all silent, all bad for bank data:
- Leading zeros. A sort code, branch number or reference written as 00451 becomes 451.
- Long numbers. A card or account number longer than 15 digits is truncated to 15 digits of precision and shown in scientific notation. The original digits are gone, not hidden.
- Anything date-shaped. Text that resembles a date is converted using your regional preference, which is how 03/04 becomes the 4th of March on one machine and the 3rd of April on another.
Newer Excel builds let you control this. Look in Excel Options for an Automatic Data Conversion section, which has switches for leading zeros and the 15-digit truncation, and an option to be told when Excel is about to convert something as it loads a file.
If all you have is OFX or QIF
Both are text, so both can be read without buying anything, and neither is pleasant by hand.
An OFX file is tagged, a bit like HTML. Each transaction is a block, and the fields you want are the date, the amount and the description. Its dates are written year first, as 20240131, so there is nothing to guess. Turning a few hundred tagged blocks into rows means a careful find-and-replace or a script.
A QIF is flatter: one line per field with single-letter codes, D for date, T for amount, P for payee. Easier to eyeball, and its dates are ambiguous, since nothing in the file records which convention was used.
If your bank only gives PDFs
First, find out which kind of PDF you have. Open it and try to select a line of text with the cursor. If the text highlights, it was generated digitally and the text is really in there. If nothing highlights, it is an image of a page and nothing will help until it has been through OCR.
For a real text PDF, two free routes:
- Tabula. Free, open source, runs on Mac, Windows and Linux. You draw a box around the table and it extracts to CSV or Excel. Its own documentation says it only works on text-based PDFs, and it runs locally, so the file never leaves your machine.
- Excel's PDF connector. Data, Get Data, From File, From PDF. It lists the tables it finds and you pick one. Available in Excel for Microsoft 365 on Windows, not in Excel 2019 or 2021 standalone, and limited or missing on Mac depending on the build.
Both struggle with the same thing: a statement where a description wraps onto a second line gives you a row with no date and no amount, which you have to join back to the row above. Checking for those is the manual part of the PDF route.
Google Sheets, if you do not have Excel
Sheets will open a CSV through File, Import, and it makes the same guesses Excel does. The difference is that it asks. There is a tick box during import for converting text to numbers, dates and formulas. Untick it and the data arrives as text, intact, for you to convert deliberately. Sheets has no per-column locale setting, so for day-first dates the safe habit is to import as text and split the date column on the slash.
Check it before you build anything on it
Four checks, five minutes, and they catch nearly everything.
- Count the rows against the statement, not against a feeling. A truncated import looks perfect at the top.
- Sum the amounts. If you are out by a factor of a thousand, the decimal separator was read wrong.
- Sort the date column and look at the extremes. If the earliest and latest dates are not the period you asked for, the dates were read in the wrong order.
- Open one long reference number. If it shows as 4.51E+15, the digits are already lost and you need to import again as text.
Do it now. Every one of these errors survives into whatever you build next.
Where the free route genuinely runs out
For one month of one account, the steps above are the whole job and there is no reason to pay anyone.
It stops being free-shaped when you have a year or more and the dates need checking on every row, when the export mixes thousands separators and decimal commas so a careless read is out by a factor of a thousand, and when the result has to be properly typed so sorting and subtotalling work. That last one is the most common reason a converted statement turns out useless. It looks right and behaves like text.
If the manual route is more evening than you have, this takes a bank CSV, QIF or OFX and writes an xlsx with the dates as real dates and the amounts as real numbers, plus a clean CSV. The free preview states how it read your dates and decimal point. It reads real columns, not PDFs.
Open Statement to Excel →