[Feature] Custom Fields for transactions #1668

Closed
opened 2026-02-28 19:50:30 -06:00 by GiteaMirror · 3 comments
Owner

Originally created by @joeeasterly on GitHub (Dec 12, 2024).

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?

It would be great if users could create a custom field that is searchable by the gui and api. I save receipts for purchases in paperless-ngx. It would be great if I could add a common identifier both in paperless and actual so I can more easily associate those two records together. Another use case is if I am tracking a series of purchases over months/years towards a specific project -- for example going on vacation. I would be buying books, subscribing to youtube premium to watch lots of videos, buying clothes, getting a passport, plane tickets. Each of those items fall into separate purchase categories but I could also associate them together with a common "project name."

Describe your ideal solution to this problem

An area in settings where you can define a custom field by giving it a name, and then choosing a data type. If the only data type available was string that would be sufficient, but I could see boolean/checkbox, date, and URL (where the value is presented as a clickable link) being handy too.

Teaching and learning

An additional note that you can add custom columns of data to transactions.

Originally created by @joeeasterly on GitHub (Dec 12, 2024). ### 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? It would be great if users could create a custom field that is searchable by the gui and api. I save receipts for purchases in paperless-ngx. It would be great if I could add a common identifier both in paperless and actual so I can more easily associate those two records together. Another use case is if I am tracking a series of purchases over months/years towards a specific project -- for example going on vacation. I would be buying books, subscribing to youtube premium to watch lots of videos, buying clothes, getting a passport, plane tickets. Each of those items fall into separate purchase categories but I could also associate them together with a common "project name." ### Describe your ideal solution to this problem An area in settings where you can define a custom field by giving it a name, and then choosing a data type. If the only data type available was string that would be sufficient, but I could see boolean/checkbox, date, and URL (where the value is presented as a clickable link) being handy too. ### Teaching and learning An additional note that you can add custom columns of data to transactions.
GiteaMirror added the needs votesfeature labels 2026-02-28 19:50:30 -06:00
Author
Owner

@github-actions[bot] commented on GitHub (Dec 12, 2024):

Thanks for sharing your idea!

