Get an alert when a new subscription hits your bank account

By Jake Marsh5 min read
Direct answer: Run two checks on a schedule. An agent prompt compares this week's merchants with the prior 12 months and flags any it hasn't seen, which catches a first charge. A cron script saves the list from get_recurring_charges and prints new names, which catches a pattern at its second charge.

Why it takes two checks

get_recurring_charges groups charges by merchant and looks for a steady interval, so it needs at least two charges. By then you've paid twice. A check on the first charge is noisier, since a new restaurant looks the same as a new subscription at that point. Running both gets you an early hint and a firm signal a cycle later.

Catch the first charge

Save this prompt as a scheduled run:

Using BankBridge, list every charge from the last 7 days. For each merchant, check get_merchant_history over the 12 months before that. Report merchants with no earlier charge: name, amount, date and last four digits of the account. Mark the ones that look like a subscription or trial. If there are none, say so in one line. Nobody can answer questions during this run, so state any assumption and finish.

The steps for Claude, Claude Code, Hermes Agent, OpenClaw and cron are in scheduled money reviews. The agent judges what looks like a subscription from the merchant name, so expect a few wrong guesses in both directions.

Catch the second charge, no model needed

This script uses only curl, jq and standard shell tools. It keeps a list of every merchant it has seen, so a charge that drops out of the six-month window and comes back later won't alert twice. The first run saves the list and prints nothing. After that it prints only new names, and with cron's usual behavior, no output means no email.

Put your key from BankBridge settings in ~/.bankbridge/key, run chmod 600 on it, and save this as ~/.bankbridge/new-subscriptions.sh:

#!/bin/sh
# Prints merchants that newly show a recurring pattern. Silent when nothing changed.
set -eu
DIR="$HOME/.bankbridge"
SEEN="$DIR/seen-merchants.txt"
NOW="$DIR/now.txt"
KEY=$(cat "$DIR/key")
touch "$SEEN"

curl -sS --fail https://bankbridge.money/api/mcp \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_recurring_charges","arguments":{}}}' \
  | sed -n 's/^data: //p' \
  | jq -r '.result.structuredContent.recurring[] | "\(.merchant)\t\(.amount)\t\(.frequency)"' \
  | LC_ALL=C sort > "$NOW"

cut -f1 "$NOW" | LC_ALL=C sort -u > "$NOW.names"
LC_ALL=C sort -u "$SEEN" -o "$SEEN"
LC_ALL=C comm -13 "$SEEN" "$NOW.names" > "$NOW.new"
if [ -s "$SEEN" ] && [ -s "$NOW.new" ]; then
  echo "New recurring charges:"
  LC_ALL=C join -t "$(printf '\t')" "$NOW.new" "$NOW"
fi
LC_ALL=C sort -u "$SEEN" "$NOW.names" -o "$SEEN"

Schedule it with crontab, here every Monday at 8am:

MAILTO=you@example.com
0 8 * * 1 sh $HOME/.bankbridge/new-subscriptions.sh

To try it first, put bbk_demo in the key file. That key returns fictional accounts. Run the script once to save the list, delete one line from seen-merchants.txt and run it again. We did this with the demo gym membership and got:

New recurring charges:
Planet Fitness	49	monthly

That's demo data. Switch to your own key and delete the seen file before you rely on it, or the demo merchants will stay on the list.

What the alert misses

SituationWhat to do
An existing subscription raises its priceCheck for price increases
A merchant changes the name on its chargesIt looks new, so you'll get a false alert. Spot renamed charges
A yearly chargeThe default window is six months, so two charges won't fall inside it. Set start_date further back in the arguments, or rely on the first-charge prompt.
A subscription billed through Apple or GoogleYour bank shows the store's name, so a new app often looks like an old merchant. See your Apple charges
A charge that hasn't postedThe check reads what your bank reports, so it can lag the charge by a day or more.

For a one-time look at everything you're paying for, run a subscription audit first, then let the alert watch for what's new. BankBridge costs $5 a month or $50 a year per connected bank and is read-only, so cancelling stays with you. Connect a bank to start.

FAQ

Can my bank data tell me when a trial turns into a paid subscription?

Yes, once a charge posts. A trial with no charge leaves nothing in your bank data, so the first paid charge is the earliest signal. The agent prompt on this page flags that charge as a merchant with no earlier history.

Does the script send my bank data to an AI model?

No. It calls BankBridge directly with curl and compares two lists with standard shell tools. No model is involved. It saves merchant names to a file on your own machine, and BankBridge keeps no copy.

Why didn't get_recurring_charges show a charge I just got?

It needs at least two charges from a merchant, at a steady interval, to call it recurring. One charge can't show a pattern. Use the first-charge prompt for those.

How often should the alert run?

Weekly is enough for most people. Run it daily if you want to hear sooner. BankBridge pricing is per connected bank, with no charge per call.

BankBridge shows you your own account data. Nothing on this page is financial, tax or legal advice; check anything that matters with a qualified professional.

This guide shows how to work with your own account data using AI tools. It is general information, not financial, tax or investment advice. For decisions about your money, check with a qualified professional.