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.

FieldDecision before import
datePreserve the source date and choose one supported interpretation
paymentUse the documented HomeBank meaning, not the bank’s numeric appearance
number / payee / memoKeep each in its own field, including an empty number position
amountPreserve direction and inspect a known receipt and payment
category / tagsKeep 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 codeDocumented meaning
0None
1 / 6Credit card / debit card
2 / 3Check / cash
4Bank transfer
5Internal transfer, but imported as code 4 through CSV
7 / 8Standing order / electronic payment
9 / 10 / 11Deposit / 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.

  1. Keep the source’s payment meaning alongside your proposed HomeBank code; unknown meaning stays unresolved.
  2. Check the eight positions, including empty values, with the chosen separator.
  3. Flag every proposed code 5 for the documented CSV limitation. Python preserving 5 does not establish a paired internal transfer in HomeBank.
  4. 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

Continue with a related guide