Unofficial Python client for Monarch Money. It provides a practical, user-workflow-oriented API for accounts, transactions, receipts, budgets, goals, recurring activity, reports, cashflow, investments, categories, merchants, tags, and household settings.
The public API is intentionally not a one-to-one mirror of every Monarch backend operation. It uses network traffic and webapp behavior to understand what the backend can do, then exposes Python functions around the tasks a caller is likely trying to accomplish.
It is not affiliated with Monarch Money.
The API is built by product area, not by backend endpoint:
- Functions live in
src/monarch_api/functions/. - Structured return types live in
src/monarch_api/types/. - Public exports are available from
monarch_api.
Each group owns a clear workflow. Transactions own transaction edits and attachments. Receipts own scanned receipts. Goals own goal records and goal events. Budget owns monthly budget rows and rollover settings. Neighboring groups reference shared concepts by id rather than duplicating behavior.
Some Monarch features are intentionally omitted for now:
- Rules and automation setup.
- Risky bulk/destructive workflows without a clear day-to-day need.
- Provider-specific account connection flows.
- Invitation, subscription, advisor, security, and other account-admin edges.
- Raw recon artifacts and captured network traffic.
This project targets Python 3.11+.
From a local checkout:
python -m venv .venv
source .venv/bin/activate
pip install -e .From GitHub:
pip install "git+https://github.com/erikrubstein/monarch-api2.git"Create and save an authenticated session:
from monarch_api import create_session
session = create_session(
"you@example.com",
"your-password",
session_path="session.json",
)If MFA is required:
from monarch_api import create_session
session = create_session(
"you@example.com",
"your-password",
mfa_code="123456",
session_path="session.json",
)Load an existing session and call the API:
from monarch_api import load_session, list_accounts, list_transactions
session = load_session("session.json")
accounts = list_accounts(session)
transactions = list_transactions(session, limit=25)Example receipt upload:
from pathlib import Path
from monarch_api import load_session, upload_receipt, get_receipt
session = load_session("session.json")
receipt = upload_receipt(session, Path.home() / "Downloads" / "receipt.png")
# Monarch scans receipts asynchronously. The first result may be in_progress.
parsed = get_receipt(session, receipt.id)All authenticated functions take session as their first argument.
create_sessionsave_sessionload_session
list_accountsget_accountget_net_worth_performanceget_net_worth_breakdownget_historical_balancesget_account_historycreate_manual_accountupdate_accountdelete_account
list_transactionsget_transactioncreate_transactionupdate_transactiondelete_transactionget_transaction_splitsupdate_transaction_splitsunsplit_transactionlist_transaction_attachmentsget_transaction_attachmentupload_transaction_attachmentdownload_transaction_attachmentdelete_transaction_attachment
list_receiptsget_receiptupload_receiptdelete_receiptmatch_receiptunmatch_receiptupdate_receiptget_receipt_settingsupdate_receipt_settings
get_cashflow_summaryget_cashflow_trendsget_cashflow_breakdown
get_report_datalist_saved_reportsget_saved_reportcreate_saved_reportupdate_saved_reportdelete_saved_report
get_budgetlist_budget_monthsget_budget_settingsget_budget_categoryget_flex_rollover_settingsset_budget_amountset_budget_group_amountset_flex_budget_amountset_budget_category_variabilityset_budget_group_variabilityset_budget_category_rolloverset_budget_group_rolloverset_flex_rollover_settingsreset_budget_rollovercreate_budgetreset_budgetclear_budget
list_recurring_streamsget_recurring_streamlist_recurring_occurrencesget_recurring_summarycreate_recurring_streamupdate_recurring_streamremove_recurring_stream
list_goalsget_goalcreate_goalupdate_goaldelete_goalarchive_goalrestore_goalupdate_goal_prioritieslink_goal_account_balanceunlink_goal_accountlist_goal_eventscontribute_to_goalwithdraw_from_goalupdate_goal_eventdelete_goal_eventget_goal_budget_amountsset_goal_budget_amount
list_investment_accountsget_portfoliolist_holdingsget_holdingsearch_securitiesget_securityget_holding_performancecreate_manual_holdingupdate_manual_holdingdelete_manual_holding
list_categorieslist_category_groupsget_category_catalogget_categoryget_category_groupcreate_categoryupdate_categoryremove_categoryreactivate_categoryreorder_categorycreate_category_groupupdate_category_groupdelete_category_groupreorder_category_group
list_merchantsget_merchantupdate_merchantdelete_merchant
list_tagsget_tagcreate_tagupdate_tagdelete_tagreorder_tag
get_householdlist_household_membersget_household_memberget_current_userupdate_current_userget_household_preferencesupdate_household_preferences
This is an unofficial client for private backend APIs. Monarch may change operation names, fields, authentication behavior, or validation rules without notice.