GnuCash has good importers — OFX/QFX, QIF and CSV, all under File → Import — but none of them reads a PDF. For old statements, closed accounts or banks that only email PDFs, you convert first and import second. The format you choose decides how much work the second half is, and GnuCash's own reconcile window tells you whether it worked.
Pick the format: OFX first, then QIF, then CSV
GnuCash can import three structured formats, and they are not equally convenient.
- OFX (or QFX) is the easiest. The file labels every field and gives each transaction an ID, and GnuCash uses that ID to recognise a transaction it has already imported. Import the same file twice and the second time it knows. It also remembers which GnuCash account the file's account belongs to, so the next statement lands in the right place without asking.
- QIF is older and plainer. It carries dates, payees and amounts, but no transaction IDs, and dates can be ambiguous (is 03/04 March or April?). GnuCash's QIF importer asks you about the account and, when it cannot tell, the date format. It works well, with a few more questions.
- CSV is the most flexible and the most manual. The CSV import assistant asks you to assign each column — date, description, deposit, withdrawal — and to pick the date format and separators. Useful when you need full control; slower for routine imports.
If you are converting from a PDF anyway, ask for OFX.
Step 1: convert the PDF
Check your online banking first: if it still offers a download of that period in OFX or QIF, use it — it comes from the bank's own system and is exact. Conversion is for everything else: statements older than the download window, closed accounts, PDFs a client or tenant sent you, paper statements you have scanned.
The bank statement converter here reads text PDFs, scans and phone photos, and writes OFX, QIF and CSV. Two details matter for GnuCash:
- Every OFX transaction gets a stable ID derived from the transaction itself, so importing the same file twice does not duplicate anything — GnuCash recognises the IDs the second time.
- Card statements are written as credit card accounts in both OFX and QIF, so charges increase the liability and payments reduce it, as GnuCash expects.
Before downloading, the converter checks the statement's own arithmetic: opening balance plus money in minus money out must equal the printed closing balance, to the cent. A file that fails that check will import without complaint and leave your books wrong, so it is worth knowing before you import rather than during reconciliation.
Step 2: import an OFX file
- Go to File → Import → Import OFX/QFX… and choose the file.
- The first time GnuCash sees the account in the file, it asks which GnuCash account it belongs to. Pick the existing account (for example Assets:Current Assets:Checking Account, or Liabilities:Credit Card), or create one. GnuCash remembers the choice.
- The import matcher opens, listing every transaction. For each one GnuCash proposes an action — add it as new, or match it to a transaction already in the account — and a destination (the other side of the transaction, such as Expenses:Groceries).
- Review, assign destinations where GnuCash has none, and press OK.
Transactions GnuCash cannot assign go to an Imbalance account. That is not an error; it is a to-do list. Open Imbalance after the import and move each line to its proper account.
How the import matcher learns
The matcher is the reason importing gets faster over time. It learns from your choices: once you have assigned "TESCO STORES 2231" to Expenses:Groceries a few times, it starts proposing that account for similar descriptions on its own. The first statement from a bank takes the longest; by the third or fourth, most lines arrive already assigned.
It also looks for transactions you entered by hand. If the account already contains a transaction with a matching amount and a nearby date, the matcher proposes to match rather than add, so you do not end up with the same payment twice. Check those proposals: two different payments of the same amount a few days apart can be matched wrongly.
Descriptions from a converted PDF are the same text the bank printed, so the matcher treats them like any bank download.
Importing QIF or CSV instead
QIF. Use File → Import → Import QIF…. The assistant loads the file, asks which account the transactions belong to when the file does not name one, and asks about the date format if it is ambiguous. It then offers to find duplicates of transactions already in your books before importing. Take the time on the date question: a wrong day/month order produces a register that looks fine and is wrong for every day after the 12th.
CSV. Use File → Import → Import Transactions from CSV…. Choose the separator, tell GnuCash which row the data starts on, assign each column (Date, Description, Deposit, Withdrawal — or a single signed Amount), set the date format and the account, and continue into the same matcher as OFX. You can save the column settings, which helps if every statement has the same layout.
Step 3: reconcile
Importing is not finished until the account reconciles. In the account register, choose Actions → Reconcile…, enter the statement's closing date and ending balance, and tick off the imported transactions. The difference at the bottom should reach zero.
If it does not:
- The difference equals one transaction. It is missing (dropped in conversion, or matched to a manual entry it should not have matched) or doubled.
- The difference is twice one transaction. A payment was recorded with the wrong sign — look at credit card payments and refunds first.
- The difference is small and odd, like 0.09 or 90. A digit was misread, most often on a scanned statement.
A converted file that passed the balance check before import rules out the first and third causes, which leaves only mistakes made inside GnuCash — usually a wrong match in the matcher.
Doing a year, or a client's books
The loop is the same for every statement: convert, import, clear Imbalance, reconcile. It is the right way to enter history, but twelve months across three accounts is thirty-six rounds of it. If you would rather have the files arrive ready to import, a batch can be converted for you, every statement reconciled to the cent before it is sent. For the spreadsheet side of the job, see how to convert a bank statement PDF to Excel.
Questions
- Can GnuCash import a PDF bank statement?
- No. GnuCash imports OFX/QFX, QIF and CSV files (plus some banking formats such as MT940). A PDF statement must be converted to one of those first.
- Which format is best for GnuCash: OFX, QIF or CSV?
- OFX. It carries a unique ID for each transaction, which GnuCash uses to skip ones already imported, and GnuCash remembers which account the file belongs to. QIF is a good second choice; CSV gives the most control but needs column mapping each time unless you save the settings.
- Why did my imported transactions go to an Imbalance account?
- Every GnuCash transaction needs two sides. When the import matcher cannot tell which expense or income account a line belongs to, it uses Imbalance as a placeholder. Move those lines to the right accounts after importing; the matcher learns from it.
- Will importing the same OFX file twice duplicate transactions?
- No. GnuCash records each transaction's OFX ID and recognises it on a second import. QIF and CSV have no such ID, so rely on the matcher's duplicate detection and check before confirming.
- Can I import a scanned paper statement into GnuCash?
- Yes, once it has been read into OFX, QIF or CSV by a converter that handles images. Check the result against the statement's balances, because scans are where digits are misread.