Subscriptions
Subscriptions and recurring expenses
How subscriptions are detected, protected after edits, and connected to automations.
Updated: 2026-03-04
Before you start
- At least two months of uploaded and reviewed expense data
Open related features
Layered workflow
Layer 1: Build history first
- Upload and review multiple months of expenses before running detection so the system can see repeating timing patterns.
- Use Review to keep merchant names consistent because cleaner descriptions improve recurring matching.
Layer 2: Detect and confirm
- Run Detect to generate recurring candidates from your historical expenses.
- Confirm cycle, amount, and next renewal for each item, and remove false positives.
Layer 3: Protect and automate
- After you edit and confirm a subscription, later detection runs should respect your edits and avoid resetting it.
- Service name edits can trigger an automation suggestion so future uploads stay standardized.
How detection works in simple terms
Detection looks at your expense history and finds repeating merchant patterns over time. It combines description similarity, amount tolerance, and spacing between charge dates to decide whether something is likely recurring.
The system is keyword-aware and service-catalog-aware, so known subscription services can be recognized even when statement text varies slightly month to month.
Cycle and amount behavior
Cycle detection uses date history across charges. This makes monthly plans less likely to be misread as weekly or quarterly when there are normal date shifts.
Amount matching allows small natural variation, such as exchange-rate drift or minor tax rounding. A service is not split into duplicates just because one month is slightly higher or lower.
What happens after you edit a subscription
When you edit and confirm a subscription, the system treats that record as user-controlled. Future detection should not overwrite your important edits such as service name, cycle, or amount.
If detection finds similar history later, it tries to match existing records first and update safely. It also avoids creating duplicates when an existing active or inactive row already represents the same service.
Renewal dates and maintenance
Renewal maintenance moves past-due subscriptions forward to the next valid renewal date. It uses your manual override date when one exists, otherwise it uses the current renewal value.
Maintenance can run from the Update button and also runs automatically when needed, so overdue renewal dates are corrected without constant manual cleanup.
For reminders, you can enable or disable notifications per subscription and set reminder lead time (for example same day, 2 days before, or 7 days before).
Automations from Subscriptions edits
If you rename a service in Subscriptions, the app can suggest creating an automation rule from that new name. This is the same automation concept used in Review description edits.
Before opening the automation modal, the app checks whether an existing active automation already covers the keyword. If coverage already exists, it does not prompt you again.
Concrete example
You upload three months of expenses and the same service appears as "NETFLIX.COM", "Netflix", and "Netflix EU". Detection groups them, identifies a monthly pattern, and sets one subscription record with an estimated next renewal.
You then rename it to "Netflix Premium" and keep the cycle monthly. Later detection runs should keep that edited record instead of resetting it, and automations can be suggested so future uploads normalize to the same naming style.
What to keep in mind
Detection is strongest when you keep Review descriptions clean and upload data continuously by month.
- Use Detect after enough history exists, not after only one short period.
- Confirm cycle and amount once, then keep status current when you cancel services.
- Enable reminders for subscriptions with cancellation deadlines and set lead time to match your cancellation window.
- Use automations to keep future merchant naming consistent.
- Always verify you are in the correct entity type before upload and detection.