Skip to content

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).

  1. 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.
  2. For CSV, download the template. OFX and QFX come from your bank or another finance app.
  3. Optionally opt in to create missing accounts, categories, or tags (off by default — never silent).
  4. Upload a .csv, .ofx, or .qfx file. Galene detects the format.
  5. Review the preview (parsed dates, per-line errors, new vs already imported, and what will be created).
  6. Confirm to create only the valid new rows.

Nothing is written until you confirm.

  1. On Transactions, use the Export CSV icon (arrow out of a tray). That opens /transactions/export with the current list filters in the query string (not a direct file download). Pagination (page, page_size) is dropped.
  2. On Settings → Data, the same icon on the Transactions row opens /transactions/export with no filters (the full set).
  3. 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.

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.

Accepted on import and normalized to YYYY-MM-DD in the preview:

  • YYYY-MM-DD
  • YYYY/MM/DD
  • US M/D/YYYY or MM/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.

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.

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 FITID is 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.

  • 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