‹ All help articlesThe household budget

Import a bank or card statement file

Upload the OFX, QFX or CSV file your bank exports, review each row in the Imports inbox, and let rules pick the categories next time.

Last updated 24 Sep 2026

This is for the grown-up who would rather upload a statement than type a month of transactions. It covers what to download from the bank, uploading, the inbox, mapping a CSV once, category rules, rows that look like duplicates or transfers, and what is kept. CubbyJar never talks to the bank itself: you download the file yourself, and nothing is posted until you confirm it.

Get the file from your bank

Most banks and card issuers offer a download under Statements, Activity or Export. CubbyJar reads three kinds:

  • OFX or QFX, the Quicken-style formats, which carry the bank’s own transaction ids and closing balance. Prefer these when offered.
  • CSV, which you map to columns once per account.

A file is 5 MB and 5,000 transactions at most, holds one account, and you can upload 20 files an hour. Export one account at a time; a file with two says “That file holds more than one account. Export one account at a time.”

Upload it

Uploading works in the web app; the phone app shows “Upload files from the web app — open CubbyJar in a browser to import a statement.” on the same screen and still lets you review rows.

  1. Go to More.
  2. Tap “Imports”. On a computer, Imports sits in the sidebar beside Reports.
  3. Tap “Upload a file”. Under “Account”, pick the bank or card account the file belongs to; a kid’s jar and an archived account are not offered.
  4. Tap “Choose a file…” and pick the download.

A toast reads “{added} new rows, {skipped} already imported”. Already imported counts the rows that account has seen before, so uploading last month’s file again brings nothing back. The inbox then shows just that upload; “Clear” shows everything again.

Review the inbox

Each upload has a header card with the file name, the date range, and “Bank: {bank} on {date} · CubbyJar: {ours}”, the closing balance in the file beside the account’s balance in CubbyJar, so you can tell when every row has been handled. A CSV has no statement balance.

Each row shows the bank’s description and memo, the date and account, the amount, a “Pending” pill when the bank has not settled it yet, and a category chip. The chip is either a suggestion or “Pick a category”. Tap the row for its actions:

  • “Confirm” turns the row into a transaction in that category, dated the bank’s date. A row the bank marks pending becomes a pending transaction; the rest are paid at noon that day.
  • “Split across categories” confirms it as several lines; they have to add up to the row’s amount.
  • “Dismiss” drops the row without posting anything. There is no undo, and a dismissed row stays known as already imported for 90 days, so it does not come back on the next upload.

“Confirm all suggested” on the header card confirms every row of that upload that has a suggestion and no duplicate or transfer hint, and reports “{confirmed} confirmed, {skipped} skipped”. Confirmed rows land in Activity as ordinary transactions, where you can still edit or delete them. A file uploaded to the wrong account cannot be moved: dismiss its rows and upload it again.

Home shows “{count} imported rows to review” under the tiles while anything is waiting, and other screens catch up with the confirms when you leave Imports.

Map a CSV once

The first CSV for an account opens “Map the columns”, with the first 20 lines of the file on screen. Say whether “The first line is a header row”, skip up to 15 lines above it, and pick the “Date column” and “Date format”, the “Description column”, an optional “Memo column”, and how the amounts are written: “One amount column” with “Negative numbers are money out”, or “Debit and credit columns”. A “Pending column” is optional. The “Parsed as” list shows how the first lines read before you commit.

“Save and stage” remembers the mapping for that account, so the next file with the same header goes straight to the inbox; a file with a different header opens the map screen again, pre-filled. If a line does not fit, a banner titled “Some lines did not match” names the first ones, such as “Line 12: the date did not match the format you picked”, and nothing is staged until it is fixed. “Discard upload” throws the file away.

Amounts can be written 1,234.56, $1,234.56, -12.34 or (12.34); the comma-decimal style used in much of Europe is not read.

Rules that pick the category

CubbyJar suggests a category for each row from, in order: rules you wrote, rules it learned, and the categories you have used for that description before. Confirming a row with a single category teaches a rule, so the second month from the same bank arrives mostly categorized. Splits and links teach nothing.

“Categorisation rules” at the bottom of the inbox lists every rule as its text, its category and “Learned · {count} hits” or “{count} hits”. “Add rule” asks for the “Text to match” and a “Category”; a rule fires for any row whose description contains that text, and the longest match wins. The row menu offers “Edit rule”, “Turn off” or “Turn on”, and “Delete rule”; “Show inactive” brings the switched-off ones back into view. Editing a learned rule’s text or category makes it yours.

Archiving a category turns off the rules that point at it, and un-archiving does not turn them back on. A category with a rule, on or off, cannot be deleted; the app answers “This category is in use; archive it instead.”

Duplicates and transfers

Two hints can appear under a row’s description:

  • “Looks like an existing transaction · {date}” means the same account already has a transaction with the same amount, the same direction and a date within three days, such as a rent payment you typed by hand or a recurring bill that already posted. “Link to existing transaction” in the row menu attaches the row to it instead of posting a second one, and marks the existing transaction paid if it was still pending.
  • “Transfer with {account}” means another pending row, on a different account, matches this one in the opposite direction with the same amount within three days, which is what a card payment looks like from both sides. “Confirm as transfer” on either row posts one transfer between the two accounts and clears both rows.

Rows with either hint are skipped by “Confirm all suggested” and wait for you.

What is kept

The file itself is not stored; it is read once and thrown away. What stays is each row’s date, amount, description, memo and the bank’s transaction id, plus the closing balance in the file. From an OFX or QFX file, CubbyJar keeps a fingerprint of the account number and its last four digits, never the number itself, so it can warn when a file from a different account is uploaded. A CSV waiting for its column mapping keeps its text for one day, then the upload is dropped. Nothing in this feature reads a bank account, and kids see none of it.