---
title: "Recurring Registry: Track Subscriptions and Bills"
description: "Turn on the Recurring Registry to detect subscriptions and recurring bills from your transactions, and get alerted on price increases and missed charges."
section: "Enrichments"
canonical: "https://banksync.io/docs/enrichments/recurring"
---

The **Recurring Registry** learns which merchants charge you on a regular cadence — subscriptions, utilities, rent, SaaS — and watches each series for the two things worth interrupting you about: a **price increase** and a **missed charge**. It builds its picture entirely from the transactions your feeds sync; there is nothing to list by hand.

There is exactly **one Recurring Registry per workspace**. Target it at feeds via its Dependencies tab like any enrichment.

## How detection works

Every outgoing charge is grouped by its normalized merchant descriptor (the same normalization Memory uses, so `NETFLIX.COM 866-579-7172` and `NETFLIX.COM` are one series). For each merchant, BankSync tracks the typical amount, the recent charge history, and the average gap between charges — the cadence.

Three rules keep the statistics honest:

- **Only charges count.** Refunds and incoming credits are ignored, so a refund never resets a subscription's price history.
- **Same-day repeats are not a cadence.** Two charges on one day update the amount stats but do not teach a "0-day cadence".
- **Cold start: nothing fires until a merchant has 5 observed charges.** A merchant you have paid twice is not yet a subscription.

> **Renamed descriptors start a new series:** 'Detection keys on the merchant descriptor. If a provider or merchant changes how the charge appears on your statement, the new descriptor starts a fresh series and has to re-earn its five charges — the old series simply goes quiet.'

## The watch rules

- **Price increase** — The latest charge jumped versus the series' recent median. Default threshold 10% (0 turns
  it off, up to 500%). Fires at most once per merchant per sync.
- **New subscriptions** — A toggle to be told when a merchant first starts charging on a regular cadence. Off by
  default.
- **Missed charge** — An expected charge did not arrive. You set the grace period (1–60 days past the expected
  date); 0 — the default — leaves the check off.

**Price increase** is built for real-world bills, not just fixed-price subscriptions. The latest charge is compared to the **median of the previous charges**, and the alert only fires when the jump beats *both* your percentage threshold *and* the series' own normal variation — so a utility bill that swings with the seasons does not cry wolf, while a genuine plan-price hike does. A charge that goes from **free to paid** gets its own alert copy ("trial ended?"). The check needs a real series behind it: at least five charges, an established cadence, and four recorded amounts for the median.

**Missed charge** projects the next expected date from the last charge plus the series' average gap, and fires once expected date + grace period has passed with no charge. It is evaluated by BankSync on a schedule, not during syncs — absence is exactly the thing a sync cannot observe. Annual charges need three observed gaps before this check trusts the cadence, which means a yearly renewal cannot fire a missed-charge alert in its first year — by design, since one year-gap is not yet a pattern.

> **Pair it with the Feed Monitor:** 'A feed that has silently stopped syncing looks exactly like every bill being missed at once. Run the Feed Monitor alongside the Recurring Registry: when a missed-charge alert arrives, a quiet Feed Monitor tells you the feed is fine and the charge is genuinely absent.'

## Setting it up

1. **Create it** — On the Enrichments tab, click "Add an enrichment" and choose Recurring Registry in the
   Watch group. If the option is disabled, your workspace already has one — open it instead.
2. **Choose the watch rules** — Toggle price increase (and tune the percentage), new subscriptions, and missed charge (and
   set the grace days). Zero-valued thresholds mean off.
3. **Choose where alerts go** — Email recipients, a Slack incoming webhook, or a webhook endpoint — the same delivery
   channels every Watch enrichment uses. Repeat alerts for the same finding are held back by a
   24-hour cooldown.
4. **Target the feeds** — In the Dependencies tab, tick the transaction feeds to learn from, then flip the switch to
   Enabled.

![The Recurring Registry configuration form with all three watch rules enabled: Price increases alerting when a recurring charge jumps more than 15 percent above its usual amount, New subscriptions alerting when a merchant first starts charging on a regular cadence, and Missed charges alerting when an expected charge does not arrive after a 5-day grace period — with the note that charges need at least 5 sightings before a merchant counts as recurring, and an Email alert to section with two recipients selected.](https://cdn.banksync.io/screenshots/enrichments/recurring-form.555796efeb53cd08.png "All three watch rules on: price increase, new subscriptions, and missed charges with a grace period.")

Detection begins with the next sync. Expect the first alerts only after your regular charges have each been seen five times — on monthly bills, a deep backfill gets you there immediately, since historical charges build the series just as well as new ones.

## Related guides

- [Anomaly Detector](/docs/enrichments/anomaly-detection): reads the same merchant history to spot unusual one-off activity; known-recurring merchants are exempt from its spike check.
- [Feed Monitor](/docs/enrichments/feed-monitor): rules out a stalled feed when a missed-charge alert lands.
- [Budgets](/docs/enrichments/budgets): threshold alerts on totals rather than per-merchant series.
- [Alert enrichments](/docs/enrichments/alerts): the shared delivery channels (email, Slack, webhook).
