Bank statement to GnuCash
A statement GnuCash can actually import.
Convert statement PDFs into plain OFX and bring them in through File → Import → Import OFX/QFX, where GnuCash maps them to an account and runs its own matcher before anything is posted.
50 free page credits · No card · Cancel anytime
- Plain OFX, no partner ID
- Account mapping remembered
- Matcher-friendly rows
Export transactions
1,284 rowsFormat
| Date | Description | Amount |
|---|---|---|
| 2025-10-24 | STRIPE PAYOUT 4af2c9 | +4,820.00 |
| 2025-10-23 | AWS EMEA SARL | −1,204.00 |
| 2025-10-22 | WHOLE FOODS MKT | −112.88 |
PDF statement you upload
24/10 STRIPE PAYOUT 4af2c9........4,820.00
23-10 AWS EMEA SARL us-east-1 1,204.00-
22 OCT WHOLE FOODS MKT #214 112.88
21/10 UBER *TRIP..............24.40
20-OCT-2025 GUSTO PAY 9931 18,440.00
[illegible: scan quality]
OFX file GnuCash imports
<STMTTRN>
<TRNTYPE>CREDIT
<DTPOSTED>20251024
<TRNAMT>4820.00
<NAME>Stripe
<MEMO>STRIPE PAYOUT 4af2c9
</STMTTRN>
<STMTTRN>
<TRNTYPE>DEBIT
<DTPOSTED>20251023
<TRNAMT>-1204.00
<NAME>Amazon Web Services
<MEMO>AWS EMEA SARL us-east-1
</STMTTRN>
… 3 more transactions
GnuCash reads OFX. Your bank sends a PDF.
Most banks will not hand a GnuCash user a machine-readable file at all: the download menu offers a statement PDF and, if you are lucky, a CSV whose columns change between accounts. Direct Connect exists but few institutions still support it for personal use. So the ledger gets typed by hand, or built from a CSV that has to be re-mapped every quarter, when the format GnuCash was built to import is one conversion away.
How it works
From statement PDF to GnuCash, screen by screen
- 01
Upload the statement
Scanned, multi-page, and password-protected PDFs all work, up to 50 MB each. Several months can go in at once.

Drop the file in, forward the bank's email to a private import address, or post it to the API. - 02
Confirm the import
Check what is queued and decide whether statements carrying warnings still count. Nothing is read until you confirm.

The warning types that will still count toward analytics are named before anything is extracted. - 03
Let it parse and reconcile
Every line is extracted and checked against the statement's printed opening and closing balances: the check GnuCash cannot do for you, because it never sees the statement.

The activity panel names the stage and the seconds elapsed as the statement moves through the queue. - 04
Clean the descriptions
GnuCash's matcher learns from the description, so a consistent narration today is an automatic match next month. Fix them in bulk before the file exists.

Select a range and correct the merchant or description in one action rather than a row at a time. - 05
Export OFX
Choose OFX, not QuickBooks. GnuCash reads both .ofx and .qfx, but the plain file is the one with nothing Intuit-specific in it.

OFX and QuickBooks sit side by side in the format list. GnuCash takes the left one.
Once you have the file
Importing the OFX into GnuCash
Three dialogs, and the second one only appears the first time.
- 1
File → Import → Import OFX/QFX transactions
GnuCash opens a file chooser. Pick the exported .ofx file and press Import.
- 2
Map the file's account to one in your tree
The Account Selection dialog asks which GnuCash account this statement belongs to. On later imports from the same source, GnuCash remembers the mapping and skips the question.
- 3
Work the import matcher
The generic transaction matcher opens next, proposing matches against transactions you already have and letting you confirm, edit, or add each row before it is posted.
- 4
Post, then reconcile against the statement
With the rows in, reconcile the account to the statement's closing balance, which the export has already verified, so it should agree first time.
OFX import requires GnuCash to have been built with libofx. Official builds for Linux, macOS, and Windows include it; if the menu entry is missing, that is why.
What survives the trip into your ledger
OFX 1.02, the profile libofx expects
SGML rather than XML, with the OFX header block and one <STMTTRN> per transaction: the shape GnuCash's importer was written against.
One account per file
Filter to a single account before exporting and the Account Selection dialog has one obvious answer, which is the mapping GnuCash will reuse from then on.
Rows the matcher can match
Consistent, resolved descriptions give the import matcher something stable to compare against, so repeat merchants stop arriving as unmatched every month.
FITIDs on every transaction
The identifier OFX defines for de-duplication, so an overlapping import adds what is new rather than doubling a month you already posted.
Scanned statements included
A statement that only exists as a scan or a photograph goes through OCR before parsing, so paper archives convert like anything else.
Cards and closed accounts too
Anything you can download as a PDF converts, including credit cards and accounts that no longer exist to connect to.
OFX, QFX, and QBO in GnuCash
GnuCash reads more than one of these. They are not equally worth using.
| File | Where it stands |
|---|---|
| .ofx | Plain Open Financial Exchange, and what this export produces. Imported through File → Import → Import OFX/QFX. |
| .qfx | Intuit's Quicken variant of OFX. GnuCash's importer accepts it, but the file must come from a bank in Intuit's programme. |
| .qbo | OFX with an Intuit web-connect header. Meant for QuickBooks; there is no reason to hand it to GnuCash when plain OFX is available. |
| CSV | GnuCash imports CSV too, but every file needs its columns mapped and carries no transaction identifiers. |
FAQ
Common questions
How do I import a bank statement into GnuCash?
Convert the statement PDF to OFX, then use File, Import, Import OFX/QFX transactions. GnuCash asks which account the file belongs to, then opens its import matcher so you can confirm each row before it is posted.
Does GnuCash import PDF statements directly?
No. GnuCash imports OFX, QFX, and CSV. A PDF has to be converted first, which is what this does, into the OFX profile its importer was written against.
Why not just use CSV?
CSV works, but every file needs its columns mapped, the date format is ambiguous, and there are no transaction identifiers, so re-importing an overlapping period duplicates rows the matcher has to catch by hand.
Will GnuCash remember which account the file belongs to?
Yes. The Account Selection dialog appears on the first import from a given source account, and the mapping is reused on later imports from the same source.
The Import OFX/QFX menu entry is missing. Why?
OFX support is provided by libofx, and a build compiled without it has no such menu entry. The official GnuCash builds include it; distribution packages occasionally split it into a separate package.
Will re-importing the same month duplicate transactions?
Each row carries a FITID, and the import matcher compares incoming transactions against what is already in the account, so an overlapping import is proposed as matches rather than as new rows.
Converting a statement from a specific bank?
Written up for the format each of these banks prints.
Keep exploring
Bank Statement → QuickBooks
Categorize first, then export an OFX/QBO QuickBooks imports.
Bank Statement → Xero
OFX for Import a Statement, including pre-feed history.
Bank Statement → Moneydance
OFX for the accounts Direct Connect cannot reach.
Bank Statement → Sage
OFX scoped to one account, the way Sage reads it.
Bank Statement → Wave
The file format Wave recommends over CSV.
Stop typing statements into GnuCash.
Convert the PDF, check the balance ties, and import the OFX the way GnuCash expects it.