Monarch Money
integrationPersonal finance tools powered by Monarch Money
Connects to your Monarch Money account for spending analysis, net worth tracking, budget monitoring, and transaction management.
Source: Monarch Money
Peers (4)
Bills
Never miss a due date or an unwanted renewal
House Manager
Home maintenance, upkeep, and fix-it know-how in one place
Online Orders
Track orders, shipments, and return windows
Wealth Desk
Your household's personal finance brain
Skills (1)
Review
Surface and walk the user through unreviewed transactions, applying recategorizations / merges / splits per their direction. Load when the user asks to review, reconcile, or go through unreviewed transactions.
Tools (20)
Get account balances
Fetch all financial accounts on the user's Monarch (active AND closed/inactive โ Monarch keeps closed accounts visible for history). Each row includes balance, type, institution, includeInNetWorth, and the inactive-state flags: `closed` (deactivated in Monarch), `sync_disabled` (manually paused), `hidden` (user-hidden from UI), `disconnected` (credential lost with the data provider โ needs reconnection), and `is_manual` (user-tracked, no auto-sync). When the user asks 'how many closed/inactive accounts', count by `closed` or `disconnected` โ do NOT infer from $0 balance, that's noisy.
Get net worth snapshot
Fetch net worth snapshots over time. Returns aggregate totals (assets, liabilities, net worth) at periodic intervals. Use this to track net worth trends.
Get recent transactions
Fetch transactions filtered by date range, category, search text, review status, or limit. Returns date, merchant, amount, category, account, and needs_review for each transaction. For category-level spending questions, call list_categories first to get the real category IDs, then pass them as category_ids here (include all child categories of a group โ e.g. for 'driving' pass every category in the 'Auto & Transport' group). Sum the amounts in the response to answer 'how much did I spend on X' questions. Date window: pass `start_date` and `end_date` (YYYY-MM-DD) for an arbitrary period โ use this for questions like 'last February' (start_date=2025-02-01, end_date=2025-02-28), 'in 2024', or 'last year' (start_date=today minus 365 days). If both are omitted, falls back to the trailing `days` window (default 30). When computing averages over long periods (e.g. average monthly groceries over a year), set `limit` high enough to cover all matching rows โ the default 50 will silently truncate. Set needs_review=true to fetch only transactions awaiting review (the reconcile workflow); when filtering by review status, widen the window if you expect more results than limit.
Get spending summary
Fetch a spending summary for a date window: overall income/expense totals plus expense and income breakdowns by category, by category group, and the top merchants by spend. This is THE tool for 'expenses by category' / 'where did my money go' questions over any period โ it aggregates server-side, so it works for windows far too large to sum from raw transactions. Date window: pass `start_date` and `end_date` (YYYY-MM-DD) for an arbitrary period (e.g. 'last 6 months' = today minus 182 days to today), or rely on the trailing `days` window (default 30). Amounts keep Monarch's sign convention: expenses are negative. Merchant rows are trimmed to `top_merchants` (default 15) biggest spenders; `merchant_count` reports how many there were in total. For transaction-level detail inside one category, follow up with list_categories + get_recent_transactions.
Get cashflow report
Fetch cashflow summary โ income vs expenses over a date range. Returns totals for income, expenses, and savings rate. Date window: pass `start_date` and `end_date` (YYYY-MM-DD) for an arbitrary period, or rely on the trailing `days` window (default 30). For a per-category breakdown of the same window, use get_spending_summary instead.
List categories
List the user's transaction categories and category groups โ the real taxonomy names used by their Monarch account. Always call this before answering category-level spending questions so you use the user's actual category names instead of guessing from merchant strings. Works even when the user has no budget set up.
Get budget status
Fetch current budget status โ planned vs actual spending by category. Shows which budgets are on track, over, or under.
Get recurring transactions
Fetch recurring transactions โ subscriptions, bills, and regular charges. Use this to find recurring expenses, subscription costs, and upcoming bills.
Get investment holdings
Fetch investment holdings for a specific account. Returns securities positions with name, ticker, quantity, value, and cost basis.
Get account history
Fetch historical balance data for a specific account. Use this to see balance trends over time for a single account. Returns a daily balance series bounded to a date window: pass `start_date`/`end_date` (YYYY-MM-DD) for an explicit period, or rely on the trailing `days` window (default 365, which covers 1-month / 3-month / 6-month / 1-year growth questions). Long windows are downsampled to at most `limit` evenly-spaced rows (the first and last are always kept exact), so a growth calc has clean endpoints without the full multi-year daily dump.
Refresh accounts
Kick off a sync with the user's bank(s) for one or more accounts. Returns IMMEDIATELY (does not wait for the refresh to complete) so the chat doesn't hang for minutes. Use the optional `filter` to scope the refresh โ it matches case-insensitively against account name, type, subtype, and institution, so the user's phrasing works directly: 'td accounts' matches all TD-institution accounts, 'chequing' matches checking accounts, 'visa' matches visa-subtype accounts, 'wealthsimple cash' matches by name. Omit `filter` to refresh every connected account. Tell the user the refresh is running and offer to call check_refresh_status in a minute or two; do not poll yourself.
Check refresh status
Check whether previously-kicked-off account refreshes have completed. Same `filter` semantics as refresh_accounts (matches name/type/subtype/institution). Returns per-account in-progress booleans โ useful when one bank is slow and others are already done. Omit filter to check all accounts.
Split transaction
Split a single Monarch transaction into multiple child transactions, each with its own merchant, amount, and category. Replaces any existing splits on the parent transaction. The sum of split amounts must equal the parent transaction's amount (use signed amounts โ negative for expenses). Pass an empty splits list to remove all splits and restore the parent. Get transaction_id from get_recent_transactions and category_id values from list_categories.
Update transaction
Update fields on a single Monarch transaction โ category, merchant name, amount, date, notes, hide-from-reports, or needs-review. Only the fields you pass are changed; omit anything you want to leave alone. Get transaction_id from get_recent_transactions and category_id from list_categories. Pass an empty string to clear notes.
Update account balance
Set the current balance on a **manual** Monarch account (e.g. car values, real estate, cash, or any other user-tracked asset/liability that isn't auto-synced from a bank). Use this when the user asks to update / adjust / correct / sync a manual account balance. Get account_id from get_account_balances โ the same call also surfaces an `is_manual` flag, which must be true for this tool to succeed. Synced accounts (bank-linked via Plaid/MX) cannot have their balance edited; for those, use refresh_accounts to pull fresh data from the institution. The new `balance` is the absolute current value (not a delta); for liabilities, pass a positive number representing the amount owed (Monarch's display convention). Returns the previous balance, the new balance, and the account name so you can echo the change back to the user.
Resolve category
Find the most likely Monarch category for a free-text query, ranked by how the user actually categorizes similar transactions. Always call this before update_transaction or split_transaction so you write back the user's preferred category, not a guess. The popularity prior is built from the last 6 months of *reviewed* transactions on the *same account*, with the *same sign* as the target, excluding structural categories (transfers, paychecks, etc). History from the target's own merchant counts 10x more than other merchants. Returns up to 3 candidates with id, name, group, match quality (exact/word/substring), and the merchant + global usage counts that informed the ranking. Decision rule: if rank 1 is `exact` OR its score is at least 3x rank 2, write it. Otherwise show the top candidates and ask the user which they meant.
Resolve merchant
Find the most likely canonical merchant name for a free-text query, ranked by how often the user has used each variant. Useful when renaming a messy bank string ('STARBUCKS #1234 SEATTLE WA') to the user's clean canonical ('Starbucks'). Pulls candidates from the last 6 months of reviewed transactions on the same account, same sign as the target, excluding structural categories. Returns up to 3 candidates with: canonical name, total uses, last-seen date, the category most often paired (top_category), how dominant that category is (top_category_uses, top_category_confidence as a 0-1 ratio), and a coarse confidence label (high/medium/low) for the top_category suggestion. Decision rule for renames: if rank 1 is `exact` OR has at least 3x the usage of rank 2, use it. Decision rule for AUTO-applying top_category during review: only when confidence is `high`. For `medium`, propose and confirm. For `low`, leave the existing category unless the user said otherwise.
List tags
Fetch all transaction tags configured on the user's Monarch account. Returns id, name, and color for each. Tags are distinct from categories: a transaction has exactly one category but any number of tags. Call this when the user asks to tag/label/mark a transaction and you need to know what tag names exist, or when add_transaction_tag reports an ambiguous or missing tag.
Add transaction tag
Add a tag to a single Monarch transaction by name. Resolves the name case-insensitively with plural-stripping (so 'reimburse' matches 'Reimbursement'). Preserves existing tags on the transaction. Tags are distinct from categories โ use this when the user says 'tag', 'label', or 'mark', not when they say 'categorize'. If the tag name doesn't exist or matches more than one tag, returns an error with the candidates so you can ask the user; do not silently substitute a category change. Tags must already exist on the account; this tool does not create new tags.
Remove transaction tag
Remove a tag from a single Monarch transaction by name. Same name matching as add_transaction_tag. Other tags on the transaction are preserved. Returns status='not_present' if the tag wasn't on the transaction, or status='ambiguous'/'no_match' with candidates if the name is unclear.
Chat with Monarch Money
Open chat