Importing a Bank Statement

Banks can export your transaction history as an OFX or QFX file. FundOS handles both formats. Importing one into FundOS is faster than entering transactions manually and gives each transaction a bank-assigned identifier that FundOS uses to detect duplicates on future imports.

Alex downloads a statement from the bank covering the past month. The import can be started two ways: the upload icon in the Accounts column header on the main screen, or the Import OFX button inside the account view.

The Accounts column header on the main screen with the upload icon highlighted
The Import OFX button inside the Checking account view

Both open the same dialog regardless of where they are clicked — selecting a file from the Checking account view does not pre-assign the import to Checking. The account assignment happens inside the dialog. Alex clicks Import OFX from the Checking account view.

Selecting a File

The import dialog opens and asks for a file. Alex clicks Browse, selects the downloaded OFX file, and clicks Next.

The import dialog file picker with a Browse button and a path field

Assigning the Account

FundOS reads the file and shows a preview of the transactions it contains, along with the bank account number reported in the file. Alex needs to tell FundOS which account this number belongs to.

The import preview showing transactions and a dropdown to assign the bank account number to Checking

The dropdown offers Create New Account or any existing account that does not yet have a bank account number assigned. Alex selects Checking and clicks Next.

Reviewing Matches

FundOS compares the imported transactions against the existing register and presents its findings on the merge review screen.

The merge review screen showing potential matches between imported and existing transactions

Every imported transaction — matched or not — carries its own name and memo from the bank, and FundOS asks which one to keep: the existing memo (only available when there’s a match), the imported name, or the imported memo. Existing memos are selected by default whenever a match exists — Alex’s manual memos (“Rent”, “Electric”) will be kept without any action needed. For transactions with no match, like the new credit card charges, FundOS defaults to the imported name.

Three buttons above the list apply a choice to every transaction at once: Use All Existing Memos, Use All Imported Names, and Use All Imported Memos. The first only affects transactions that have a match — unmatched transactions are left as they are, since there’s no existing memo to fall back to.

Whether the name or the memo is more useful depends on what the bank exports — some banks put better detail in one field, some in the other. When there’s no strong signal, FundOS defaults to the existing memo where a match exists, otherwise the imported name — the imported memo is never chosen automatically. Alex’s bank doesn’t export a name for each transaction, so the imported name is blank and the memo is what actually describes the transaction. Alex wants the memo used instead, but still wants existing manual memos (“Rent”, “Electric”) to win wherever a match exists. Clicking Use All Imported Memos sets every transaction to use its imported memo, then clicking Use All Existing Memos immediately overrides that choice for the ones that do have a match — leaving unmatched transactions on the imported memo and matched ones on the existing memo, in two clicks.

The summary line at the bottom tells the story:

  • Already imported — transactions FundOS has seen before, from a previous import of the same account. These are skipped automatically.
  • Potential merges — imported transactions that FundOS matched to an existing manual transaction based on amount and date. Alex’s rent and electric transactions fall into this category.
  • Importing as new — transactions with no match in the register, imported as fresh records.

If FundOS guessed a match incorrectly, the process to fix it is two steps. First, click Change Match on the incorrectly matched pair and then Clear Match to release it — this is necessary because FundOS will not allow the same existing transaction to be matched to two different imports at once. Once cleared, the correct importing transaction will show Assign Match, which opens a list of available existing transactions to match against.

The assign match dialog showing a list of existing transactions to match against

Results

FundOS confirms how many transactions were imported and how many were merged.

The import results dialog showing transactions imported and merged counts

The Checking account now contains the imported transactions alongside the manual ones. The rent and electric transactions show a bank-assigned identifier, reflecting the merge. The opening balance transaction Alex entered manually has no bank identifier — it is not a real bank transaction — and sits in the register untouched.

That last point matters. The bank’s statement starts from an earlier balance than Alex’s opening balance transaction, which means the two tell different stories about what was in the account at that point in time. The next page covers how to handle that with a correction.

Importing the Credit Card Statement

Alex also has a statement from the credit card. Alex clicks Import OFX and selects the credit card OFX file. FundOS shows the preview with a different bank account number — one that does not match any existing account.

The import preview showing credit card transactions and the account assignment dropdown with Create New Account selected

This time Alex selects Create New Account from the dropdown and types Credit Card as the name. FundOS creates the account and links it to this bank account number automatically — it will appear in the Accounts column once the import completes.

Since none of these transactions exist in the register yet, FundOS finds no potential merges. Each new transaction still asks whether to keep the imported name or the imported memo — for example, one shows LITTLE CAESARS as the name and FAST FOOD as the memo. Alex prefers the vendor name for restaurant charges, so this one gets left on the default. For a charge where the bank didn’t categorize it — name NETFLIX.COM, memo UNCATEGORIZED — the name is still the more useful choice, so nothing needs to change there either. The review screen shows all transactions importing as new and Alex clicks Finish.

The import results dialog showing all credit card transactions imported as new

The Credit Card account now appears in the Accounts column with a negative balance, shown in red. A negative account balance in FundOS means the account owes money.

The Accounts column showing both Checking and Credit Card, with Credit Card displaying a negative balance in red

Creating Funds for the Credit Card

The imported credit card transactions introduce spending categories Alex hasn’t set up funds for yet. Alex creates three more funds to cover them:

  • Netflix
  • Flex
  • Dating

With these in place, Alex can categorize the credit card transactions the same way as the checking transactions — using Justified by for transactions that go entirely to one fund.