Monthly software subscription audit from Brex card spend

Each month we scan 13 months of card activity, refresh your Notion subscription register, and post renewals, price hikes and duplicate tools to Slack.

Agentic Task
BrexNotionSlack BotFinanceOperationsAI ReportsData SyncNotifications & Alerts
PromptCreate

On the first business day of every month at 8am, audit our recurring software spend in Brex and keep a living subscription register in Notion. Schedule this on a cron for the 1st, 2nd and 3rd of each month at 8am, and exit immediately unless today is the first weekday of the month, so the audit runs exactly once a month even when the 1st falls on a weekend.

Start by pulling the trailing 13 months of card activity using the Brex "List primary card transactions" and "List expenses" operations, paging through every result until the cursor is exhausted. Thirteen months is deliberate: it guarantees that any annual renewal appears in the window at least once. Note that Brex returns money as integer minor units plus a currency code, so an amount of 1000 with currency USD means $10.00.

Attribute every charge to a person and a vendor. Use "List cards" to map each card to its owning user, and "List vendors" to match merchants against vendors we already know. Brex has no list-users operation, so owner attribution must be built from card ownership plus the cardholder fields on transactions and expenses. Do not write a step that assumes a Brex user directory exists.

Group merchants into recurring subscriptions. Treat a merchant as a subscription only when the charge amount is consistent and the timing follows a cadence: roughly every 28 to 31 days for monthly, or roughly every 12 months for annual. Concentrate recurring detection on the $5 to $500 per month band, and separately surface larger one-time charges in the $100 to $5,000 range as likely annual billings worth inspecting. Ignore genuine one-off purchases, and ignore categories that are almost never subscriptions such as travel, meals and ad spend unless the cadence is unmistakable.

Compare that inventory against our existing Notion subscription register. Locate the register with "Search by Title" and read its current rows with "Query a Data Source". If no register exists yet, bootstrap one with "Create a Database" using columns for tool, owner, monthly cost, annualized cost, billing cadence, first-seen date, estimated next renewal, status and notes, then treat this first run as the baseline snapshot. For each newly discovered tool, use "Create a Page" to add a row carrying its owner, monthly cost, annualized cost, billing cadence, first-seen date and estimated next renewal date. When a tool already in the register has changed, use "Update a Page" to refresh its cost and next renewal rather than creating a duplicate row.

Flag the three things finance actually cares about. First, price increases: the same merchant now billing more than the prior cycle, reported with the old amount, the new amount and the percentage change. Second, likely duplicate or overlapping tools, where two merchants serve the same function, for example two project trackers or two e-signature tools. Third, zombie subscriptions still charging on a card whose owner is departed or inactive, which you infer from card status and the absence of any other recent activity for that cardholder rather than from a user directory lookup.

Finish by posting a summary to the finance channel with the Slack Bot "Send a Message" operation. Lead with total annualized software spend, then the month-over-month delta, then any renewal landing in the next 45 days so there is still time to cancel or renegotiate, and close with the price increases, duplicates and zombie subscriptions, naming the owner for each. Expose the 45-day renewal window as a configurable knob, since 30 days suits the tool owner while 90 to 120 days suits procurement. This workflow reports only: it must never cancel, pause or modify a subscription, a card or a vendor record.

What does this prompt do?

  • Reviews 13 months of company card activity and picks out the charges that repeat on a steady amount and rhythm, so once-a-year renewals get caught too
  • Keeps a living subscription register in Notion with an owner, monthly and annual cost, billing cadence, first-seen date and estimated next renewal for every tool
  • Flags the three things finance actually cares about: a vendor that quietly raised its price, two tools doing the same job, and subscriptions still billing on a card belonging to someone who left
  • Posts a Slack summary that leads with total annual software spend, the change since last month, and anything renewing in the next 45 days

What do I need to use this?

  • A Brex account, connected by someone with admin or bookkeeper access so the audit can see company-wide card spend rather than just their own
  • A Notion workspace with the page holding your subscription register shared with the connection. If you do not have a register yet, the first run builds one for you
  • A Slack workspace and the finance channel where you want the monthly summary posted

How can I customize it?

  • Change the schedule or the lookback window. Thirteen months is the default so that annual renewals show up at least once
  • Move the 45-day renewal warning in or out. Thirty days is usually enough for the tool owner, while 90 to 120 days gives procurement room to negotiate
  • Adjust the spend bands that count as a subscription, or keep a permanent ignore list for merchants like travel, meals and ad spend that are never subscriptions

FAQs

What happens on the first run if I do not have a subscription register yet?
It builds one for you. On the first run it creates the register in Notion and fills it with every recurring tool it can find, so treat that month as your baseline snapshot. From then on it only adds tools that are genuinely new and updates the ones whose cost or renewal date has changed.
Will it catch subscriptions that only bill once a year?
Yes, and that is exactly why it looks back 13 months instead of the usual 90 days. A full year plus one month guarantees every annual renewal appears in the data at least once, so a big yearly charge is recognised as a subscription rather than dismissed as a one-off purchase.
Does it cancel or pause anything automatically?
No. It only reports. Every finding lands in your Notion register and your Slack summary with the owner named, and a human decides whether to keep, renegotiate or cancel. It never touches a card or a subscription.
What if several people expense the same tool?
It groups charges by merchant first, then works out who is paying. If three people are each expensing the same tool you will see it as one entry with the duplicate cardholders called out, which is often the first sign you are paying for several overlapping seats instead of one team plan.
Will one-off purchases clutter up the register?
A merchant only counts as a subscription when both the amount and the timing repeat on a recognisable cadence, monthly or annual. A single conference ticket or a one-time hardware order does not match that pattern and gets left out, though unusually large one-time charges are still surfaced in case they are a disguised annual renewal.

Related templates

Share of voice dashboard for your brand and competitors

See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.

GDELT
Notion
Slack Bot
App
Approval war room for every social post awaiting sign-off

One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.

Hootsuite
Slack Bot
App
Turn champion job changes into new pipeline in Attio

Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.

Boomerang
Attio
Slack Bot
Agentic Task
Collect social post requests and schedule them in Hootsuite

Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.

Hootsuite
Slack Bot
General Input Database
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App
Smart home entity health cockpit for Home Assistant

Open one screen to find every unavailable, stale, or low-battery device in your smart home, see which hub is really at fault, and clear out the dead entries in bulk.

Home Assistant
Notion
App

Find the software you forgot you were paying for.

Run a monthly audit of your card spend that catches every recurring charge, price increase and duplicate tool before it quietly renews.