Updates your ProjectionLab account balances with the latest data from Monarch Money.
- This project uses Monarch's private app endpoints. Monarch does not offer an official public API for this workflow, so login support is best effort and may break without warning.
- Login is more reliable when you enable MFA in Monarch and configure this project to use your MFA secret key.
Note
What is the MFA secret key?
When you enable MFA in Monarch (Settings -> Security -> Multi-Factor Authentication), you'll see a "Two-factor text code" — a long string of letters and numbers (30+ characters). This is the secret key you need.
Important
Common mistake: Do not enter the 6-digit code from your authenticator app. That code changes every 30 seconds and will not work. You need the permanent secret key shown during MFA setup.
- Connects to APIs: Scripts communicate with both Monarch Money and ProjectionLab's Plugin API.
- Fetches Monarch Data: Your Monarch Money account balances are downloaded directly to your machine.
- Updates ProjectionLab: The project updates your ProjectionLab account information using the
updateAccount()Plugin API.
There are two ways to set up this project:
- Web UI (recommended) — a guided setup wizard that walks you through configuration and account mapping. If you're unsure which to pick, use this option — you can skip the CLI section entirely.
- CLI — configure everything manually from the terminal
- Node.js installed (no coding experience needed — the Web UI will guide you)
- Your Monarch Money account credentials
- Recommended: enable MFA in Monarch before setup
- Your ProjectionLab Plugin API key
To download the latest version, click the green Code button on the GitHub page and select Download ZIP. Unzip the folder, then open a terminal in that folder and run:
npm install
cp config.example.js config.jsThe web UI is the easiest option and is recommended for most users. It walks you through setup in 3 steps.
npm startOpen http://localhost:3000 in your browser. The wizard will walk you through:
- Enter your ProjectionLab Plugin API key (Settings > Plugins > Plugin API Key); you need to
Enable Pluginsfirst. - Copy the generated browser console snippet.
- Open ProjectionLab in your browser.
- Open the developer console: press F12 (or Cmd+Option+J on Mac / Ctrl+Shift+J on Windows).
- Paste the snippet into the console and press Enter. This is safe — it only reads your account names and IDs.
- Your accounts will be copied to your clipboard.
- Go back to the setup wizard, paste the result into the text area, and click Load Accounts.
- Enter your Monarch Money email and password.
- Recommended: enable MFA in Monarch first.
- In Monarch, go to Settings -> Security -> Multi-Factor Authentication and copy the Two-factor text code (the long secret key, not the 6-digit code).
- Paste that value into the MFA field.
- Device UUID is optional. If left blank, one will be generated automatically. If you have trouble logging in, see How to Find Your Device UUID below.
- Click Fetch Monarch Accounts to verify your credentials and retrieve your accounts.
If login fails without MFA configured, enable MFA in Monarch and try again using the secret key above.
- For each Monarch account, select the corresponding ProjectionLab account from the dropdown (or select "— Skip —" to exclude it).
- Click Save Configuration to write your
config.jsfile.
Once configured, sync your balances anytime.
- Start the web UI if it isn't already running:
npm start - Open http://localhost:3000 — if setup is already complete, it will skip straight to Step 4: Sync Balances.
- Click Sync Now — the app fetches your latest Monarch balances automatically.
- Click Copy to Clipboard.
- Open ProjectionLab, press F12 (or Cmd+Option+J on Mac / Ctrl+Shift+J on Windows), paste, and press Enter.
If you need to change your credentials or account mapping, click Reconfigure Setup at the bottom of Step 4.
npm run get-latestCopy the output, open ProjectionLab's developer console, paste it, and press Enter.
Each time you want to update balances, just repeat either option above.
If you prefer to configure everything manually without the web UI:
Since this will modify ProjectionLab's application data, back up first (Account Settings > Export Data).
- Login to ProjectionLab and go to Account Settings.
- Open Plugins page (Settings > Plugins).
- Enable the switch Enable Plugins.
- Copy the Plugin API Key.
- Copy
config.example.jstoconfig.js(if you haven't already). - Open
config.jsand fill in your Monarch credentials (monarch_email,monarch_password). - Recommended: enable MFA in Monarch before continuing.
- In Monarch, go to Settings -> Security -> Enable MFA and copy the Two-factor text code.
- Set
monarch_mfato that secret key. Do not use the 6-digit code from your authenticator app. - Set
device_uuidif you have one (see How to Find Your Device UUID below). If left blank, one will be generated automatically. - Set
projection_Labs_api_keyto the Plugin API key from step 1.
Open the ProjectionLab developer console and run:
const exportData = await window.projectionlabPluginAPI.exportData({ key: 'YOUR_PL_API_KEY' });
const plAccounts = [...exportData.today.savingsAccounts, ...exportData.today.investmentAccounts,
...exportData.today.assets, ...exportData.today.debts];
plAccounts.forEach(account => console.log(account.id, account.name));npm run getMonarchAccountsAdd entries to the accountMapping array pairing each Monarch account ID with its ProjectionLab account ID:
let accountMapping = [
{
plAccountID: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
monarchAccountID: "123456789012345678",
plDisplayName: "My Account Name"
},
];Follow the steps in Syncing Balances above.
config.jscontains your credentials and is gitignored — it will never be committed.config.example.jsis the committed template with placeholder values.- If you use the web UI, a backup (
config.js.backup) is created before each save.
The Device UUID is optional — if you leave it blank, one will be generated automatically. However, if you have trouble logging in, using Monarch's existing device UUID from your browser may help.
- Log in to Monarch Money.
- Right-click the page and choose Inspect.
- In the developer tools panel, open the Console tab.
- Type
localStorage.getItem('monarchDeviceUUID')and press Enter. - Copy the value that is returned and use it as your
device_uuid.
Notes:
- In some browsers, pasting into the console may be blocked for security reasons. If that happens, type the command manually.
- If no value is returned, you can generate a new UUID in this project's web UI.
- "Please update to the latest version" — This error means Monarch changed their login requirements. Update to the latest version of this project (
git pull && npm install) or download the latest release from GitHub. - Login fails without MFA — Enable MFA in Monarch and configure
monarch_mfausing the Two-factor text code (the long secret key) from Settings -> Security -> Enable MFA. - Wrong MFA value — Do not paste the temporary 6-digit code from your authenticator app. This project needs the permanent secret key (30+ characters shown when you first set up MFA).
- Device UUID issues — If login still fails, try retrieving your device UUID from Monarch (see above) or generating a new one in the web UI.
- Intermittent failures — Because this project relies on an unofficial Monarch integration, authentication can stop working temporarily after Monarch changes their app. Check the issues page for updates.
Contributions are welcome!




