Skip to main content

Monarch Money Community logo

Maintenance Issues Pull Requests Contributors

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.

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)

Source distribution for monarchmoneycommunity 1.6.0
File Size Uploaded
monarchmoneycommunity-1.6.0.tar.gz 49.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for monarchmoneycommunity 1.6.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.6.0 This release

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page