A userscript that automatically syncs balance history, transactions, holdings, and more from Canadian financial institutions to Monarch Money.
Note: This demo shows an earlier version of the script. The current version supports additional institutions and features.
| Institution | Balance History | Transactions | Holdings | Credit Limit | Category Mappings | Multi-Account | Notes |
|---|---|---|---|---|---|---|---|
| Canada Life | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | Group retirement and pension plans |
| MBNA | ✅ | ✅ | ❌ | ✅ | ✅ | ? | Credit cards |
| Questrade | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | Investment accounts (TFSA, RRSP, margin, etc.) |
| Rogers Bank | ✅ | ✅ | ❌ | ✅ | ✅ | ? | Credit cards |
| Wealthsimple | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Investment, Cash, and Credit Card accounts |
Install a userscript manager for your browser. Either option works — pick whichever suits your browser:
⚠️ Violentmonkey is not available on Chrome. It was removed from the Chrome Web Store due to its Manifest V2 architecture, with no Manifest V3 rewrite planned in the foreseeable future. Chrome users should use Tampermonkey (see below), or switch to Brave or Firefox.
⚠️ Chrome users: After installing Tampermonkey, you may need to enable Developer Mode for it to function properly:
- Go to
chrome://extensions- Toggle Developer mode on (top-right corner)
- Restart Chrome if prompted
Click the link below to install the script. Your userscript manager (Violentmonkey or Tampermonkey) will open an installation prompt — click Confirm installation.
The script will auto-update whenever a new version is published.
- Log in to Monarch Money in your browser so the session is active.
- Navigate to any of the supported institution websites (Questrade, Wealthsimple, Canada Life, Rogers Bank, or MBNA).
- The script will inject an Upload to Monarch button into the page.
- Click the button to sync your data. Use the ⚙️ settings gear to configure account mappings, sync preferences, and category mappings.
On the first sync, the script will walk you through a brief setup:
- Monarch authentication — A pop-up will open to retrieve your Monarch session. You may need to log in to Monarch if you don't have an active session.
- Starting date — The script defaults to the account creation date when it can determine it. It is recommended to leave this as is. On subsequent syncs, the script automatically looks back a configurable number of days from your last successful sync (default: 7 days).
- Account mapping — For each institution account, you can choose to: create a new Monarch account (recommended), map to an existing Monarch account, or skip the account sync entirely. This mapping is saved for future syncs.
- Category mapping — For each transaction category, you can map it to a Monarch category as a one-time choice or save it as a reusable rule. Alternatively, you can skip sync-time category mapping entirely and rely on Monarch's built-in categorization rules, which are applied after every sync regardless.
- Pending transactions — The script uploads pending transactions by default and updates them after they settle. To track pending status, the script adds a "Pending" tag and a transaction ID to the Monarch transaction's notes. Please keep these details on pending transactions to allow the script to manage them properly — you can add other details to the notes as desired, and they will be retained when the transaction settles (as long as the settled transaction keeps the same date and merchant). Some institutions report the same transaction as both pending and settled for a short period; the script will do its best to deduplicate these, but if transaction details differ (date, description, etc.), you may temporarily see duplicates in Monarch until the institution stops reporting it as pending. Pending transaction sync can be turned off in settings if desired.
- Node.js (v24+)
- npm
git clone https://github.com/meseer/monarch-uploader.git
cd monarch-uploader
npm install| Command | Description |
|---|---|
npm run build |
Production build |
npm run build:dev |
Development build |
npm run watch |
Watch for changes and rebuild |
npm test |
Run tests |
npm run lint |
Lint code |
npm run lint:fix |
Auto-fix linting issues |
- Build the project:
npm run build - Open Violentmonkey (or Tampermonkey) dashboard in your browser.
- Click the + button and select Install from file (or create a new script and paste the contents).
- Select
dist/monarch-uploader.user.jsfrom the build output.
To report a security vulnerability, please see SECURITY.md. Do not open a public issue for security concerns.
Please read CONTRIBUTING.md for guidelines on submitting pull requests.
This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License — see the LICENSE file for details.
- ✅ Attribution — You must give appropriate credit when using this code
- ✅ NonCommercial — You may not use this code for commercial purposes
- ✅ ShareAlike — If you modify this code, you must distribute your contributions under the same license
- ✅ Free for personal and open-source projects — Perfect for learning, contributing, or building non-commercial tools

