Convert a Bank Statement PDF to Google Sheets
Get bank statement PDFs into Google Sheets with real dates and numbers, check the totals, then categorize and summarize with formulas and pivot tables.
SheetStatement Team11 min read
On this page
- Why you can't just open the PDF
- Step 1: Convert the PDF
- Step 2: Import into Google Sheets
- Step 3: Check that values imported correctly
- Step 4: Prove the data is complete
- Step 5: Build a useful ledger
- Step 6: Summarize
- Combining several statements and accounts
- Google Sheets or Excel?
- Making the monthly update quick
- Sharing with an accountant or partner
- Reconciling in Google Sheets
- Keeping a clean audit trail
- A worked example
- Troubleshooting
- Ready to start?
- FAQ
TL;DR Google Sheets can't open a PDF directly, so convert the statement to CSV or Excel first, then import it with File, Import. Check that dates and amounts imported as real values (not text), prove the data is complete with a balance check, and then build categories with VLOOKUP or XLOOKUP, monthly totals with SUMIFS or a pivot table, and a running balance with a simple formula. Keep the original PDFs; the sheet is your working copy.
Google Sheets is a good home for bank data. It's free, it's shareable, it works from any computer, and its formulas are close enough to Excel's that most guides apply. The only awkward part is getting the data in. Bank statements are PDFs, and Sheets doesn't read PDFs.
This guide covers the realistic ways to get statement data into Sheets, how to check it imported correctly, and a set of formulas that turn it into a useful ledger. If you'd rather work in Excel, our PDF to Excel methods comparison covers that side.
Why you can't just open the PDF
A PDF is a page layout. It knows where each piece of text is drawn, not which column it belongs to. When you see a neat table on a bank statement, the file just contains instructions like "draw '03/05' here, draw 'COFFEE SHOP' there, draw '4.75' over there". Rebuilding rows and columns from that requires reading the positions and working out the structure.
Sheets doesn't do that. If you upload a PDF to Google Drive and open it with Google Docs, Drive may run text recognition and give you a document with the text, but tables usually come through as lines of text, not cells. You can work with that, but it's slow.
So the practical approach has two steps: convert the PDF into a spreadsheet file, then import that file into Sheets.
Step 1: Convert the PDF
Option A: Download CSV from your bank instead
If your bank offers a CSV download of transactions for the period you need, use it. It skips the PDF entirely. The limits: downloads may not go back as far as statements, they don't include opening and closing balances, and they sometimes include pending items. For recent months and personal use, though, it's often enough.
Option B: Copy and paste from the PDF
Open the PDF, select the transaction lines, copy, and paste into Sheets. Sheets will usually put each line into one cell. You can then use Data, Split text to columns, or the SPLIT function, to separate the fields. It works for short statements with simple layouts. It struggles with descriptions that contain spaces (which is all of them), multi-line entries and statements that split transactions into several sections.
Option C: Use a statement converter
A converter built for bank statements reads the page layout, rebuilds each transaction as a row, fills in the year for each date, and outputs a clean file. SheetStatement's bank statement to CSV converter also checks the extracted transactions against the statement's opening and closing balances, so you know the file is complete before it goes anywhere. Download the CSV or Excel file and import it into Sheets.
The free plan covers 3 pages a month, which is enough to try a statement or two. Paid plans are $9, $19 or $39 a month for larger volumes.
Step 2: Import into Google Sheets
With a CSV or Excel file ready:
- Open a new or existing spreadsheet in Google Sheets.
- Go to File, Import, and upload the file.
- Choose where it goes: a new spreadsheet, a new sheet in the current one, or appended to the current sheet.
- For CSV, choose the separator (usually comma) and decide whether to convert text to numbers, dates and formulas. Leave conversion on.
If you're adding a new month to an existing ledger, importing to a new sheet first and then copying the rows into the ledger gives you a chance to check them before they join the rest.
Check the locale
This matters more than people expect. Sheets interprets dates and numbers according to the spreadsheet's locale, set under File, Settings. If the file has dates like 05/03/2026 and your locale is US, Sheets reads that as May 3. If the statement meant March 5, every date with a day of 12 or less is silently wrong.
Before importing, set the spreadsheet locale to match the date format in your file, or use ISO dates (2026-03-05) in the file, which every locale reads the same way.
Step 3: Check that values imported correctly
Two quick tests:
=ISNUMBER(A2)
=ISNUMBER(C2)
If the date column is A and the amount column is C, both should return TRUE. If either returns FALSE, the values are text.
To fix text dates, =DATEVALUE(A2) converts a date string in the locale's format. For amounts with currency symbols or thousands separators, =VALUE(SUBSTITUTE(SUBSTITUTE(C2,"$",""),",","")) removes them and converts. Then paste the results back as values.
Also check the sign. Money out should be negative. If the file has separate debit and credit columns, make a single amount column:
=IF(D2<>"", D2, 0) - IF(E2<>"", E2, 0)
where D is credits and E is debits.
Step 4: Prove the data is complete
The balance check is the single most valuable formula in this guide. Put the statement's opening balance in one cell and its closing balance in another, say H1 and H2:
=ROUND(H1 + SUM(C2:C) - H2, 2)
If the result is zero, every transaction is present and correctly signed. If it isn't, something is missing, duplicated or has the wrong sign. A running balance helps you find it:
=H$1 + SUM(C$2:C2)
Fill this down column D. If the statement prints a balance after each transaction or each day, compare your running balance with it; the first row that disagrees is where the problem is.
The balance checker does the same check if you'd rather paste the data in.
Step 5: Build a useful ledger
With clean, complete data, set up the sheet so it's easy to work with every month.
Freeze the header row. View, Freeze, 1 row.
Add helper columns. A month column makes summaries easier:
=TEXT(A2, "yyyy-mm")
Add a category column. Create a second sheet called Rules with two columns: a keyword (such as NETFLIX or PAYROLL) and a category. Then, in your ledger:
=IFERROR(INDEX(Rules!B:B, MATCH(TRUE, ISNUMBER(SEARCH(Rules!A$2:A, B2)), 0)), "Uncategorized")
This finds the first keyword that appears anywhere in the description and returns its category. In newer versions of Sheets, wrap it in ARRAYFORMULA or use MAP and LAMBDA to apply it to the whole column, or just fill it down.
For exact payee matches, XLOOKUP is simpler:
=XLOOKUP(B2, Rules!A:A, Rules!B:B, "Uncategorized")
Our guide to Excel formulas for categorizing bank transactions explains these patterns in more depth; they work almost identically in Sheets.
Tag transfers. Add Transfer as a category and add keywords for moves between your own accounts. Exclude it from spending and income totals.
Step 6: Summarize
SUMIFS for a monthly summary
On a summary sheet, put categories in column A and months across row 1. Then:
=SUMIFS(Ledger!$C:$C, Ledger!$E:$E, $A2, Ledger!$F:$F, B$1)
where Ledger column C is the amount, E the category and F the month. Fill across and down. You get a category-by-month table that updates whenever you add rows.
Pivot table
If you prefer, Insert, Pivot table, with the ledger as the source. Put category in rows, month in columns and amount in values as SUM. Filter out Transfer. Pivot tables are quicker to build and rearrange; SUMIFS gives you more control over layout.
QUERY
Sheets' QUERY function lets you write a summary in one formula:
=QUERY(Ledger!A:F, "select E, sum(C) where E <> 'Transfer' group by E order by sum(C)", 1)
That returns each category with its total, sorted from the largest outflow. It's handy for a quick check without building a pivot table.
Combining several statements and accounts
If you're working with several months or several accounts:
- Add an Account column so you always know where a row came from.
- Add a Statement column with the statement month, which helps when you need to trace a row back to its PDF.
- Check each statement's balance separately before combining. A combined sheet that's off by $50 is harder to fix than a single month.
- Keep the raw imports. Paste each month's import into its own sheet named after the month, then combine with
={Jan!A2:F; Feb!A2:F; Mar!A2:F}or by copying values into a master ledger. If you ever need to redo a month, the raw sheet is there.
Google Sheets or Excel?
Both work well for bank data, and the formulas in this guide translate almost one for one. The choice usually comes down to how you work.
| Consideration | Google Sheets | Excel |
|---|---|---|
| Sharing and comments | Built in, real time | Possible through OneDrive or SharePoint |
| Importing from PDF | Needs a converted file | Desktop Excel can import some PDFs via Power Query |
| Large files | Can slow down with many complex formulas | Generally handles bigger workbooks |
| Cost | Free with a Google account | Usually part of a Microsoft 365 subscription |
| Offline work | Possible with setup | Native |
If you collaborate with a partner or a bookkeeper who prefers working in a browser, Sheets is the easier choice. If you're working with several years of data across many accounts, or you already use Power Query, Excel may be more comfortable. Many people use both: Excel for heavy cleanup, Sheets for the shared ledger.
Making the monthly update quick
Once the ledger exists, adding a month should take minutes, not an evening. A routine that works:
- Keep a Drive folder with each statement PDF and its converted CSV, named by account and month.
- Import the new CSV to a fresh sheet named after the month.
- Run the balance check on that sheet before anything else.
- Copy the rows into the ledger as values.
- Scroll to the bottom and look at the
Uncategorizedrows. Add rules for any new regular payees so they're handled automatically next time. - Refresh or glance at the summary.
The rules sheet is what makes this get faster over time. In the first month you might categorize a third of the rows by hand; after three or four months, most rows match a rule and you're only looking at the genuinely new ones.
Sharing with an accountant or partner
One of the best things about Sheets is sharing. A few tips:
- Share view-only by default. Give edit access only to people who need it.
- Use comments for questions rather than changing cells. Your accountant can comment on a transaction to ask what it was, and you can answer in the thread.
- Protect formula columns. Data, Protect sheets and ranges stops accidental overwrites.
- Be careful with what's in the sheet. Bank data is sensitive. Remove full account numbers if they're not needed, and don't share with "anyone with the link" unless you're comfortable with that.
Reconciling in Google Sheets
If you're using Sheets as a bookkeeping ledger, you can also reconcile it against the bank each month: match each statement transaction to your ledger entries, list items that appear on one side only, and confirm the adjusted balances agree. Our guide to reconciling a bank statement in Google Sheets walks through that process with formulas.
Keeping a clean audit trail
A sheet that changes every month can drift away from the statements if you're not careful. Three small habits keep it trustworthy. First, never edit the amount or date of an imported row; if something looks wrong, check the PDF and fix the source, then re-import. Second, add a Notes column for explanations instead of changing descriptions, so the bank's wording is always preserved. Third, use Sheets' version history (File, Version history) to name a version after each monthly update, such as "March added and balanced". If a number ever changes unexpectedly, you can see exactly when and compare with the earlier version.
A worked example
A couple wants to see a year of household spending in a shared Google Sheet. They have twelve checking statements and twelve credit card statements as PDFs.
- Convert. All twenty-four PDFs are converted to CSV. Each passes the balance check.
- Import. They create a spreadsheet with the locale set to their country, import each CSV to its own sheet, and combine everything into a
Ledgersheet with Account and Statement columns. - Fix signs. The card files show purchases as positive. They flip the sign on card rows so spending is negative everywhere.
- Tag transfers. Twelve card payments from checking are tagged
Transferon both sides. - Categorize. A
Rulessheet with about forty keywords covers most of the year's transactions. They go through the remaining uncategorized rows together over coffee. - Summarize. A pivot table shows spending by category and month. They add a chart of the top eight categories.
The result is a shared sheet both of them can look at, with every number traceable back to a statement. Next year, they add new months to the same ledger and the summaries update.
Troubleshooting
Everything landed in column A. The separator wasn't detected. Re-import and choose comma (or semicolon, if that's what the file uses).
Dates are wrong for the first twelve days of each month. Locale mismatch. Set the spreadsheet locale to match the file's date format and re-import, or use ISO dates.
Amounts won't sum. They're text. Use VALUE after removing symbols and separators.
Formulas show as text. The cell was formatted as plain text before you typed the formula. Change the format to Automatic and re-enter it.
The balance check is off by a round number. Look for a missing transaction of that amount, or one with the wrong sign (which shows as double the amount).
The sheet is getting slow. Very long ARRAYFORMULA and SEARCH combinations over whole columns can be slow. Limit ranges to the rows you actually use, or convert categories to values once they're final.
Ready to start?
Upload a statement to SheetStatement, confirm the balance check passes, download the CSV, and import it into Google Sheets. With the free plan's 3 pages a month, you can try the whole workflow on a real statement before deciding whether you need more.
FAQ
Can Google Sheets open a PDF bank statement?
Not directly. Convert the PDF to CSV or Excel first, then use File, Import in Google Sheets.
Why are my dates wrong after importing into Google Sheets?
Usually a locale mismatch. Sheets reads dates according to the spreadsheet's locale, so a day-first date can be read as month-first. Set the locale to match your file, or use ISO dates.
How do I check that the imported data is complete?
Add the opening balance to the sum of all amounts and subtract the closing balance. If the result is zero, nothing is missing.
What formula categorizes bank transactions in Google Sheets?
A rules sheet with keywords and categories, combined with INDEX, MATCH and SEARCH, works for partial matches. For exact payee names, XLOOKUP is simpler.
Can I combine several bank statements in one sheet?
Yes. Import each to its own sheet, check each one's balance, then combine them with an array literal or by copying values into a master ledger with Account and Statement columns.
Is it safe to keep bank statements in Google Sheets?
That depends on your own comfort and requirements. Share carefully, use view-only access where possible, and remove account numbers you don't need.