This repository uses lodash style issue management for enhancements. That means enhancement issues are automatically closed. This doesn’t mean we don’t accept feature requests, though! We will consider implementing ones that receive many upvotes, and we welcome contributions for any feature requests marked as needing votes (just post a comment first so we can help you make 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 (Dec 12, 2024): :sparkles: Thanks for sharing your idea! :sparkles: This repository uses lodash style issue management for enhancements. That means enhancement issues are automatically closed. This doesn’t mean we don’t accept feature requests, though! We will consider implementing ones that receive many upvotes, and we welcome contributions for any feature requests marked as needing votes (just post a comment first so we can help you make 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 -->
Author
Owner

@sidvishnoi commented on GitHub (Aug 21, 2025):

To more easily reconcile my bank statements with Actual, which contain a "narration" column (string detailing transaction ID, payment method (card/cheque/others) etc.), this custom field would be very helpful.
Additionally, I think to keep UI simple on transactions page, these fields could be hidden by default, but having them exported in CSV would be helpful with sharing.

@sidvishnoi commented on GitHub (Aug 21, 2025): To more easily reconcile my bank statements with Actual, which contain a "narration" column (string detailing transaction ID, payment method (card/cheque/others) etc.), this custom field would be very helpful. Additionally, I think to keep UI simple on transactions page, these fields could be hidden by default, but having them exported in CSV would be helpful with sharing.
Author
Owner

@joaoaugustogrobe commented on GitHub (Nov 21, 2025):

I use virtual credit cards in the same account for specific purposes, like streaming services, shopping, etc. With Pluggy integration, I can find usefull information on the raw_synced_data that would be super usefull for rule creation.
I would love to create a rule like transaction.synced_data.creditCardMetadata.cardNumber == "1234" to apply a specific category or tag.

I think this relates to this feature request, as those would be custom fields for transactions.

IMO I see this being implemented as two parts:

  1. Adding the custom fields
    We need a way to manage the custom fields (CRUD operations). We could go with a JS object, stored as a JSON text on the transactions table; and on the UI side create a simple component for key:value edits, but also allow raw editting, for mode advanced users.
    Two drownbacks of this approach could be performance wise - I'm not sure the performance impacts on having JSON queries on sqlite, but this can also be mitigated by having more restrictive filters chained; and not having a schema for those custom fields make it harder for a "UI Builder" with "autocomplete/dropdown" selectors. Initially with this approach we would need to type the keys manually (check screenshots for examples)

  2. Accessing the custom fields
    We would need query capabilities for the rule condition and action (maybe using the Rule action templating), and also on filters.
    With this, we would be able to query all the fields from the transaction object, allowing more flexibility.


I don't have much experience with Actual and its codebase, but this feature is something that I would be happy to contribute

Image Image
{
    "id": "3135b758-f1a3-4329-*****-*****",
    "description": "Mp *Melimais",
    "descriptionRaw": "Mp *Melimais",
    "currencyCode": "BRL",
    "category": "Shopping",
    "categoryId": "08000000",
    "accountId": "3e4c43f7-4a97-4a3d-*****-*****",
    "status": "POSTED",
    "type": "DEBIT",
    "creditCardMetadata.cardNumber": "1234",
    "creditCardMetadata.payeeMCC": 4321,
    "creditCardMetadata.billId": "*****-*****-4f42-9c95-*****",
    "providerId": "68a7b6ce-baa1-*****-*****-*****",
    "order": 0,
    "booked": true,
    "date": "2025-08-22",
    "payeeName": "",
    "notes": "Mp *Melimais",
    "transactionAmount": {
        "amount": -24.9,
        "currency": "BRL"
    },
    "transactionId": "3135b758-f1a3-*****-*****-*****",
    "sortOrder": 1755821773001,
    "cleared": true,
    "amount": -24.9,
    "imported_payee": "",
    "account": "e62d1313-8d13-*****-*****-*****"
}
@joaoaugustogrobe commented on GitHub (Nov 21, 2025): I use virtual credit cards in the same account for specific purposes, like streaming services, shopping, etc. With Pluggy integration, I can find usefull information on the raw_synced_data that would be super usefull for rule creation. I would love to create a rule like `transaction.synced_data.creditCardMetadata.cardNumber == "1234"` to apply a specific category or tag. I think this relates to this feature request, as those would be custom fields for transactions. IMO I see this being implemented as two parts: 1. Adding the custom fields We need a way to manage the custom fields (CRUD operations). We could go with a JS object, stored as a JSON text on the `transactions` table; and on the UI side create a simple component for key:value edits, but also allow raw editting, for mode advanced users. Two drownbacks of this approach could be performance wise - I'm not sure the performance impacts on having JSON queries on sqlite, but this can also be mitigated by having more restrictive filters chained; and not having a schema for those custom fields make it harder for a "UI Builder" with "autocomplete/dropdown" selectors. Initially with this approach we would need to type the keys manually (check screenshots for examples) 2. Accessing the custom fields We would need query capabilities for the rule condition and action (maybe using the Rule action templating), and also on filters. With this, we would be able to query all the fields from the transaction object, allowing more flexibility. --- I don't have much experience with Actual and its codebase, but this feature is something that I would be happy to contribute <img width="901" height="170" alt="Image" src="https://github.com/user-attachments/assets/365696a5-47d3-47b2-835b-10b54aad6b5a" /> <img width="314" height="367" alt="Image" src="https://github.com/user-attachments/assets/69490941-22f1-4157-a2e5-7b986ec5541a" /> ```json { "id": "3135b758-f1a3-4329-*****-*****", "description": "Mp *Melimais", "descriptionRaw": "Mp *Melimais", "currencyCode": "BRL", "category": "Shopping", "categoryId": "08000000", "accountId": "3e4c43f7-4a97-4a3d-*****-*****", "status": "POSTED", "type": "DEBIT", "creditCardMetadata.cardNumber": "1234", "creditCardMetadata.payeeMCC": 4321, "creditCardMetadata.billId": "*****-*****-4f42-9c95-*****", "providerId": "68a7b6ce-baa1-*****-*****-*****", "order": 0, "booked": true, "date": "2025-08-22", "payeeName": "", "notes": "Mp *Melimais", "transactionAmount": { "amount": -24.9, "currency": "BRL" }, "transactionId": "3135b758-f1a3-*****-*****-*****", "sortOrder": 1755821773001, "cleared": true, "amount": -24.9, "imported_payee": "", "account": "e62d1313-8d13-*****-*****-*****" } ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#1668