A local-first browser extension that captures transactions from online banking sessions and exports them to CSV or ActualBudget.
Self-host your financial data! Nobody else needs access to your banking information.
🚨 IMPORTANT: The goal is to enable anyone to write their own modules for any bank with basic Javascript and minimal effort.
These are some banks that are officially supported by the maintainers.
- Royal Bank of Canada (RBC): Chequing
- Scotiabank: Chequing, Credit Card
- Wealthsimple: Chequing
- Rogers Bank: Credit Card
- NGPF Bank Simulator: Demo website that works out the box. Navigate to Accounts >> Account Activity first, then click on the OpenBanker extension icon to show the popup.
OpenBanker can export to CSV files. Columns are formatted specifically to be a one-click upload to ActualBudget, no field-mapping required.
This fork of ActualBudget is customized to communicate directly with OpenBanker.
Using this fork, you can import transactions directly into ActualBudget without downloading and uploading CSV files, which is convenient for high-frequency import workflows.
You can check out the deployed version of this fork, running in "Local Browser Mode" here: 🔗 demo.openbanker.org.
If you prefer to self-host the OpenBanker fork of ActualBudget, you can clone the fork and build it just like you would with ActualBudget. Then, follow these special build steps to configure the OpenBanker browser extension to use the URL where your custom ActualBudget fork is running.
While we work on getting OpenBanker published to the Firefox and Chrome Web Store, you must build this project to install it, for now.
Only Chrome (and Chrome-based browsers like Edge, Brave, Opera, Vivaldi) is supported. We are working on a Firefox port.
-
From the root directory, run
bun install(npm iis likely to work too, but is untested). -
Run
npm run buildfrom the root directory. -
Load the generated folder at "packages/chrome/dist" as an unpacked extension, following these instructions.
-
Write your own bank module, rebuild the project, and reload the extension in the browser.
See ROADMAP.md.
[Notes on Vite/Rollup config here]
background.ts contains code for a service worker that runs in the background. If your work does not involve this service worker, you can run the frontend only (with HMR) by launching the Vite dev server using npm run dev.
Some functionality requiring the chrome API that only exists within the context of a Chrome extension environment will not work. chrome.storage is an example of this.
Search for feature guards like getChromeContext() !== 'extension' across the codebase.
- CWZMorro for creating the RBC plugin


