Monarch Money Community
Python library for accessing Monarch Money data.
Installation
From Source Code
Clone this repository from Git
git clone https://github.com/bradleyseanf/monarchmoneycommunity.git
Via pip
pip install monarchmoneycommunity
Import the library as monarchmoney after installation.
This package pins gql to 4.0.
Instantiate & Login
There are two ways to use this library: interactive and non-interactive.
Interactive
If you're using this library in something like iPython or Jupyter, you can run an interactive-login which supports multi-factor authentication:
from monarchmoney import MonarchMoney
mm = MonarchMoney()
await mm.interactive_login()
This will prompt you for the email, password and, if needed, the multi-factor token.
Non-interactive
For a non-interactive session, you'll need to create an instance and login:
from monarchmoney import MonarchMoney
mm = MonarchMoney()
await mm.login(email, password)
This may throw a RequireMFAException. If it does, you'll need to get a multi-factor token and call the following method:
from monarchmoney import MonarchMoney, RequireMFAException
mm = MonarchMoney()
try:
await mm.login(email, password)
except RequireMFAException:
await mm.multi_factor_authenticate(email, password, multi_factor_code)
Alternatively, you can provide the MFA Secret Key. The MFA Secret Key is found when setting up the MFA in Monarch Money by going to Settings -> Security -> Enable MFA -> and copy the Two-factor text code. Then provide it in the login() method:
from monarchmoney import MonarchMoney, RequireMFAException
mm = MonarchMoney()
await mm.login(
email=email,
password=password,
save_session=False,
use_saved_session=False,
mfa_secret_key=mfa_secret_key,
)
Use a Saved Session
You can easily save your session for use later on. While we don't know precisely how long a session lasts, authors of this library have found it can last several months.
from monarchmoney import MonarchMoney, RequireMFAException
mm = MonarchMoney()
mm.interactive_login()
# Save it for later, no more need to login!
mm.save_session()
Once you've logged in, you can simply load the saved session to pick up where you left off.
from monarchmoney import MonarchMoney, RequireMFAException
mm = MonarchMoney()
mm.load_session()
# Then, start accessing data!
await mm.get_accounts()
Accessing Data
As of writing this README, the following methods are supported:
Non-Mutating Methods
| Method | Description |
|---|---|
get_accounts |
gets all the accounts linked to Monarch Money |
get_account_holdings |
gets all of the securities in a brokerage or similar type of account |
get_all_holdings |
gets the securities in every brokerage or similar type of account in one call (no parameters) — example: await mm.get_all_holdings() |
get_account_type_options |
all account types and their subtypes available in Monarch Money |
get_account_history |
gets all daily account history for the specified account |
get_institutions |
gets institutions linked to Monarch Money |
get_budgets |
all the budgets and the corresponding actual amounts |
get_credit_history |
gets credit score snapshots and Spinwheel user details |
get_subscription_details |
gets the Monarch Money account's status (e.g. paid or trial) |
get_recurring_transactions |
gets the future recurring transactions, including merchant and account details |
get_transactions_summary |
gets the transaction summary data from the transactions page |
get_transactions |
gets transaction data, defaults to returning the last 100 transactions; can also be searched by date range |
find_duplicate_transactions |
finds duplicate transaction groups using Plaid-reported fields |
get_transaction_categories |
gets all of the categories configured in the account |
get_transaction_category_groups |
all category groups configured in the account |
get_household_members |
gets household member IDs, names, display names, and roles |
get_transaction_details |
gets detailed transaction data for a single transaction |
get_transaction_splits |
gets transaction splits for a single transaction |
get_transaction_tags |
gets all of the tags configured in the account |
get_transaction_rules |
gets all transaction rules configured in the account, in priority order |
get_cashflow |
gets cashflow data (by category, category group, merchant and a summary) |
get_cashflow_summary |
gets cashflow summary (income, expense, savings, savings rate) |
is_accounts_refresh_complete |
gets the status of a running account refresh |
Mutating Methods
| Method | Description |
|---|---|
delete_transaction_category |
deletes a category for transactions |
delete_transaction_categories |
deletes a list of transaction categories for transactions |
create_transaction_category |
creates a category for transactions |
request_accounts_refresh |
requests a synchronization / refresh of all accounts linked to Monarch Money. This is a non-blocking call. If the user wants to check on the status afterwards, they must call is_accounts_refresh_complete. |
request_accounts_refresh_and_wait |
requests a synchronization / refresh of all accounts linked to Monarch Money. This is a blocking call and will not return until the refresh is complete or no longer running. |
create_transaction |
creates a transaction with the given attributes |
update_transaction |
modifies one or more attributes for an existing transaction |
update_reoccuring |
updates recurring merchant settings (frequency, amount, date, active status) |
delete_transaction |
deletes a given transaction by the provided transaction id |
update_transaction_splits |
modifies how a transaction is split (or not) |
create_transaction_tag |
creates a tag for transactions |
set_transaction_tags |
sets the tags on a transaction |
set_budget_amount |
sets a budget's value to the given amount (date allowed, will only apply to month specified by default). A zero amount value will unset or clear the budget for the given category. |
update_flexible_budget |
updates the Flexible budget bucket amount for a month |
update_flex_rollover_settings |
updates the Flex rollover settings, including the start month and starting balance |
reset_budget |
resets the budget for a month back to its defaults |
create_manual_account |
creates a new manual account |
delete_account |
deletes an account by the provided account id |
update_account |
updates settings and/or balance of the provided account id |
upload_account_balance_history |
uploads account history csv file for a given account |
upload_attachment |
uploads a binary file for a given transaction by the provided transaction id |
upload_receipt_to_inbox(file_content, filename) |
uploads a receipt image to the Monarch general receipt inbox (not attached to a specific transaction), triggering Monarch's AI to auto-categorize and match it |
Typed Client
If you want typed account, budget, subscription, and holdings models, import the typed client:
from typedmonarchmoney import TypedMonarchMoney
mm = TypedMonarchMoney()
accounts = await mm.get_accounts()
The typed client provides MonarchAccount, MonarchBudget, MonarchBudgetMonth, MonarchSubscription, MonarchCashflowSummary, and MonarchHoldings models.
Contributing
Any and all contributions - code, documentation, feature requests, feedback - are welcome!
If you plan to submit up a pull request, you can expect a timely review. There aren't any strict requirements around the environment you'll need.
Opening a pull request
This library requires a pre-push check requiring that you log into your Monarch account and test all NON-MUTATING methods return valid JSON data including those of new types. If any fail, the push fails.
# One-time setup
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
make install-hooks
# Automatically runs run_tests.py before pushing
git push
FAQ
How do I use this API if I login to Monarch via Google?
If you currently use Google or 'Continue with Google' to access your Monarch account, you'll need to set a password to leverage this API. You can set a password on your Monarch account by going to your security settings.
Don't forget to use a password unique to your Monarch account and to enable multi-factor authentication!
Projects Using This Library
Open a PR adjusting the README if you would like to be added to this list
Disclaimer: These projects are neither affiliated nor endorsed by Monarch Money.
- mmoney-cli - Access your MonarchMoney data via CLI
- monarchmoney-typed - MonarchMoney Home Assistant Integration
- monarch-mcp-server - Model Context Protocol (MCP) server for integrating with Monarch Money.
Metadata
Release files for monarchmoneycommunity 1.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| monarchmoneycommunity-1.6.0.tar.gz | 49.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| monarchmoneycommunity-1.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 82.6 kB
Release files / monarchmoneycommunity-1.6.0.tar.gz
| Download URL | monarchmoneycommunity-1.6.0.tar.gz |
|---|---|
| Size | 49.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86cf0abcda704b3182f8c0d1265897d92d3712da624e05a2eb5ff8b0ba1dac16
|
|
BLAKE2b-256 checksum How to use checksums |
0838405cf4ec61093a682dca9c36014e09d6c4c5a968ee045c3e59a192e5c58c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency logRelease files / monarchmoneycommunity-1.6.0-py3-none-any.whl
| Download URL | monarchmoneycommunity-1.6.0-py3-none-any.whl |
|---|---|
| Size | 33.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
30348847a72378453a65dad0e504a77defec99812832d7bd4f693363915c29b3
|
|
BLAKE2b-256 checksum How to use checksums |
05319e76872f77e082c910558348e6d73c986f8734f23b383c53cb0f5418eac2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency log