Import Bank Statement into GnuCash: CSV and OFX Guide
Import bank statements into GnuCash with the CSV import assistant or OFX, map columns, assign transfer accounts, avoid duplicates and reconcile.
SheetStatement Team11 min read
On this page
- Which file format to use
- Preparing a CSV that imports cleanly
- Set up your account tree before the first import
- Split transactions for mixed payments
- Running the CSV import assistant
- Using OFX or QFX instead
- Avoiding duplicates
- Reconciling in GnuCash
- Credit card accounts
- A worked example
- Tips for smoother imports
- Convert PDF statements for GnuCash
- FAQ
TL;DR GnuCash can import bank transactions from CSV, OFX/QFX and QIF files through its File, Import menu. CSV gives you the most control: prepare a file with one row per transaction and a consistent date format, run the CSV import assistant, assign each column a type, choose the target account, and then use the import matcher to assign the other side of each transaction. If your bank only provides PDFs, convert them to CSV and check each month balances first. Finish by reconciling the account against the statement.
GnuCash is free, open-source, double-entry accounting software used by households, freelancers, small businesses and nonprofits that want proper books without a subscription. It's powerful, but it has a reputation for a learning curve, and bank imports are where many new users get stuck. The CSV import assistant has a lot of options, the import matcher looks unfamiliar at first, and it isn't obvious what to do when your bank only offers PDF statements.
This guide walks through the whole process: choosing a file format, preparing a clean CSV, running the import, using the matcher, avoiding duplicates and reconciling. Menu names below reflect recent GnuCash releases; if your version differs slightly, look for the equivalent option under the File, Import menu. The GnuCash help manual is the authoritative reference for your exact version.
Which file format to use
GnuCash supports several import formats. Each has trade-offs.
| Format | Pros | Cons |
|---|---|---|
| CSV | You control every column; easy to fix in a spreadsheet; works from converted PDFs | More setup during import |
| OFX / QFX | Structured; includes transaction IDs that help with duplicate detection | Only available if your bank offers it; harder to edit |
| QIF | Widely supported by older software | Older format; date ambiguity issues; less common from banks now |
If your bank offers OFX or QFX downloads for the period you need, that's often the quickest path, because each transaction carries an identifier that helps GnuCash recognize transactions it has already seen. If you only have PDFs, need months beyond the bank's download window, or want to clean the data first, use CSV.
Preparing a CSV that imports cleanly
Converting PDF statements
Banks commonly treat the monthly PDF as the official statement, and for older months it may be all that's available. Convert it to a spreadsheet with one row per transaction. Short statements can be copied and pasted; longer ones are easier with Excel's Power Query PDF import or a dedicated converter. SheetStatement reads statement PDFs, merges the different transaction sections into one chronological list, fills in the year for each date, and checks that the transactions add up to the closing balance before you export to CSV.
Check it balances first
Before importing anything into GnuCash, confirm the file is complete:
Opening balance + sum of amounts = Closing balance
If that doesn't hold, a transaction is missing, duplicated, or has the wrong sign. Fixing it in a spreadsheet takes a minute; fixing it after it's spread across GnuCash accounts takes much longer. Our free balance checker can run this test for you.
The layout
GnuCash's CSV import assistant can handle either a single amount column or separate deposit and withdrawal columns. A simple, reliable layout:
| Date | Num | Description | Deposit | Withdrawal |
|---|---|---|---|---|
| 2026-06-02 | Client payment | 1,400.00 | ||
| 2026-06-03 | 1093 | Check to landlord | 950.00 | |
| 2026-06-05 | Internet service | 59.99 |
Or with one signed column:
| Date | Num | Description | Amount |
|---|---|---|---|
| 2026-06-02 | Client payment | 1400.00 | |
| 2026-06-03 | 1093 | Check to landlord | -950.00 |
| 2026-06-05 | Internet service | -59.99 |
Rules that prevent most import problems:
- One date format throughout.
YYYY-MM-DDavoids day/month confusion entirely. - Plain numbers. Remove currency symbols. Decide whether your file uses a period or a comma as the decimal separator and tell GnuCash which one during import.
- A single header row, or none. The assistant can skip a set number of lines at the top.
- No totals or blank rows.
- One account per file. Keep checking, savings and card transactions in separate files.
Save as CSV. If you're using Excel, choose the UTF-8 CSV option if your payee names contain accented characters. For more on general cleanup, see how to clean bank statement data in Excel.
Set up your account tree before the first import
The import matcher asks you to choose a destination account for every new transaction, so it pays to have a sensible account tree in place before you start. If you create accounts on the fly while importing, you'll end up with near-duplicates like Expenses:Phone and Expenses:Telephone, and your reports will be harder to read.
A simple structure for a freelancer or small business might look like this:
| Top level | Examples of child accounts |
|---|---|
| Assets | Checking, Savings, Petty Cash |
| Liabilities | Credit Card, Loan, Sales Tax Payable |
| Income | Client Fees, Product Sales, Interest Income |
| Expenses | Bank Charges, Software, Travel, Supplies, Rent, Utilities |
| Equity | Opening Balances, Owner Contributions, Owner Draws |
For a household, replace business categories with budget ones: Groceries, Housing, Transport, Insurance, Childcare, and so on. GnuCash offers account templates when you create a new book, which can be a useful starting point that you then trim.
Two points matter for imports specifically:
- Use placeholder parents. Mark top-level accounts like Expenses as placeholders so the matcher can't assign transactions to them by accident. Transactions should land in specific child accounts.
- Decide how to treat transfers. Payments from checking to the credit card and moves to savings should go to the other asset or liability account, never to income or expenses. If you'll import both sides, decide which import "owns" the transaction and match the other side to it.
If you're bringing in categorized data from a spreadsheet, align your category names with GnuCash account names now. Our guide to categorizing business expenses from bank statements has ideas for keeping the list short and useful.
Split transactions for mixed payments
Sometimes one bank line covers more than one thing. A single card purchase at an office store might include printer ink for the business and a personal item. A loan payment combines interest and principal. GnuCash handles this with split transactions.
After import, open the transaction in the account register and switch to the split view. Keep the bank side as imported, then add lines for each destination account with the appropriate amounts. The splits must add up to the bank amount. This keeps your bank account matching the statement while your income and expense accounts reflect what the money actually paid for.
For loan payments, you'll typically need the lender's statement to know how much went to interest and how much reduced the balance. Record interest to an expense account and principal to the loan liability account.
Running the CSV import assistant
Open your GnuCash book and choose File, Import, Import Transactions from CSV. The assistant walks you through several pages.
1. Choose the file
Select your CSV. Make sure you're importing into the right book.
2. Set the import options
This page shows a preview grid and a set of options:
- Separator: comma for a standard CSV. If everything appears in one column, the separator is wrong.
- Skip lines: set the number of header lines to skip at the top, usually 1.
- Date format: choose the format that matches your file, for example
y-m-dfor2026-06-02. - Currency format / decimal separator: match your file.
- Encoding: UTF-8 for most modern files.
Then assign a column type to each column in the preview by clicking the heading above it. Typical assignments are Date, Num, Description, and either Amount or Deposit and Withdrawal. Columns you don't need, such as a running balance, can be left as None.
You can also choose the account the transactions belong to, either from a column in the file or as a single account for the whole import. For a single bank statement, choose the bank account.
If you'll import files with the same layout regularly, save these settings under a name. Next month, you select the saved settings and everything is configured.
3. Review rows with errors
If a row fails to parse, for example because a date doesn't match the chosen format or an amount contains text, the assistant flags it. Go back and fix the option or the file rather than skipping rows, or the import won't balance.
4. The import matcher
After parsing, GnuCash opens the generic import matcher. This is where you decide what happens to each transaction. For every line, GnuCash needs to know the other side of the double entry, such as an expense account, an income account, or another asset or liability account.
The matcher shows each incoming transaction with a suggested action:
- A (Add): add it as a new transaction. You'll need to assign the other account.
- U+R (Update and reconcile) or R (Reconcile): GnuCash thinks this matches an existing transaction already in your books, for example one you entered manually.
- Skip: don't import this line.
For new transactions, assign the destination account, for instance Expenses:Utilities:Internet for the internet bill. You can select several similar lines and assign the same account at once.
GnuCash learns from your choices. Over time, it uses past assignments to suggest accounts for similar descriptions, so the second and third months go much faster than the first. That's one more reason to keep descriptions consistent.
When you're happy, click OK and the transactions are added.
Using OFX or QFX instead
If your bank provides OFX or QFX, choose File, Import, Import OFX/QFX, select the file, and pick the GnuCash account to map it to the first time. The same import matcher opens. Because OFX files include transaction identifiers, GnuCash can recognize lines it has already imported from earlier files, which reduces the risk of duplicates when download ranges overlap.
Avoiding duplicates
Duplicates are the most common post-import headache. They usually come from:
- Importing the same file twice.
- Importing a CSV that overlaps dates you already entered by hand.
- Importing a statement that overlaps a previous download.
The matcher helps by flagging likely matches with existing transactions, but it isn't perfect, especially with CSV files that don't carry transaction IDs. Good habits:
- Keep a simple log for each account: the last date imported and the last date reconciled.
- Import whole statement periods, so the boundaries are clear.
- If you enter transactions by hand as they happen, let the matcher reconcile those against the import rather than adding duplicates. Review its suggestions instead of clicking through.
If duplicates slip through, open the account register, sort by date, and delete the extras before reconciling. Our article on QuickBooks duplicate transactions after import is written for QuickBooks, but the detective work is the same in any software.
Reconciling in GnuCash
Importing doesn't prove the account matches the bank. Reconciling does.
Open the bank account register and choose Actions, Reconcile. Enter the statement date and the ending balance from the statement. GnuCash lists deposits and withdrawals; tick each one that appears on the statement. When the difference reaches zero, finish the reconciliation. Reconciled transactions are marked so you can see at a glance which periods are done.
If the difference won't reach zero:
- Starting balance is wrong: a previously reconciled transaction was edited or deleted, or the opening balance was entered incorrectly. See our guide on an opening balance that doesn't match the bank statement.
- Difference equals one transaction: it's missing or duplicated.
- Difference equals twice one transaction: wrong direction, often a refund imported as a withdrawal.
For a broader approach, see how to find bank reconciliation discrepancies.
Credit card accounts
In GnuCash, a credit card is a liability account. Charges increase the balance owed and payments decrease it. When you import a card statement:
- Make sure charges and payments are in separate columns or carry consistent signs.
- In the import options, choose the credit card account as the target.
- When you pay the card from checking, record that payment once, as a transfer between the bank account and the card account. If you import both the bank statement and the card statement, the matcher should recognize the second side as matching the first; check that it does, rather than adding it twice.
A worked example
A freelance photographer switches from a spreadsheet to GnuCash in July and wants the full year in the books. The bank's download only reaches back 90 days, so January to March exist only as PDFs.
- Set up accounts. Assets:Checking, Liabilities:Credit Card, and income and expense accounts for her business categories. The opening balance for checking is taken from the January statement's opening balance.
- Convert PDFs. January to March statements are converted to CSV. Each one balances against its statement.
- Download OFX. April to June are available as OFX from online banking.
- Import January CSV. She creates saved settings: comma separator, skip 1 line,
y-m-ddates, columns Date, Description, Deposit, Withdrawal. In the matcher, she assigns accounts for each line. It takes about 40 minutes. - Import February and March. Using the saved settings. The matcher now suggests accounts for most regular payees, and each month takes 15 minutes.
- Import April to June OFX. The matcher handles most lines from learned assignments.
- Reconcile. Each month is reconciled against its statement ending balance.
By the end, she has six months of reconciled books and a set of saved import settings that makes each future month a short job.
Tips for smoother imports
- Standardize descriptions. Cleaner descriptions mean better matcher suggestions. A cleaned payee column in the CSV is worth the effort.
- Use saved settings. One per bank layout.
- Import oldest first. It keeps balances and reconciliation in order.
- Back up your book before big imports. GnuCash makes this easy, and it gives you a simple undo if something goes wrong.
- Reconcile immediately. The longer you leave it, the harder it is to remember what a line was.
Convert PDF statements for GnuCash
If your bank only provides PDFs, upload them to SheetStatement, confirm the balance check, and download a CSV ready for GnuCash's import assistant. The free plan covers 3 pages a month, and paid plans start at $9 a month.
FAQ
Can GnuCash import PDF bank statements?
Not directly. GnuCash imports CSV, OFX/QFX and QIF files. Convert PDF statements to CSV first and check that each month balances.
Why does everything appear in one column in the CSV import assistant?
The separator setting doesn't match your file. Choose comma for a standard CSV, or the delimiter your file actually uses.
My dates are importing incorrectly. What should I check?
Make sure the date format in the import options matches the file. Using YYYY-MM-DD in your CSV avoids day and month swaps.
What does the import matcher do?
It decides what happens to each imported line: add it as a new transaction with a destination account, match it to an existing transaction, or skip it. It learns from your choices over time.
How do I stop GnuCash creating duplicates?
Import whole statement periods, keep a log of the last date imported, review the matcher's suggestions, and prefer OFX where available because it carries transaction IDs.
Do I need to reconcile after importing?
Yes. Reconciling against the statement's ending balance confirms that GnuCash matches the bank.
Can I undo an import in GnuCash?
There isn't a single undo button for a whole import, which is why backing up the book first is a good habit. If something goes wrong, you can restore the backup or delete the imported transactions from the register, then try again with corrected settings.