GnuCash CSV import: the format, a free template, and every step of the assistant
GnuCash imports bank transactions from QIF, OFX/QFX and CSV files. CSV is the one most banks offer, and the one that trips people up: the import assistant doesn't skip your header row unless you tell it to, the date format doesn't follow your computer's locale, and the column names changed in GnuCash 5 (the manual still talks about Deposit and Withdrawal). Here's the CSV format GnuCash needs, every screen of the import assistant, how to get old PDF statements in, and free templates with known totals so you can test the import first.
Short answer: in GnuCash choose File → Import → Import Transactions from CSV, pick the file, pick the account in the Account field, set Leading Lines to Skip to 1 for the header row, check the Date Format, then set the column headers in the preview to Date, Description and Amount. Money out is a negative Amount (or map a positive withdrawals column to Amount (Negated)). Assign a transfer account to each line in the matcher, or GnuCash puts it in an Imbalance account. GnuCash can't import a PDF. Free templates: a checking CSV (31 fictional transactions), a credit card CSV (21) and a blank CSV.
See the statement behind the template
Open Utilly's fictional September 2026 checking statement: every line, the balance check from 12,418.36 to 13,440.52, and the CSV download. Free, because the data is made up. The checking template holds those 31 lines, so you know exactly what an import should bring in.
1. The templates
GnuCash doesn't publish a template file for bank transactions. Its CSV assistant opens with the rule: "For a successful import three columns have to be available in the import data:" a Date column, a Description column, and an Amount or Amount (Negated) column. The files here have exactly those three columns. "If there is no Account data available, a base account can be selected to which all data will be imported", so there's no Account column and one file per account. No sign-up.
| File | What's in it | Use it when | Known totals |
|---|---|---|---|
| Checking CSV | Header row + the 31 lines of Utilly's fictional checking statement | Testing an import into a throwaway book, or comparing your bank's file with one GnuCash reads cleanly | 20 withdrawals 28,575.27; 11 deposits 29,597.43; net +1,022.16 |
| Credit card CSV | Header row + the 21 lines of the matching fictional card statement, by date | Testing a credit card account: purchases negative, the payment and a return positive | 19 charges 1,939.94; 2 credits 1,542.18; net −397.76 |
| Blank CSV | The header row only | Pasting your own rows | None |
The rows are written from Utilly's fictional sample statements (explained on sample bank statement PDF), read by the same engine Utilly's converters use, so they can't drift from the PDFs. Description holds the bank's text for the line. Amount is one signed number with two decimals, negative for money out. Dates are year-first (2026-09-01), which is GnuCash's y-m-d, the first date format in the assistant's list. The checking file is plain ASCII text (valid UTF-8) with Windows line endings, about 1.5 KB.
Date,Description,Amount
2026-09-01,ACH DEBIT GUSTO PAYROLL 0912,-6420.18
2026-09-01,STRIPE TRANSFER ST-K2M8Q4,3184.27
2026-09-02,CHECK 2041,-1850.00
2026-09-02,ACH DEBIT AUSTIN ENERGY UTIL,-412.66
2. The CSV format GnuCash needs
The GnuCash manual lists the transaction files it imports: QIF, OFX/QFX, CSV, and, through AqBanking, formats such as CAMT 052 and SWIFT MT940/MT942. No PDF and no Excel file. For a CSV, GnuCash doesn't care what the headers say: you tell it what each column is in the preview. What matters is this:
| Column | What GnuCash does with it | In the template |
|---|---|---|
| Date | Required. Read with the Date Format you choose: y-m-d, d-m-y, m-d-y, d-m, m-d or Locale. "Choices are displayed with a Hyphen (-) separator, but will also match Dot (.) and Slash (/) as separator." | 2026-09-01 |
| Description | Required. Becomes the transaction description, and the matcher learns transfer accounts from it | The statement text, e.g. STRIPE TRANSFER ST-K2M8Q4 |
| Amount | Required (or Amount (Negated)). Positive raises a bank account's balance, negative lowers it. Currency symbols and spaces are stripped before the number is read | −6420.18 for payroll, 3184.27 for a Stripe deposit |
| Anything else | Optional. Num, Notes, Memo and the rest have their own column types (section 4); set a column you don't want, such as a running Balance, to None | None |
Use one file per account and pick that account in the assistant. A CSV that already names the account in a column (for example one exported from GnuCash) can use an Account column instead.
3. The import assistant, screen by screen
Back up the book first (or test in a new, empty one). Then File → Import → Import Transactions from CSV opens the CSV Transaction Import Assistant:
- Select File for Import: pick the CSV, then Next.
- Import Preview. This is where almost every problem is fixed:
- Account: choose the checking or card account the lines belong to.
- File Format: Character-separated with Comma (,) is the default. European bank files often need Semicolon (;).
- Encoding: UTF-8 by default.
- Date Format: the manual warns: "This does not default to the Locale setting so check it matches the data you are importing". Choose
y-m-dfor the templates and Utilly's CSV,m-d-yfor a US bank's 09/01/2026. - Currency Format: Locale, "Period: 123,456.78" or "Comma: 123.456,78".
- Leading Lines to Skip: 0 by default, so the header row is read as a transaction and fails. Set it to 1 (or more, if the bank puts account details above the table). Trailing Lines to Skip drops a totals line at the bottom.
- Column headers: click the header above each column and choose its type: Date, Description, Amount. Leave the rest on None.
- Load and Save Settings: once it works, type a name and click Save; next month, load it and every setting comes back.
- Match Import and GnuCash accounts: maps account names from an Account or Transfer Account column to accounts in your book. The manual says the window isn't shown when the mappings can be matched automatically.
- Transaction Information: clicking Next runs the checks. If any fail, you're sent back to the preview with the message (section 9).
- Match Transactions: opens the import matcher (section 5). Assign transfer accounts, then OK.
- Import Summary: click Close.
4. Column types (and the old Deposit/Withdrawal names)
GnuCash 5 (the current release is 5.17) renamed the amount column types. GnuCash 4.x had Deposit and Withdrawal; GnuCash 5 has Amount and Amount (Negated). The online manual still describes Deposit and Withdrawal and admits "Some experimentation may be necessary to determine the correct allocation of the Deposit and Withdrawal headings." In GnuCash 5's source code the rule is simple: the amount booked to the account is Amount minus Amount (Negated), and an empty cell counts as zero.
| Your bank file has | Set the column type to | Older guides call it |
|---|---|---|
| One signed amount, money out negative (Utilly's CSV, the templates) | Amount | Deposit |
| One amount, money out positive (many card exports) | Amount (Negated) | Withdrawal |
| Separate Debit and Credit columns, both positive | Credit → Amount, Debit → Amount (Negated) | Deposit and Withdrawal |
| A running Balance | None (GnuCash calculates its own) | None |
| Check numbers | Number | Num |
| A second description field | Notes or Memo | Notes or Memo |
Amount and Amount (Negated) can each be set on more than one column; GnuCash adds them up. Value, Price and the Transfer columns are for currency conversions and multi-split files, mostly ones exported from GnuCash itself (load the GnuCash Export Format settings for those).
5. The import matcher and transfer accounts
Every transaction in GnuCash has two sides. The file gives one (the bank account); the matcher asks for the other, the transfer account: an expense, income, another bank account. What the manual says happens:
- Duplicates: the matcher looks for an existing transaction in the same account within about 42 days, scoring date, amount, check number, description and memo. "Exact matches will generate a high match probability and flag a transaction as matching an existing transaction and therefore not to be imported." So re-importing an overlapping file is safe if you check the C (Clear) rows.
- New lines get the A (Add) box. Gold rows have no transfer account yet; double-click one to pick it, or select several rows and right-click to assign one account to all of them.
- Lines left without one go to Imbalance: "By default, if no transfer account is assigned, transactions will be assigned to an Imbalance account on import."
- GnuCash learns: "It is important to assign a transfer account to each transaction prior to import of the transactions." Assignments are remembered from the descriptions, so next month's file arrives mostly pre-filled.
- Imported lines are marked cleared, not reconciled: "The reconciliation status of an imported transaction is set to cleared (c) on import of a new transaction." Tick Reconcile after match to go straight into reconciling against the statement.
6. Old transactions and PDF statements
Banks often let you download only a few months as CSV or OFX, while PDF statements go back years, and GnuCash can't read a PDF. The route that works:
- Convert each PDF statement to CSV with a bank statement PDF to CSV converter (or the card version). Utilly's clean CSV is
Date,Description,Amount,Balancewith money out negative. - In the preview: Leading Lines to Skip 1, Date Format
y-m-d, columns Date / Description / Amount, and the Balance column None. Save the settings as, say, "Utilly CSV". - Import one month first and compare the account balance with the statement's closing balance. Then import the rest, oldest first.
- Reconcile each month against its statement (Actions → Reconcile, or tick Reconcile after match).
Prefer OFX? GnuCash imports it too (File → Import → Import OFX/QFX), and the PDF to OFX route skips the column mapping. QIF works for older files; see PDF to QIF.
7. Credit card accounts
A credit card is a liability account in GnuCash. With the Amount column type, a negative amount is a charge (you owe more) and a positive one is a payment or refund, the same sign as money leaving and entering a bank account. The credit card template follows that: 19 purchases and interest negative, the payment and a return positive. If your card's export shows purchases as positive numbers, set that column to Amount (Negated) instead. Utilly's card CSV already has purchases negative, so use Amount. Assign the card payment's transfer account to the checking account it came from. When the checking file comes in later, the same payment is already in that account, so check the matcher flags it C (Clear) rather than A (Add), or it will be counted twice.
8. Checking the import against known totals
Import the templates into a new, empty GnuCash book with a Checking Account and a Credit Card account at 0, never into a book you rely on. Then compare:
| Check | Checking CSV | Credit card CSV | If it's wrong |
|---|---|---|---|
| Transactions | 31 | 21 | One more: the header row came in (Leading Lines to Skip 1). Fewer: rows were matched as duplicates or skipped |
| Money out | 28,575.27 (20) | 1,939.94 (19) | A different total means the wrong column is set to Amount |
| Money in | 29,597.43 (11) | 1,542.18 (2) | Same as above |
| Change in balance | +1,022.16 | 397.76 more owed | The opposite sign means the column should be Amount (Negated), or the other way round |
| Dates | Sept 1–30, 2026 | Sept 1–30, 2026 | Other months or parse errors mean the wrong Date Format |
| Statement balance | 12,418.36 → 13,440.52 | owed 2,846.12 → 3,243.88 | Enter the opening balance first and the account ends on the closing one |
The data is fictional (Example Community Bank and Sample Customer LLC don't exist; both statements say SAMPLE STATEMENT, FICTIONAL DATA FOR DEMONSTRATION ONLY). Replace every row before using the template for real.
9. Error messages and fixes
The messages below are the importer's own wording from GnuCash 5's source code.
| Message or symptom | Fix |
|---|---|
| "Please select a date column." | Click the Date column's header and choose Date |
| "Please select an account column or set a base account in the Account field." | Pick the account in the Account field at the top of the preview |
| "Please select a description column." | Set the description column's header to Description |
| "Please select a (negated) amount column." | Set the amount column to Amount (or Amount (Negated)); there is no Deposit or Withdrawal in GnuCash 5 |
| "Not all fields could be parsed. Please correct the issues reported for each line or adjust the lines to skip." | Usually the header row: set Leading Lines to Skip to 1. Otherwise fix the lines the preview reports, or tick Skip Errors to leave them out |
| "Value can't be parsed into a number using the selected currency format." | Change Currency Format (Period for 1,234.56, Comma for 1.234,56) |
| "No valid data found in the selected file. It may be empty or the selected encoding is wrong." | Change Encoding, or check the file isn't a PDF or Excel file renamed to .csv |
| Dates in the wrong month or year | Pick the Date Format that matches the file (m-d-y for most US banks, y-m-d for Utilly's CSV) |
| Everything landed in Imbalance | Open the Imbalance account and change the transfer account on each line; next time, assign them in the matcher |
| Spending came in as deposits | Delete the imported transactions and import again with the column set to Amount (Negated) |
Keeping the same history in a budgeting app too? Actual Budget's CSV import also takes one signed Amount column, YNAB uses Outflow and Inflow, and Quicken has its own layouts.
Get PDF statements into GnuCash
PDF statements, downloaded or scanned, get a free preview with the balance check, no sign-up. The clean CSV has one signed Amount column, money out negative, the way GnuCash's Amount column reads it. Files are processed in memory and not stored.
Utilly isn't affiliated with GnuCash. The rules, steps and quotes above are from the GnuCash manual and GnuCash's open-source code (release 5.17), checked November 11, 2026; the templates weren't imported into a live GnuCash book, and screens may differ in other versions. Sources: GnuCash manual, Importing Transactions from Files, the CSV import assistant's text, column types and amount parsing, the importer's checks and messages, date formats. If a screen differs, follow GnuCash's current manual.
FAQ
Can GnuCash import CSV files?
Yes. Choose File, Import, Import Transactions from CSV. The CSV Transaction Import Assistant needs three columns: a Date, a Description and an Amount or Amount (Negated) column. Pick the account the lines belong to in the Account field if the file has no account column, then map each column in the preview.
What CSV format does GnuCash need?
No fixed layout: you choose each column's type in the import preview. At a minimum the file needs a date, a description and an amount. One signed amount (money out negative) maps to Amount; a column where money out is positive maps to Amount (Negated). Set any other column, such as a running balance, to None.
Is there a GnuCash CSV import template?
GnuCash doesn't publish one. Utilly has free CSVs headed Date, Description, Amount, no sign-up: a checking file with 31 fictional transactions, a credit card file with 21, both with known totals, and a blank file.
Where are Deposit and Withdrawal in the GnuCash CSV import?
They were renamed in GnuCash 5. Deposit is now Amount and Withdrawal is now Amount (Negated). The amount booked to the account is Amount minus Amount (Negated), so for separate Debit and Credit columns set Credit to Amount and Debit to Amount (Negated).
Why does GnuCash say not all fields could be parsed?
Most often the header row is being read as a transaction. Leading Lines to Skip is 0 by default, so set it to 1. Otherwise check the Date Format, which doesn't follow your locale, and the Currency Format.
Can GnuCash import a PDF bank statement?
No. GnuCash imports QIF, OFX/QFX and CSV files, plus some European formats through AqBanking. Convert the PDF statement to CSV (or OFX) first, then import that file.
Why did my imported transactions go to Imbalance?
No transfer account was assigned in the import matcher. Each imported line needs the other side of the transaction, such as an expense or income account; lines left without one go to an Imbalance account. Assign them in the matcher before clicking OK, and GnuCash learns the assignments for next time.
Related guides
- Actual Budget CSV import: the format, a free template, and old PDF statements
- Free sample bank statement CSV (fictional, with known totals)
- How to import a CSV file into Quicken (Windows, Mac and Simplifi)
- Free sample OFX file (bank and credit card), explained
- Catch-up bookkeeping: getting 12 months of bank statements into QuickBooks or Xero and reconciled
- How to find a bank reconciliation discrepancy: 7 causes and a 15-minute method
Related tools
- Bank reconciliation checker: compare a bank statement to your books and list missing, duplicate and mismatched transactions.
- Receipt to CSV: turn PDF or photo receipts and invoices into CSV, Excel, or QuickBooks and Xero bill imports.