HomeBank CSV: map payment codes without inventing transfers
Updated · 4 min read
The public manual currently identifies the HomeBank 5.10 documentation. Its CSV specification and import assistant guide distinguish the HomeBank-specific CSV from a bank’s native file. Prefer a suitable supported OFX/QFX source when available; prepare a separate working copy if CSV adaptation is necessary.
The desktop apps export date, description, and amount as CSV. Open CSV in Excel to save an XLSX workbook. Statement support varies: verify the result against your own PDF.
Keep all eight fields in their documented order
The transaction import layout is date, payment, number, payee, memo, amount, category, tags. The comma-separated list here names fields; HomeBank’s documented default delimiter is a semicolon. The separator can be changed in preferences in versions supporting that option. Check the chosen delimiter, date convention and decimal interpretation together.
| Field | Decision before import |
|---|---|
| date | Preserve the source date and choose one supported interpretation |
| payment | Use the documented HomeBank meaning, not the bank’s numeric appearance |
| number / payee / memo | Keep each in its own field, including an empty number position |
| amount | Preserve direction and inspect a known receipt and payment |
| category / tags | Keep both positions; an absent value must not shift later fields |
HomeBank’s own CSV export can include an extra leading account column, a C/R status column or split-detail rows depending on export options. Those additions are not automatically part of this eight-field import layout. Inspect the file you actually have instead of assuming an exported register can be reimported unchanged.
Review the payment meanings that matter to your file
| HomeBank code | Documented meaning |
|---|---|
| 0 | None |
| 1 / 6 | Credit card / debit card |
| 2 / 3 | Check / cash |
| 4 | Bank transfer |
| 5 | Internal transfer, but imported as code 4 through CSV |
| 7 / 8 | Standing order / electronic payment |
| 9 / 10 / 11 | Deposit / financial institution fee / direct debit |
The payment lexicon treats an internal transfer as a relationship between accounts. The CSV specification says code 5 is converted to code 4 because the CSV route cannot express multiple accounts. It therefore does not create a properly paired two-account transfer merely because you write 5.
Inspect a small, labelled working example
These two headerless lines are synthetic examples of field placement, not a bank export or a demonstrated HomeBank import:
2026-09-12;6;;Example shop;Synthetic debit card;-24.50;Food;review
2026-09-13;10;;Example bank;Synthetic fee;-2.00;Bank fees;review
Both amounts are negative, but the example supplies different payment meanings: debit card and institution fee. If the source only says “outgoing” and provides no payment-method evidence, do not infer either of those codes. Keep the interpretation unresolved for review rather than claiming a precise method based on the sign.
Open File → Import and inspect the assistant’s destination account, transactions and final summary in a disposable copy before accepting real records. Check field placement and incoming/outgoing amounts. A local CSV structural check can count eight fields, but cannot certify the application’s interpretation or a bank’s code mapping.
Keep the untouched source, the explicit meaning-to-code mapping and any transfer exceptions. The outcome is a reviewable HomeBank working file; it is not automatic two-account reconciliation or proof that every native bank CSV is compatible.
Reproduce the structural checks before reviewing in HomeBank
This section is for the personal bookkeeper adapting a bank CSV to HomeBank’s transaction layout. The downloadable fictional working file keeps the two rows above and adds a third row with payment 5, an empty category and a retained tags field. It is not a bank export or proof of a successful HomeBank import.
import csv
from pathlib import Path
with Path("tp-205-working-example.csv").open(encoding="utf-8", newline="") as source:
rows = list(csv.reader(source, delimiter=";"))
assert all(len(row) == 8 for row in rows)
print([row[1] for row in rows])
print([row[5] for row in rows])
The executed Python result is payment strings ['6', '10', '5'] and amount strings ['-24.50', '-2.00', '-50.00']. Every row has eight fields and retains the empty number position. As negative controls, parsing this same file with a comma gives one field per row, and deleting the last field from the first row fails the eight-field check. These are structural results, not application interpretation.
- Keep the source’s payment meaning alongside your proposed HomeBank code; unknown meaning stays unresolved.
- Check the eight positions, including empty values, with the chosen separator.
- Flag every proposed code
5for the documented CSV limitation. Python preserving5does not establish a paired internal transfer in HomeBank. - Review the assistant’s actual destination and preview in a disposable copy before accepting real records. Stop if amounts, field positions or the account do not agree.
Synthetic review case. The values are teaching data, not a vendor export or an import file.
For a bank source available only as PDF, download LocalExtract. It processes one PDF locally into date,description,amount CSV; review and adapt those rows for the actual destination.
Related guide: Import a bank CSV into GnuCash: map fields and review matches.
Documentation for the added task checked October 16, 2026.
LocalExtract Team
We build LocalExtract, a desktop bank statement converter. Questions or corrections? Contact · Editorial policy