Weekly SaaS subscription audit from your Gmail receipts

By General Input

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.

Integrations

  • Gmail
  • General Input Database
  • Slack

Type

Agentic Task

Categories

  • Finance
  • Personal Productivity

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredA brand asset library your marketing team actually searchesLiveKit live operations console for room moderationChat quality review board for LiveChat support leadsCompetitor LinkedIn ad watchlist with a permanent archiveLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedIn