Transactions
Transactions are the day-to-day entries that drive Sure’s budgets, reports, and account history. Use the Transactions screen to review imported activity, add manual entries, categorize spending, and keep related labels such as merchants and tags tidy.Review transactions
Open Transactions from the main navigation to see recent activity across your accounts. From this screen you can:- Search and filter by account, date, type, status, amount, category, tag, merchant, or attachments. The merchant filter includes a No merchant option to show only transactions without an assigned merchant; the tag filter includes an Untagged option to show only transactions with no tags; the attachments filter lets you show only transactions that have files attached or only those with no attachments.
- View a summary of the count and total amounts for your current filter
- Click anywhere on a transaction row to open its detail drawer
- Add a new manual transaction
- Import transaction data from a CSV file
- Review upcoming recurring transactions
- Convert eligible investment cash activity into a security trade
Tags in the transaction list
Tags are shown directly on each transaction row so you can see at a glance which tags a transaction carries. On wider screens, a dedicated Tags column appears. A single tag renders as a colored pill. Multiple tags collapse into a compact badge showing the first two letters of each tag; hovering the badge reveals all tag names. On narrower screens and on mobile, tag pills appear inline after the transaction title. To change the tags on a transaction without opening its detail drawer, click any tag pill (or the add-tag icon) on the row. A searchable picker opens where you can toggle tags on or off. Each click applies the change immediately without closing the picker. Transfer rows display tags as read-only in the list; edit tags for a transfer from its detail drawer, which keeps both legs in sync. Tags can only be added or removed by users who have annotate permission on the account. Pending transactions are visible in your transaction list but are excluded from account balance calculations. Balances reflect only settled (posted) transactions. Once a pending transaction posts, it is included in balance and report totals. If Sure detects that a pending transaction might duplicate a posted one, you can merge the duplicate or keep both transactions. When you merge a pending duplicate into its posted counterpart, Sure carries over the data you added while the transaction was pending:- Attachments (receipts, invoices): attachment files from the pending transaction move to the posted transaction. If the posted transaction already references the same stored attachment blob, the duplicate attachment row is dropped rather than duplicated. A merge is refused if it would push the posted transaction above 10 attachments total; the pending transaction and its attachments remain untouched in that case.
- Tags: any tags on the pending transaction that the posted transaction does not already have are added to the posted transaction.
- Notes: if only the pending transaction has notes, those notes are copied to the posted transaction. If the posted transaction already has notes, the pending notes are appended after a blank line, unless the same complete paragraphs already appear consecutively in the posted notes. A partial text match does not count as a duplicate.
Add a manual transaction
To add a transaction that was not imported from a provider, select Add transaction from the Transactions screen. Fill in the date, amount, account, and any other details, then save. If you submit the form more than once — for example by double-clicking the save button, using the browser back button, or restoring a cached tab — Sure detects the repeated submission and opens the existing transaction instead of creating a second one.Edit transaction details
Click anywhere on a transaction row to open it and update the fields that affect reporting and review:- Name: The display name for the transaction
- Date: The transaction date
- Amount: The transaction amount and direction. When you change the currency selector, the amount field’s symbol, decimal step, and precision update immediately to match the selected currency. You can paste formatted amounts — such as
20,000,1.234,56, or$1,234.56copied from a bank statement or spreadsheet — directly into any money field. Sure parses the value and inserts the plain number. When the pasted amount is ambiguous (for example,1,234could be one-thousand-two-hundred-thirty-four or one point two-three-four), Sure uses the decimal separator of the selected currency to decide: pasting1,234into a euro field yields 1.234, while the same paste into a US dollar field yields 1234. Amounts in parentheses are treated as negative. Text that does not match a recognizable amount is left to the browser. - Account: The account the transaction belongs to. When adding a new transaction, the account selector includes a search box so you can find the right account quickly.
- Category: The income or expense category used for budgets and reports. Subcategories appear indented under their parent in every category selector across the app, so the hierarchy is always visible when you assign or change a category. The “Uncategorized” option is displayed as a badge in the category selector, consistent with how other categories appear, making it easy to identify at a glance.
- Merchant: The merchant or payee associated with the transaction
- Tags: Extra labels for flexible filtering. When you filter by one or more tags, the summary count and totals reflect each matching transaction once, even if it carries multiple matching tags. You can also filter by Untagged to find transactions that have no tags assigned.
- Notes: Private context for the transaction
How syncs interact with your edits
When you edit a transaction through the app, Sure automatically marks it as user-modified so later provider syncs do not overwrite it. Edits through the API or AI assistant also lock the fields that changed, including date, amount, name, category, and merchant. These field locks protect the edited values while other unlocked fields can still be enriched. An API update withuser_modified: true additionally protects the whole entry from provider sync updates.
These protections last until they are explicitly removed. Re-enabling sync clears the entry’s user-modified and import-lock flags and its field locks.
Saving changes to Name, Notes, Category, Merchant, or Tags does not trigger a background account sync. Reports and budgets update immediately through the entries cache. Saving changes to Amount, Date, or Account does trigger an account sync to recalculate balances from the affected date forward.
Create a merchant inline
If the merchant you need does not exist yet, you can create it directly from the merchant selector in the transaction detail or new-transaction form. Type a name in the merchant field and select the option to create it. Sure saves the new merchant and immediately assigns it to the transaction. There is no need to navigate to Settings → Merchants first.Categorize transactions
Categories help Sure group income and expenses consistently. You can assign a category from the transaction detail view or directly from the transaction list. When there are uncategorized transactions, use the categorize flow to work through them in batches. You can assign a category to each transaction and optionally create a categorization rule so future matching transactions use the same category. After you change a transaction’s category, a prompt may appear offering to create a matching rule. Use the X button to close only that prompt without affecting future ones. Select Hide for today to pause all rule suggestions for 24 hours — a note below the buttons states this so the effect is clear. Check Don’t show this again to permanently disable rule prompts for your account. Use subcategories when you want more detail within a broader category. For example, a parent category such as Food & Dining can contain subcategories such as Groceries, Restaurants, and Coffee. The category picker groups subcategories under their parent and indents them with a hierarchy indicator, so the full structure is visible in the transaction form, bulk edit, rule builder, search filters, and import mapping. Budgets can use subcategories individually or share the parent budget.Category filter sidebar
When you filter transactions by category in the sidebar, parent and subcategory checkboxes are linked:- Checking a parent category automatically checks all of its subcategories.
- Unchecking any single subcategory automatically unchecks its parent.
- If some but not all subcategories are checked, the parent shows an indeterminate (partial) state.
What counts as uncategorized
The Uncategorized filter, the uncategorized badge count, and the Quick Categorize wizard all use the same definition: a transaction is uncategorized when it has no category assigned and its kind is not a pure inter-account transfer leg (specifically,funds_movement and cc_payment are excluded because those legs have nothing to categorize). All other transaction kinds — including loan_payment, investment_contribution, and one_time — appear in the uncategorized list if they have no category. The dashboard’s uncategorized aggregate uses the same set, so the count shown on the dashboard always matches what you see in the Transactions list.
Loan payment and investment contribution transfers are categorizable. For a matched transfer, assign the category, merchant, and tags on its outflow transaction. The inflow shows the outflow category read-only. An unmatched imported transfer leg remains editable.
Filter by AI categorization status
The search popover on the Transactions page includes an AI filter group with two independent checkboxes:- AI — shows transactions whose category was set by automatic categorization (Bayes or LLM) and still matches that original assignment.
- AI history — shows transactions where automatic categorization ran but the category no longer matches: a rule, manual edit, import, or a clear has since changed it.
Filter by attachment
The search popover on the Transactions page includes an Attachment filter group with two independent checkboxes:- With attachment — shows only transactions that have at least one file attached.
- Without attachment — shows only transactions that have no files attached.
Filter by uncategorized on an account page
The Filter popover on each account’s activity list includes an Uncategorized only option under a Category section. Checking it narrows the activity list to transactions that meet the same uncategorized definition used by the Transactions page filter, the uncategorized badge, and Quick Categorize. The filter combines with the status filters (Confirmed, Pending) and the search field, so you can work through what still needs a category within a single account without switching to the global Transactions page.Categorize flow
The categorize flow (accessible when uncategorized transactions exist) displays a category picker that groups subcategories under their parent, consistent with the rest of the app. Both the parent label and its subcategories are visible together, making it straightforward to pick the right level of detail without navigating a flat list. The categorize flow only surfaces transactions on accounts you have permission to annotate — owner, full-control share, or read-write share. Transactions on read-only or unshared accounts are excluded from both the count displayed on the Transactions page and from the flow itself. If a bulk categorization would skip every selected entry because none belong to accounts you can annotate, no rule is created. This ensures the wizard accurately reflects what you can change.Create a category inline
If the category you need does not exist yet, you can create it directly from the transaction form or detail panel without leaving the transaction. Type a new name in the category selector and choose Create “[name]” from the dropdown. The new category is saved and immediately assigned to the transaction. To create a subcategory instead, select Add as a subcategory… below the create row. The picker switches to a list of your top-level categories. Select a parent to create the new category under it. The new subcategory inherits its parent’s color and is immediately assigned to the transaction.Create a category from the quick picker
The quick category picker that opens from a transaction row in the list now also supports inline creation. When you type a name that does not match any existing category, the picker shows a Create “[name]” row. Click the row or press Enter to create the category and assign it to the transaction in one step. The row refreshes in place and the rule suggestion prompt appears as normal. To create a subcategory instead, click Add as a subcategory… below the create row. The picker swaps to a list of your top-level categories. Select a parent to create the new category under it and immediately assign it. If category creation fails, an error message appears in the picker so you can correct the name and try again. In the category selector used by transaction forms, focus also returns to the search field, where Escape closes the selector. The transaction row’s quick picker shows the error but does not perform that focus reset. These options are only shown when you have permission to annotate the transaction’s account.Bulk edit transactions
Select multiple transactions to reveal the selection bar at the bottom of the screen. The bar shows how many transactions are selected and gives you quick actions. Choose Edit to apply the same details to all selected rows. Bulk editing can update:- Name
- Date
- Category
- Merchant
- Tags
- Notes
Bulk edit and account permissions
Bulk edit respects the account share permissions of the user making the change:- Owner or full control share: all fields (name, date, category, merchant, tags, notes) can be updated.
- Read-write share: only annotation fields (category, merchant, tags, notes) can be updated. Name and date changes are ignored for these transactions.
- Read-only share or no access: the transaction is skipped entirely and not updated.
Group split transactions
When a transaction is split into multiple entries, Sure can display the child entries grouped under their parent row with an indented layout. This applies to both the Transactions page and the Activity tab on individual account pages. To enable or disable this behavior, go to Settings → Appearance and toggle Group split transactions. When the toggle is on, split children appear indented under their parent in both views. When the toggle is off, split children appear as individual rows in the same position they would occupy by date.Duplicate a transaction
When exactly one non-investment transaction is selected, a Duplicate action appears in the selection bar. Selecting it opens a pre-filled new transaction form with the same details as the original, so you can adjust and save a copy without re-entering all the fields.Manage categories, merchants, and tags
The Transactions screen includes shortcuts for:- Edit categories
- Edit merchants
- Edit tags
- Edit imports
Editing provider-assigned merchants
Bank providers can assign shared merchant records used across families. New merchants created by AI detection are family-owned; older AI-created provider records may still exist. You can personalize a shared provider merchant for your family. When you edit a provider-assigned merchant and change its name or website, Sure converts that merchant to a family-owned merchant for your family only. Your family’s transactions point to the new family-owned record; other families on the instance continue to use the original shared merchant without seeing your changes. If you submit a blank website during the edit, Sure clears the website on your family’s copy. Leaving the form unchanged keeps the shared merchant as-is.Lock category creation
Admins can prevent new categories from being created by locking the category structure. To toggle the lock, open Edit categories and select Lock category creation or Unlock category creation from the menu. The option is only visible to admins. When category creation is locked:- The New category button is hidden for all users.
- Attempts to create a category through the web UI or API return an error.
- Existing categories can still be edited, merged, and deleted.
- Bank syncs and imports can still add categories automatically.
Delete a category
To delete a category, open Edit categories, select the category, and choose Delete. Sure removes the category and clears it from every transaction that had it assigned. Transactions eligible for the Uncategorized filter then appear there, and the count badge follows the same filtering rules after the category is cleared. If you delete a parent category, its subcategories are not deleted automatically — they become top-level categories. Delete each subcategory separately if you want to remove the entire group.Merge categories
Use Edit categories and then Merge categories when two or more categories represent the same kind of activity. When you merge categories, Sure asks you to choose:- Target category: The category to keep
- Source categories: The categories to merge into the target
Merge guardrails
Sure prevents merges that would make the category hierarchy confusing or invalid:- You cannot choose the same category as both the target and a source
- You cannot merge a parent category into one of its own subcategories
- You cannot merge a category that has subcategories into another subcategory
Transaction rules
Rules let you automatically apply categories, merchants, tags, and other attributes to transactions that match a set of conditions. You can create and manage rules from Settings → Rules.Condition types
If a rule was created on an older version of Sure and includes a condition type that no longer exists, that condition shows an “Unsupported” label in the rule editor. The condition matches no transactions while in that state. You can delete the unsupported condition and replace it with a supported one to restore the rule’s behavior.Validation for rule types
Sure validates recognized resource and action types before saving. The supported resource type istransaction; action types must be registered transaction actions. The web rule form returns a 422 response when validation fails. Other callers receive errors through their own API or import interface; direct database writes can bypass model validation.
This validation does not repair previously stored invalid types. If a legacy rule prevents the Rules page from loading, a maintainer must repair the stored rule through an administrative path that does not depend on that page before it can be edited normally.
AI actions such as auto-categorize and auto-detect merchants remain valid on existing rules even when the AI provider is not configured. Their execution still depends on the available categorization and LLM providers; absence of a configured LLM does not make the action type invalid.
Rules support the following condition types:
- Transaction name – match on the transaction name or description
- Amount – match on the transaction amount
- Transaction type – match on whether the transaction is income, expense, or transfer
- Merchant – match on the merchant associated with the transaction
- Category – match transactions that already have a specific category assigned, or that have no category
- Tag – match transactions that already have a specific tag applied, or that have no tags
- Transaction details – search within provider-specific metadata such as SimpleFIN payee, description, or memo fields
- Notes – match on the notes you have added to a transaction
- Account – match on the account the transaction belongs to
- Text fields (Transaction name, Notes): Contains, Does not contain, Starts with, Ends with, Matches regex, Equal to, Not equal to, Is empty, Is not empty
- Number fields (Amount): Greater than, Greater than or equal to, Less than, Less than or equal to, Equal to, Not equal to
- Select fields (Merchant, Category, Tag, Account): Equal to, Not equal to, Is empty, Is not empty
- Transaction type: its own fixed set of type-matching operators
- Transaction details: Contains, Equal to, Is empty (JSONB metadata supports contains and equality semantics only)
~*) against the stored field value. Patterns are capped at 200 characters. Back-references (\1 through \9) are not allowed and are rejected at save. A pattern that PostgreSQL cannot compile is also rejected at save so the rule never enters a broken state. A pattern that takes too long to run causes that rule’s run to be recorded as failed without blocking other rules.
The tag condition supports all four select operators: Equal to, Not equal to, Is empty, and Is not empty. When you combine multiple tag conditions with AND, each condition is evaluated independently, so a transaction with both tags will match correctly.
Rule actions
Rules can set:- Category
- Merchant
- Tags (you can select multiple tags in a single action; the rule merges them with any tags already on the transaction rather than replacing them)
- Notes
- Name
Rule order
Rules run from top to bottom in the order shown on Settings → Rules. You can drag any rule by its handle to change its position in the list. The order matters when two rules target the same field on the same transaction: the higher rule wins and the lower rule leaves that field alone. Tags are an exception — every matching rule adds its tags rather than the first one winning.Stop processing
Each rule has a Stop processing further rules toggle. When a transaction matches a rule with this toggle enabled, no rules below it run against that transaction. Use this to prevent lower rules from overriding a deliberate assignment. When a rule with stop processing is enabled, a Stop badge appears next to it in the list as a visual reminder.Applying rules
Rules run automatically during account syncs. You can also apply rules manually from Settings → Rules using Re-apply on an individual rule or Apply All to run all rules against your existing transactions. Apply All runs every rule in the family — including inactive ones — so their transaction changes (category, merchant, tags, and so on) take effect. Inactive rules skip the email notification action only: matches seen while a rule is off are not recorded and no digest email is sent. When you switch a rule back on, those unrecorded matches are picked up on the next run. When you re-apply a single rule, Sure first runs all active rules above it in order before applying the selected rule. This means the result matches what the rule would produce during a full run — for example, a rename applied by a higher rule is visible to a categorization rule below it.Transaction splits API
The API exposes a nested resource for managing transaction splits programmatically:
A split-child transaction ID resolves to its parent, so you can address either transaction to reach the split resource.
Amounts use the same sign convention as the transaction endpoints: positive for expenses, negative for income. This differs from the web split editor, which handles sign conversion internally.
Read requests need read scope and access to the account. Split writes need
read_write scope and owner or full-control permission on the account. Use amount_decimal from the split response for exact amounts; inputs are rounded to four decimal places before checking their sum. See the OpenAPI spec for full request and response schemas.