[Feature] Add Ability to Define Custom Attributes for Categories & Accounts #2538

Closed
opened 2026-02-28 20:17:35 -06:00 by GiteaMirror · 1 comment
Owner

Originally created by @manaf-aboalrous on GitHub (Oct 13, 2025).

Verified feature request does not already exist?

  • I have searched and found no existing issue

💻

  • Would you like to implement this feature?

Pitch: what problem are you trying to solve?

Currently, Accounts and Budgets in Actual cannot hold custom attributes or metadata. This limits flexibility when analyzing spending patterns, grouping accounts, or producing richer reports.

For example:

  • I can’t tag accounts by type (e.g., “Credit Card”, “Checking”, “Investment”).
  • I can’t tag budgets by priority classification (e.g., “Essential”, “Lifestyle”, "Splurge", “Annual Commitment”).
  • I often need to filter, summarize, or report across these logical groupings — something that becomes tedious without attributes.

Having attributes at both account and budget levels would make it easier to build rich and meaningful reports and dashboards.

Describe your ideal solution to this problem

Allow custom key–value attributes to be defined and stored on both Accounts and Budgets.

Currently, I'm doing the below, I define json attributes in the account / budget notes.

Image Image

I use the below SQL View to generate the attributes key value pair per account.

CREATE VIEW z_accounts_attributes AS SELECT a.id AS account_id, kv.key AS attribute, kv.value AS value FROM accounts a JOIN notes n ON substr(n.id, 9) = a.id-- remove 'account-' prefix CROSS JOIN json_each(trim(substr(n.note, instr(n.note, '{')/* start at first { */ ) ) ) AS kv WHERE n.note IS NOT NULL AND n.note != '' AND n.note LIKE '%```json%' AND a.tombstone = 0;

And the result is

Image

The same goes for Categories (works well with templates with no interference!)

Image

CREATE VIEW z_categories_attributes AS SELECT c.id AS category_id, kv.key AS attribute, kv.value AS value FROM categories c JOIN notes n ON n.id = c.id-- remove 'category-' prefix CROSS JOIN json_each(trim(substr(n.note, instr(n.note, '{')/* start at first { */ ) ) ) AS kv WHERE n.note IS NOT NULL AND n.note != '' AND n.note LIKE '%```json%' ORDER BY kv.key;

Image

This is a poor-guy implementation, but the potential is huge when it comes to reporting.
You could add a separate page to define Attributes for Accounts and Budgets, and then use them in reporting.

  • User-defined fields (e.g., text or dropdowns).
  • Editable within account and budget settings.
  • Accessible via reports, rules, and exports (YAML/CSV/JSON).

This would dramatically enhance reporting, categorization, and automation, without affecting existing workflows.

Teaching and learning

This feature could be easily adopted by anyone interested in advanced reporting, multi-account setups, or budget analytics.

Originally created by @manaf-aboalrous on GitHub (Oct 13, 2025). ### Verified feature request does not already exist? - [x] I have searched and found no existing issue ### 💻 - [ ] Would you like to implement this feature? ### Pitch: what problem are you trying to solve? Currently, Accounts and Budgets in Actual cannot hold custom attributes or metadata. This limits flexibility when analyzing spending patterns, grouping accounts, or producing richer reports. For example: - I can’t tag accounts by type (e.g., “Credit Card”, “Checking”, “Investment”). - I can’t tag budgets by priority classification (e.g., “Essential”, “Lifestyle”, "Splurge", “Annual Commitment”). - I often need to filter, summarize, or report across these logical groupings — something that becomes tedious without attributes. Having attributes at both account and budget levels would make it easier to build rich and meaningful reports and dashboards. ### Describe your ideal solution to this problem Allow custom key–value attributes to be defined and stored on both Accounts and Budgets. Currently, I'm doing the below, I define json attributes in the account / budget notes. <img width="288" height="302" alt="Image" src="https://github.com/user-attachments/assets/7d859e70-ddc0-437e-8ea7-6bd6d8d9196f" /> <img width="385" height="292" alt="Image" src="https://github.com/user-attachments/assets/00e378af-d748-4c91-8424-ec893185c817" /> I use the below SQL View to generate the attributes key value pair per account. `CREATE VIEW z_accounts_attributes AS SELECT a.id AS account_id, kv.key AS attribute, kv.value AS value FROM accounts a JOIN notes n ON substr(n.id, 9) = a.id-- remove 'account-' prefix CROSS JOIN json_each(trim(substr(n.note, instr(n.note, '{')/* start at first { */ ) ) ) AS kv WHERE n.note IS NOT NULL AND n.note != '' AND n.note LIKE '%```json%' AND a.tombstone = 0;` And the result is <img width="407" height="218" alt="Image" src="https://github.com/user-attachments/assets/6141306a-74a2-4b73-82a0-0c588ef7c464" /> The same goes for Categories (works well with templates with no interference!) <img width="659" height="310" alt="Image" src="https://github.com/user-attachments/assets/a787cf6d-10d4-49a3-9ad7-a868ab18afc4" /> `CREATE VIEW z_categories_attributes AS SELECT c.id AS category_id, kv.key AS attribute, kv.value AS value FROM categories c JOIN notes n ON n.id = c.id-- remove 'category-' prefix CROSS JOIN json_each(trim(substr(n.note, instr(n.note, '{')/* start at first { */ ) ) ) AS kv WHERE n.note IS NOT NULL AND n.note != '' AND n.note LIKE '%```json%' ORDER BY kv.key; ` <img width="435" height="236" alt="Image" src="https://github.com/user-attachments/assets/19d23674-e43e-4149-9936-490589dad530" /> This is a poor-guy implementation, but the potential is huge when it comes to reporting. You could add a separate page to define Attributes for Accounts and Budgets, and then use them in reporting. - User-defined fields (e.g., text or dropdowns). - Editable within account and budget settings. - Accessible via reports, rules, and exports (YAML/CSV/JSON). This would dramatically enhance reporting, categorization, and automation, without affecting existing workflows. ### Teaching and learning This feature could be easily adopted by anyone interested in advanced reporting, multi-account setups, or budget analytics.
GiteaMirror added the needs votesfeature labels 2026-02-28 20:17:35 -06:00
Author
Owner

@github-actions[bot] commented on GitHub (Oct 13, 2025):

Thanks for sharing your idea!

This repository uses a voting-based system for feature requests. While enhancement issues are automatically closed, we still welcome feature requests! The voting system helps us gauge community interest in potential features. We also encourage community contributions for any feature requests marked as needing votes (just post a comment first so we can help guide you toward a successful contribution).

The enhancement backlog can be found here: https://github.com/actualbudget/actual/issues?q=label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc+

Don’t forget to upvote the top comment with 👍!

@github-actions[bot] commented on GitHub (Oct 13, 2025): :sparkles: Thanks for sharing your idea! :sparkles: This repository uses a voting-based system for feature requests. While enhancement issues are automatically closed, we still welcome feature requests! The voting system helps us gauge community interest in potential features. We also encourage community contributions for any feature requests marked as needing votes (just post a comment first so we can help guide you toward a successful contribution). The enhancement backlog can be found here: https://github.com/actualbudget/actual/issues?q=label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc+ Don’t forget to upvote the top comment with 👍! <!-- feature-auto-close-comment -->
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#2538