Import and export transactions
Galene can import transactions from a CSV, OFX, or QFX file — useful when a bank isn’t connected yet or you have history from another tool. You can also export CSV from /transactions/export, with the same columns as CSV import (or a subset you check).
Import flow
Section titled “Import flow”- Open Transactions and use the Import icon (arrow into a tray), or go to
/transactions/import. The same icon sits on Settings → Data next to Delete on the Transactions row. - For CSV, download the template. OFX and QFX come from your bank or another finance app.
- Optionally opt in to create missing accounts, categories, or tags (off by default — never silent).
- Upload a
.csv,.ofx, or.qfxfile. Galene detects the format. - Review the preview (parsed dates, per-line errors, new vs already imported, and what will be created).
- Confirm to create only the valid new rows.
Nothing is written until you confirm.
Export
Section titled “Export”- On Transactions, use the Export CSV icon (arrow out of a tray). That opens
/transactions/exportwith the current list filters in the query string (not a direct file download). Pagination (page,page_size) is dropped. - On Settings → Data, the same icon on the Transactions row opens
/transactions/exportwith no filters (the full set). - On the export page, change filters (they apply as you go; there is no Filter button). Selected accounts, categories, tags, and empty fields (account, category, merchant, or tag) are pills with ×. Check the columns to include (all seven on by default; at least one required), then Export CSV. The file matches the matching-count on the page.
The download is UTF-8 CSV named like galene-transactions-YYYY-MM-DD.csv. One row per transaction. Split parts are not extra columns; the primary category name is used when category is checked. There is no id, splits, or provider column.
You need to be signed in. The file does not include bank secrets, provider ids, or external ids.
The authenticated file URL is /transactions/export.csv with the same filter query plus fields. Prefer the export page rather than bookmarking the .csv URL.
Columns
Section titled “Columns”These columns are the import template and the default export header. Unchecked columns are omitted from the file.
| Column | Required on import | Meaning |
|---|---|---|
date |
yes | See date formats below. Export writes YYYY-MM-DD. |
account |
yes | Match an existing account name (case-insensitive), or create if opted in. Export writes the account name. |
amount |
yes | Dollars; negative = expense, positive = income. Export uses the same signs. |
merchant |
no | Payee / description. Empty when unset. |
notes |
no | Free text. Empty when unset. |
category |
no | Existing category name, or create if opted in (type from amount sign). Empty when uncategorized. |
tags |
no | Names separated by ; or | on import. Export joins existing tag names with ;. Empty when there are none. |
Header aliases such as payee → merchant and account_name → account are accepted on import.
A file exported from Galene can be re-imported when the accounts, categories, and tags already exist. Turn create-if-missing off to confirm the preview does not invent column errors on well-formed rows.
Date formats
Section titled “Date formats”Accepted on import and normalized to YYYY-MM-DD in the preview:
YYYY-MM-DDYYYY/MM/DD- US
M/D/YYYYorMM/DD/YYYY(also-instead of/) - US two-digit year
M/D/YY(00–69 → 2000–2069, 70–99 → 1970–1999)
Invalid or ambiguous-looking calendar dates are rejected with a per-row error.
Create-if-missing
Section titled “Create-if-missing”On the upload step, checkboxes control whether unknown names become new records on confirm:
- Accounts — created as type
bank - Categories — type from the row’s amount (expense vs income)
- Tags — created with the given name
If a checkbox is off, unknown names are errors on that row (row skipped). The preview lists everything that will be created before you commit.
OFX and QFX
Section titled “OFX and QFX”Bank and credit-card statement files (.ofx and .qfx) use the same upload, preview, and confirm steps. QFX is the same statement format with a different extension.
| OFX field | Galene |
|---|---|
DTPOSTED |
Transaction date (YYYYMMDD… → YYYY-MM-DD) |
TRNAMT |
Signed amount: negative = expense, positive = income |
NAME, else MEMO |
Merchant |
MEMO when NAME is set |
Notes |
BANKID + ACCTID (or ACCTID alone) |
Account name |
The preview shows the detected format. An account name that already exists (case-insensitive) is reused. An unknown name is an error unless Create missing accounts is on — Galene does not invent an account on its own. Categories and tags are not read from OFX; categorization rules still run on confirm when the row has no category, the same way they do for CSV.
Duplicates are marked Skipped in the preview and are not written again:
- When the statement includes
FITID, Galene remembers that id together with the statement account. - When
FITIDis missing, a row matches an existing transaction with the same account, date, signed amount, and payee.
A row with a bad date or a zero amount is an error. Other rows in the file can still be confirmed. Investment, security, and position sections are not imported.
Limits
Section titled “Limits”- Max upload size 2 MB for CSV, OFX, and QFX
- Preview is held briefly on the server after upload; if it expires, upload again
- OFX/QFX export, investment lots, and background bulk jobs are out of scope for this flow