Weekly SaaS subscription audit from your Gmail receipts

Every Monday morning, scan last week's Gmail receipts, keep a running ledger of every SaaS subscription, and get a Slack digest of new charges, price hikes, and upcoming renewals.

Agentic Task
GmailGeneral Input DatabaseSlackFinancePersonal ProductivityAI ReportsNotifications & AlertsDaily Digests
PromptCreate

Every Monday at 7am ET on a cron trigger, run an agent that audits my SaaS spend by turning my Gmail receipts into a running subscription ledger in my General Input Database, then posts a digest to Slack.

Step 1: Scan Gmail. Use Gmail List Messages with a search query like "receipt OR invoice OR subscription OR renewed OR \"thank you for your payment\"" scoped to the past seven days (newer_than:7d). For each message id, call Gmail Get a Message with full detail to pull the subject, sender, and body. Parse vendor name, charge amount, currency, charge date, and billing cadence (monthly, annual, quarterly) from each receipt. Skip anything that is clearly not a SaaS billing email (shipping notifications, marketing, personal Venmo, etc.).

Step 2: Upsert into the General Input Database. On first run, create a subscriptions table if it does not exist with columns: vendor TEXT, cadence TEXT, last_charge_amount REAL, currency TEXT, last_charge_date TEXT, first_seen_at TEXT, next_renewal_estimate TEXT, previous_charge_amount REAL. The primary key is (vendor, cadence) so the same vendor on a monthly plan is one row. For each parsed receipt, run Execute SQL: if (vendor, cadence) exists, update last_charge_date, set previous_charge_amount = old last_charge_amount, update last_charge_amount to the new value, and recompute next_renewal_estimate from the cadence. If it does not exist, insert a new row with first_seen_at = today.

Step 3: Compute the weekly numbers with Execute SQL. Total monthly run-rate spend (sum monthly cadence rows + annual cadence rows divided by 12 + quarterly divided by 3). New vendors where first_seen_at is within the last 7 days. Price increases where last_charge_amount > previous_charge_amount and previous_charge_amount is not null. Upcoming renewals where next_renewal_estimate is within the next 14 days, with a cancel-by date one day before the renewal.

Step 4: Post one Slack message with Send a Message to my chosen channel. Use four clearly labeled sections: Total monthly run-rate (one big number), New subscriptions this week (vendor + amount + cadence), Price increases (vendor + old amount to new amount), and Upcoming renewals in the next 14 days (vendor + renewal date + cancel-by date + amount). Keep it scannable, no walls of text. If a section is empty say "none this week" so I know it ran.

The database is the key piece: it turns one-shot receipt parsing into a persistent ledger so the agent can detect new vendors and price hikes across runs instead of rescanning my whole mailbox every week. Ask me which Slack channel to post in and which Gmail account to scan during setup.

Additional information

What does this prompt do?
  • Scans last week's Gmail for receipts, invoices, and subscription confirmations and pulls vendor, amount, charge date, and billing cadence from each one.
  • Keeps a running subscriptions ledger in your own database so the same vendor is updated each time it bills instead of being logged twice.
  • Compares each new charge to what you paid last time and flags any price increases automatically.
  • Sends one Monday Slack digest with your total monthly run-rate, brand-new subscriptions this week, price hikes, and every renewal coming up in the next 14 days with a cancel-by date.
What do I need to use this?
  • A Gmail account that receives your billing receipts and subscription confirmations.
  • A Slack workspace and a channel where you want the Monday digest posted.
  • A General Input database to act as your subscription ledger (the workflow can create one for you on first run).
How can I customize it?
  • Change the schedule from Monday 7am ET to any day or time, or run it daily for a tighter signal.
  • Pick which Slack channel or DM gets the digest (a private channel is a good default for spend data).
  • Tune the renewal lookahead window (the default is 14 days) or the search terms used to spot receipts in Gmail.

Frequently asked questions

How is this different from a spend management tool like Zluri or Spendesk?
Those tools usually require corporate cards, SSO logs, or admin access to billing portals. This runs entirely off the receipts that already land in your Gmail and keeps the ledger in a database you own, so there is no extra dashboard to log into and no card-on-file requirement.
Will it work if I get receipts in more than one inbox?
Connect each Gmail account separately and the workflow can scan all of them. The shared database deduplicates by vendor, so a charge in either inbox lands as one row.
What happens the first time it runs?
It looks at the last seven days of receipts and seeds your subscriptions table. The Monday digest will show every vendor it found as new. From the second run onward, only genuinely new vendors show up under the new subscriptions section.
How does it know when a price went up?
Each row in your ledger stores the last charge amount for that vendor. When a new receipt arrives for the same vendor and the new amount is higher, it gets flagged in the digest with the old and new prices side by side.
Can it email me instead of posting to Slack?
Yes. Swap the Slack step for a Gmail send and the same digest will arrive in your inbox each Monday.

Stop letting silent SaaS renewals drain your card.

Connect Gmail and Slack once, and every Monday you will know exactly what you are paying for, what just went up, and what to cancel this week.