Actual Budget is a strong destination for BankSync because its budgeting model is local-first while its server can perform scheduled bank imports. The connection uses SimpleFIN: BankSync handles supported bank connectivity and Actual consumes the standard account feed.
The setup is short, but three choices deserve care: create or select the right local Actual account, map each remote account once, and protect the server-side sync credential.

Before connecting
Update the Actual client and actual-server together; the official SimpleFIN guide requires version 24.10.0 or newer. Bank sync does not work with the local-only desktop client by itself—you need actual-server.
In BankSync, connect the supported bank and select the SimpleFIN-compatible destination flow. Use the current BankSync UI to create the connection value or setup token. A setup token is claimed once, so do not paste the same token into multiple budgets.
Actual’s security documentation is candid: bank-sync keys are stored server-side and are not covered by the budget’s end-to-end encryption. If you use third-party hosting, the operator may technically be able to access the sync credential. Self-host when that boundary matters.
Actual Budget setup
Connect the bank in BankSync
Complete the institution’s authorization or open-banking consent and confirm accounts appear.
Create the SimpleFIN connection
Use BankSync’s current SimpleFIN destination flow and copy the one-time setup token.
Open Actual’s bank-sync setup
In the budget, choose Add Account and the SimpleFIN option.
Paste the setup token
Submit it once and wait for Actual to discover the available accounts.
Map accounts deliberately
Link each remote account to an existing Actual account or create a new one.
Run the first sync
Compare balances and a small sample of recent transactions before linking the rest.
Set a routine
Use Actual’s Bank Sync action or current scheduled behavior and watch freshness.
Account mapping is the irreversible-feeling part
Linking to the wrong local account does not move money, but it creates cleanup work. Match institution, account type, currency and last four digits. Avoid creating a duplicate local account merely because an existing one was entered manually.
Actual documents a maximum of 90 days per SimpleFIN request and notes that provider updates are roughly daily. Older history may need CSV, QIF, OFX or another supported import path. Keep the one-time backfill separate from ongoing SimpleFIN sync and choose a date seam to prevent overlap.
Reconcile the first import
Check three things: the “last balance from bank,” the newest posted transaction and the sign of a credit-card purchase. Do not infer success from the number of imported rows alone. Pending transactions can change, and account balance semantics differ between deposits and liabilities.
First-sync verification
| Stage | What to do | Check |
|---|---|---|
| Connection | BankSync shows active consent or connection | No reauthorisation warning |
| Account mapping | Remote ID maps to intended Actual account | Currency and last four digits match |
| Transactions | Newest posted item appears once | Stable IDs prevent duplicates |
| Balance | Bank balance matches expected semantics | Liability sign is sensible |
| Freshness | Last source and app sync timestamps are recent | No hidden stale state |
| History | Backfill seam is documented | No overlap duplicates |
Verify one account before scaling out.
Resetting and troubleshooting
Actual’s guide provides a Reset SimpleFIN credentials action from the Add Account menu. Use it when replacing the provider connection; generate a new setup token because the old token was single-use. If transactions import but the bank balance is stale, inspect Actual’s connection status and provider freshness separately. Community issues show that balance regressions and stale connections do occur, so keep versions current and report reproducible cases with redacted diagnostics.
For power users, snapshot the Actual database before remapping multiple accounts and never include the access URL in logs or issue reports.