Finance
Overview
Your personal finance advisor, with your full ledger at hand. Log expenses by voice, photo, or chat and let Ledgy categorize them. Set budgets per category or period and stay on track with proactive checks. Plan recurring income and expenses, and track your spending across any timeframe. Ask "am I overspending on dining this month?" or "how much can I afford to save in Q3?" and get advice grounded in your real data — not generic tips. 30+ tools covering accounts, transactions, budgets, categories, and receipts. Personally owned. Shareable when you want.
Tools
Record one or more account-rebalance entries in bulk (up to 1000). Each entry is a TransactionSyncDto with type=Adjustment (3) and a SIGNED amount (positive or negative). The only place a transaction may carry a negative amount. category_id and to_account_id must be null. Excluded from income/expense aggregates by default.
adjust_account_balance
ChatGPTRecord one or more account-rebalance entries in bulk (up to 1000). Each entry is a TransactionSyncDto with type=Adjustment (3) and a SIGNED amount (positive or negative). The only place a transaction may carry a negative amount. category_id and to_account_id must be null. Excluded from income/expense aggregates by default.
aggregate_transactions
ChatGPTGroup + sum transactions over a period with FX normalization. By default Transfer (type=2) and Adjustment (type=3) are excluded so income/expense numbers match the mobile UI. Set include_transfers / include_adjustments to true to include them, or set filter.type=[…] for explicit type filtering.
aggregate_transactions
ChatGPTGroup + sum transactions over a period with FX normalization. By default Transfer (type=2) and Adjustment (type=3) are excluded so income/expense numbers match the mobile UI. Set include_transfers / include_adjustments to true to include them, or set filter.type=[…] for explicit type filtering.
convert_currency
ChatGPTConvert an amount between two ISO-4217 currencies using the latest FX rates. For bulk conversion across many transactions, prefer the 'currency' parameter on aggregate_transactions.
convert_currency
ChatGPTConvert an amount between two ISO-4217 currencies using the latest FX rates. For bulk conversion across many transactions, prefer the 'currency' parameter on aggregate_transactions.
delete_accounts
ChatGPTSoft-delete accounts in bulk (up to 1000). The sync layer cascades to dependent member rows automatically.
delete_accounts
ChatGPTSoft-delete accounts in bulk (up to 1000). The sync layer cascades to dependent member rows automatically.
delete_budgets
ChatGPTSoft-delete budgets in bulk (up to 1000).
delete_budgets
ChatGPTSoft-delete budgets in bulk (up to 1000).
delete_categories
ChatGPTSoft-delete custom categories in bulk (up to 1000). Existing transactions referencing the category are unaffected (the reference becomes orphaned and falls back to 'uncategorized' on the client).
delete_categories
ChatGPTSoft-delete custom categories in bulk (up to 1000). Existing transactions referencing the category are unaffected (the reference becomes orphaned and falls back to 'uncategorized' on the client).
delete_category_groups
ChatGPTSoft-delete category groups in bulk (up to 1000). Categories within the group remain (their CategoryGroupId becomes orphaned).
delete_category_groups
ChatGPTSoft-delete category groups in bulk (up to 1000). Categories within the group remain (their CategoryGroupId becomes orphaned).
delete_groups
ChatGPTSoft-delete groups in bulk (up to 1000). The sync layer cascades to dependent group-member and group-transaction rows.
delete_groups
ChatGPTSoft-delete groups in bulk (up to 1000). The sync layer cascades to dependent group-member and group-transaction rows.
delete_recurring_transactions
ChatGPTSoft-delete recurring transactions in bulk (up to 1000). Already-generated transaction instances are unaffected.
delete_recurring_transactions
ChatGPTSoft-delete recurring transactions in bulk (up to 1000). Already-generated transaction instances are unaffected.
delete_tags
ChatGPTSoft-delete tags in bulk (up to 1000). Tag links on existing transactions are preserved as-is — only the tag definition is tombstoned.
delete_tags
ChatGPTSoft-delete tags in bulk (up to 1000). Tag links on existing transactions are preserved as-is — only the tag definition is tombstoned.
delete_transactions
ChatGPTSoft-delete transactions in bulk (up to 1000). Works for any transaction type (expense, income, transfer, adjustment).
delete_transactions
ChatGPTSoft-delete transactions in bulk (up to 1000). Works for any transaction type (expense, income, transfer, adjustment).
download_receipt
ChatGPTReturns a short-lived signed URL (60 min) to download the receipt attached to a transaction. The URL points directly at Google Cloud Storage — fetch via plain HTTPS GET. Returns null if the transaction has no receipt or the file metadata is missing.
download_receipt
ChatGPTReturns a short-lived signed URL (60 min) to download the receipt attached to a transaction. The URL points directly at Google Cloud Storage — fetch via plain HTTPS GET. Returns null if the transaction has no receipt or the file metadata is missing.
get_account_balance
ChatGPTReturns the live computed balance for one or more accounts using the same formula as the mobile UI: initial_balance + income - expense - transfers_out + transfers_in + adjustments. Each account's balance is in its own currency; pass
currency to also get a converted figure per account. Pass account_ids to filter, or omit to receive every account. Set include_unassigned to surface income/expense transactions that have no account assigned (rendered as a synthetic 'Unassigned' bucket).get_account_balance
ChatGPTReturns the live computed balance for one or more accounts using the same formula as the mobile UI: initial_balance + income - expense - transfers_out + transfers_in + adjustments. Each account's balance is in its own currency; pass
currency to also get a converted figure per account. Pass account_ids to filter, or omit to receive every account. Set include_unassigned to surface income/expense transactions that have no account assigned (rendered as a synthetic 'Unassigned' bucket).get_transaction
ChatGPTReturns a single transaction by sync_id with full details.
get_transaction
ChatGPTReturns a single transaction by sync_id with full details.
get_transactions
ChatGPTList transactions with rich filters (date range, type, accounts, categories, group_ids, amount range). Returns a page sorted by date desc; pass the
cursor from a previous response to fetch the next page. Combining a date range with an amount range is rejected (400) — use aggregate_transactions for that intent. Filtering by group_ids resolves through the user-group-transactions junction (an M2M link, since Transaction has no direct groupId field) and uses in-memory pagination.get_transactions
ChatGPTList transactions with rich filters (date range, type, accounts, categories, group_ids, amount range). Returns a page sorted by date desc; pass the
cursor from a previous response to fetch the next page. Combining a date range with an amount range is rejected (400) — use aggregate_transactions for that intent. Filtering by group_ids resolves through the user-group-transactions junction (an M2M link, since Transaction has no direct groupId field) and uses in-memory pagination.get_user_profile
ChatGPTReturns the user's profile settings: primary currency, week-start day, app language, date format, decimal places, and timezone offset.
get_user_profile
ChatGPTReturns the user's profile settings: primary currency, week-start day, app language, date format, decimal places, and timezone offset.
list_accounts
ChatGPTReturns the user's accounts (personal + shared) paginated. Personal accounts paginated server-side; shared accounts (where you're a non-owner member) paginated independently via shared_cursor. SharedItems and PersonalItems each carry their own NextCursor / HasMore — page each axis independently.
list_accounts
ChatGPTReturns the user's accounts (personal + shared) paginated. Personal accounts paginated server-side; shared accounts (where you're a non-owner member) paginated independently via shared_cursor. SharedItems and PersonalItems each carry their own NextCursor / HasMore — page each axis independently.
list_budgets
ChatGPTReturns the user's configured budgets paginated. Ordered by createdAt ASC + syncId tiebreaker (Name is optional and can't be used as a stable cursor field).
list_budgets
ChatGPTReturns the user's configured budgets paginated. Ordered by createdAt ASC + syncId tiebreaker (Name is optional and can't be used as a stable cursor field).
list_categories
ChatGPTReturns the user's categories paginated. Custom categories are paginated server-side (custom_cursor); custom category groups are paginated independently (groups_cursor). Well-known categories are returned only on the first response (when custom_cursor is null) — they're a static set, not paginated.
list_categories
ChatGPTReturns the user's categories paginated. Custom categories are paginated server-side (custom_cursor); custom category groups are paginated independently (groups_cursor). Well-known categories are returned only on the first response (when custom_cursor is null) — they're a static set, not paginated.
list_groups
ChatGPTReturns the user's groups paginated. Personal groups paginated server-side (cursor); shared groups paginated independently (shared_cursor). Members are joined per-page via a chunked WhereIn query — never a full-collection scan.
list_groups
ChatGPTReturns the user's groups paginated. Personal groups paginated server-side (cursor); shared groups paginated independently (shared_cursor). Members are joined per-page via a chunked WhereIn query — never a full-collection scan.
list_recurring_transactions
ChatGPTReturns the user's configured recurring transactions paginated. Ordered by nextOccurrence ASC + syncId tiebreaker (so upcoming items appear first). Type is 'income' | 'expense' | 'transfer'.
list_recurring_transactions
ChatGPTReturns the user's configured recurring transactions paginated. Ordered by nextOccurrence ASC + syncId tiebreaker (so upcoming items appear first). Type is 'income' | 'expense' | 'transfer'.
list_supported_icons
ChatGPTReturns the FontAwesome icon catalog and the brand color palette accepted by Icon/Color fields on accounts, categories, category groups, and groups. Validate icon/color values BEFORE setting them on entities.
list_supported_icons
ChatGPTReturns the FontAwesome icon catalog and the brand color palette accepted by Icon/Color fields on accounts, categories, category groups, and groups. Validate icon/color values BEFORE setting them on entities.
list_tags
ChatGPTReturns the user's tags paginated. Set include_usage=true to also compute the usage count per tag for the current page (one Firestore aggregation query per tag in the page; off by default to keep the common path fast).
list_tags
ChatGPTReturns the user's tags paginated. Set include_usage=true to also compute the usage count per tag for the current page (one Firestore aggregation query per tag in the page; off by default to keep the common path fast).
reconcile_account
ChatGPTBring an account's computed balance in line with an external figure (e.g. the bank app's screen) by creating a single signed adjustment entry. Computes delta = expected_balance - current_balance and posts it as a type=Adjustment transaction. Returns the previous and new balance plus the adjustment sync_id. NOT idempotent — calling twice creates two adjustments.
reconcile_account
ChatGPTBring an account's computed balance in line with an external figure (e.g. the bank app's screen) by creating a single signed adjustment entry. Computes delta = expected_balance - current_balance and posts it as a type=Adjustment transaction. Returns the previous and new balance plus the adjustment sync_id. NOT idempotent — calling twice creates two adjustments.
transfer_between_accounts
ChatGPTRecord one or more account-to-account transfers in bulk (up to 1000). Each transfer is ONE transaction with type=Transfer, AccountId=source, ToAccountId=destination, CategoryId=null. Cross-currency transfers MUST set both exchange_rate and converted_amount (positive, in destination currency); same-currency transfers MUST leave both null.
transfer_between_accounts
ChatGPTRecord one or more account-to-account transfers in bulk (up to 1000). Each transfer is ONE transaction with type=Transfer, AccountId=source, ToAccountId=destination, CategoryId=null. Cross-currency transfers MUST set both exchange_rate and converted_amount (positive, in destination currency); same-currency transfers MUST leave both null.
update_user_settings
ChatGPTUpdate one or more fields of the user's profile settings (primary currency, week-start day, language, etc.). Pass only the fields you want to change; nulls preserve current values. Settings are a per-user singleton — there is exactly one row.
update_user_settings
ChatGPTUpdate one or more fields of the user's profile settings (primary currency, week-start day, language, etc.). Pass only the fields you want to change; nulls preserve current values. Settings are a per-user singleton — there is exactly one row.
upload_receipt
ChatGPTAttach a receipt (JPEG/PNG/HEIC/WebP image or PDF) to an existing transaction. Server fetches the file from the provided HTTPS URL. Max 10MB; identical files (SHA-256) are deduplicated against the user's existing files; replaces any prior receipt on the same transaction. If the file is not yet at a public URL (e.g. it's a chat-attached photo), upload it first to a public host (Dropbox, Imgur, signed cloud-storage URL, etc.) and pass that URL.
upload_receipt
ChatGPTAttach a receipt (JPEG/PNG/HEIC/WebP image or PDF) to an existing transaction. Server fetches the file from the provided HTTPS URL. Max 10MB; identical files (SHA-256) are deduplicated against the user's existing files; replaces any prior receipt on the same transaction. If the file is not yet at a public URL (e.g. it's a chat-attached photo), upload it first to a public host (Dropbox, Imgur, signed cloud-storage URL, etc.) and pass that URL.
upsert_accounts
ChatGPTCreate or update accounts in bulk (up to 1000). Items without sync_id create new accounts; items with sync_id update existing ones. Live balance is derived from transactions; only InitialBalance is editable here.
upsert_accounts
ChatGPTCreate or update accounts in bulk (up to 1000). Items without sync_id create new accounts; items with sync_id update existing ones. Live balance is derived from transactions; only InitialBalance is editable here.
upsert_budgets
ChatGPTCreate or update budgets in bulk (up to 1000). Period is an integer enum: 0=Weekly, 1=Monthly, 2=Quarterly, 3=Yearly.
upsert_budgets
ChatGPTCreate or update budgets in bulk (up to 1000). Period is an integer enum: 0=Weekly, 1=Monthly, 2=Quarterly, 3=Yearly.
upsert_categories
ChatGPTCreate or update custom categories in bulk (up to 1000). Type is 'income' or 'expense'. Well-known categories are read-only — use upsert_categories only for user-custom categories.
upsert_categories
ChatGPTCreate or update custom categories in bulk (up to 1000). Type is 'income' or 'expense'. Well-known categories are read-only — use upsert_categories only for user-custom categories.
upsert_category_groups
ChatGPTCreate or update category groups in bulk (up to 1000).
upsert_category_groups
ChatGPTCreate or update category groups in bulk (up to 1000).
upsert_groups
ChatGPTCreate or update groups in bulk (up to 1000). Plain group CRUD only — sharing-token generation and member invites stay excluded from MCP.
upsert_groups
ChatGPTCreate or update groups in bulk (up to 1000). Plain group CRUD only — sharing-token generation and member invites stay excluded from MCP.
upsert_recurring_transactions
ChatGPTCreate or update recurring transactions in bulk (up to 1000). Type is 'income' | 'expense' | 'transfer'. Frequency enum: 0=Daily, 1=Weekly, 2=BiWeekly, 3=Monthly, 4=Quarterly, 5=Yearly, 6=Custom.
upsert_recurring_transactions
ChatGPTCreate or update recurring transactions in bulk (up to 1000). Type is 'income' | 'expense' | 'transfer'. Frequency enum: 0=Daily, 1=Weekly, 2=BiWeekly, 3=Monthly, 4=Quarterly, 5=Yearly, 6=Custom.
upsert_tags
ChatGPTCreate or update tags in bulk (up to 1000). Each item without a sync_id creates a new tag; with a sync_id it updates. Use list_tags to discover existing sync_ids.
upsert_tags
ChatGPTCreate or update tags in bulk (up to 1000). Each item without a sync_id creates a new tag; with a sync_id it updates. Use list_tags to discover existing sync_ids.
upsert_transactions
ChatGPTCreate or update income/expense transactions in bulk (up to 1000). For transfers use transfer_between_accounts; for account rebalance use adjust_account_balance. Items without sync_id create; items with sync_id update. account_id is optional — null means 'unassigned' (no specific account).
upsert_transactions
ChatGPTCreate or update income/expense transactions in bulk (up to 1000). For transfers use transfer_between_accounts; for account rebalance use adjust_account_balance. Items without sync_id create; items with sync_id update. account_id is optional — null means 'unassigned' (no specific account).
Capabilities
Writes
Links
App Stats
70
Tools
ChatGPT
Platforms
Category
Money ManagementWorks with
ChatGPT
Similar Apps
Data refreshed daily





