Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Budget/docs/rules.md at master · TheUnderdev/Budget · GitHub
Skip to content

Latest commit

History

History
119 lines (77 loc) · 5.04 KB

File metadata and controls

119 lines (77 loc) · 5.04 KB

Import Rules

Auto-categorize imported transactions using pattern-based rules with a visual query builder, so you spend less time manually sorting transactions and more time understanding your finances.

Overview

Import Rules let you define conditions that automatically assign categories, tags, vendors, and other fields to transactions as they are imported. Rules use a visual query builder with boolean logic, support multiple actions per rule, and can be previewed or applied retroactively to existing transactions.

Creating a Rule

  1. Navigate to Budget > Rules
  2. Click Add Rule
  3. Give the rule a descriptive name (e.g., "Amazon purchases", "Monthly rent")

Building Criteria

Each criterion consists of three parts:

ComponentOptions
FieldDescription, Vendor, Amount, Date, Reference, Notes, Transaction Type
Match typeContains, Equals, Starts with, Ends with, Regex, Greater than, Less than
PatternThe value to match against

Tip: Use "Contains" for most text matching. Reserve "Regex" for complex patterns where simpler match types won't suffice.

The Transaction Type field lets you filter by Income or Expense. This is useful when the same description appears as both inflow and outflow (e.g., internal transfers between accounts).

Boolean Logic

Combine multiple conditions using logical operators:

  • AND — all conditions must be true
  • OR — at least one condition must be true
  • NOT — negate a condition or group

Groups can be nested to unlimited depth for complex logic. For example:

(vendor contains "Amazon" AND amount > 50)
OR
(description contains "Prime")

This matches any Amazon purchase over £50, or any transaction mentioning "Prime" regardless of vendor or amount.

Actions

When a rule matches a transaction, one or more actions are applied:

ActionEffect
Set categoryAssign a specific category
Set vendorSet the vendor/payee field
Set notesAdd or replace notes
Add tagsAttach tags from your tag sets
Set accountAssign to a specific account
Set typeMark as expense or income
Set referenceSet the reference field
Auto-Link as TransferFind and link a matching opposite transaction as a transfer

You can configure multiple actions per rule — for example, set the category to "Subscriptions" and add a "streaming" tag simultaneously.

Auto-Link as Transfer

The Auto-Link as Transfer action automatically finds a matching transaction on a different account — same amount, opposite type (income vs expense), within a few days — and links the two as a transfer. This is particularly useful for banks that represent internal movements as separate income/expense entries (e.g., Monzo pot transfers).

Example rule for automatic transfer linking:

  • Criteria: Transaction Type is Expense AND Description contains "Pot Transfer"
  • Action: Auto-Link as Transfer

This works when applying rules manually, during CSV import, and during bank sync.

Priority

Each rule has a priority number. Higher priority numbers run first. When multiple rules match the same transaction, the highest-priority rule wins for any conflicting actions.

Tip: Use priority strategically — give specific rules (e.g., "Netflix subscription") a higher priority than general rules (e.g., "All entertainment vendors").

Behavior Settings

Control how actions interact with existing field values:

BehaviorEffect
AlwaysOverwrite existing value
If emptyOnly set the field if it is currently blank
AppendAdd to the existing value (text fields)
MergeCombine with existing values (for tags)

Note: "If empty" is useful when you want manual categorization to take precedence over rules.

Preview Matches

Before saving a rule, click Preview to see which existing transactions in your account would match the criteria. This lets you verify the rule behaves as expected without making any changes.

Tip: If the preview shows unexpected matches, refine your criteria — add more conditions or switch to a more specific match type.

Run on Existing Transactions

Rules normally apply during import, but you can also apply them retroactively:

  1. Open the rule you want to apply
  2. Click Run Rule Now
  3. Optionally restrict to uncategorized transactions only
  4. Confirm to apply

Warning: Running a rule with "Always" behavior on existing transactions will overwrite any manual categorization you've previously done on matching transactions.

Related Features

  • Import — rules are applied automatically during the import process
  • Transactions — rules modify transaction fields
  • Categories — the most common rule action is setting a category
  • Tags — rules can add tags from your configured tag sets

Settings

  • Auto-apply import rules — toggle whether rules run automatically on new imports (on/off). When disabled, you must run rules manually.