Send multi-stage SaaS renewal alerts from Google Sheets to Slack
Go to WorkflowDescription
Your automated SaaS contract renewal monitor that sends multi-stage Slack alerts 45, 30, 14, and 7 days before each contract expires.
Stop missing renewal deadlines and overpaying on auto-renewals. This workflow monitors your contract calendar in Google Sheets, sends progressive Slack notifications with manual research checklists, and tracks alert history to prevent duplicate notifications. You manage the vendors; it manages the reminders.
This is not a generic reminder bot. It is a production-ready procurement intelligence system designed to give finance and operations teams the advance notice needed to research alternatives, negotiate better terms, and avoid costly auto-renewals.
How the workflow works
The workflow executes in four stages:
1. TRIGGER & SCHEDULE
The workflow runs daily at 9:00 AM using a cron trigger (0 9 * * *). The schedule runs in your configured timezone (default: UTC). A single daily check scans your entire contract portfolio and identifies which renewals are entering their alert windows.
2. LOAD & VALIDATE
Using Google Sheets' native integration, the workflow reads your contract tracking spreadsheet (columns A-F: Contract Name, Vendor Name, Renewal Date, Annual Cost, Pricing URL, Status). A validation engine checks each row for:
Valid contract names (non-empty)
Proper ISO dates (YYYY-MM-DD format)
Positive costs (allows zero for free-tier contracts)
Valid HTTP/HTTPS URLs
Active status (skips Cancelled/Renewed contracts)
Invalid rows are silently filtered out to prevent workflow crashes from bad data.
3. MULTI-STAGE ALERT LOGIC
A Brain node calculates days-until-renewal using native JavaScript Date objects (no external dependencies). For each contract, it checks four alert windows:
45 days out:** 🟡 REMINDER — "Research Phase: Look for alternatives"
30 days out:** 🟠ATTENTION — "Quote Phase: Get competitor pricing"
14 days out:** 🔴 URGENT — "Decision Phase: Finalize negotiation"
7 days out:** 🚨 FINAL NOTICE — "Action Phase: Confirm or cancel"
Each window spans 5 days (daysUntil <= alert.days && daysUntil > alert.days - 5) to catch missed runs from weekends or server outages. The workflow only fires once per stage by checking if the Status column already contains that stage marker (e.g., alerted_45d).
Deduplication: A Set-based tracker prevents duplicate alerts if the same contract appears multiple times in your sheet.
4. NOTIFICATION & TRACKING
Success Path: When a contract enters an alert window:
Slack receives a formatted message with:
Urgency indicator (🟡/🟠/🔴/🚨)
Contract details (vendor, renewal date, annual cost)
ROI calculation (potential savings: 15-25% of contract value)
Manual research checklist (vendor pricing URL, competitor search terms)
Upgrade CTA with UTM tracking (utm_campaign = contract slug, utm_content = alert stage)
Google Sheets Status column updates to append the alert stage: "Active, alerted_45d"
Next day, the workflow knows this contract was already alerted and won't send duplicate messages
Empty Path: When no contracts are in alert windows, a daily summary message confirms the workflow ran successfully: "✅ Daily check complete. Reviewed 12 contracts. No renewals in alert windows."
Error Path: If Google Sheets/Slack APIs fail, an Error Trigger fires and sends a troubleshooting alert to the same Slack channel with specific fix instructions.
Benefits
Multi-Stage Progression:** Four strategic touchpoints (45d, 30d, 14d, 7d) give you time to research alternatives, get quotes, negotiate terms, and finalize decisions — not just a last-minute panic alert.
No Duplicate Spam:** Status column tracking ensures each contract only triggers once per stage, even if the workflow runs daily.
Catch-Up Logic:** 5-day alert windows prevent missed notifications if your n8n server is down for a weekend or you skip a few days.
ROI-Focused Messaging:** Every alert shows potential savings (15-25% of contract value) to justify the time spent on renewal research.
Freemium Conversion Funnel:** Built-in upgrade CTAs with UTM tracking measure which contracts drive the most premium conversions.
Production Error Handling:** Error Trigger workflow ensures you know immediately if credentials expire or APIs fail.
Target Audience
Finance/Ops Teams** at startups managing 5-50 SaaS contracts who want automated renewal reminders but are willing to do manual research.
Procurement Managers** who need advance notice to negotiate better terms and avoid auto-renewal price hikes.
CFOs/Controllers** looking to reduce SaaS spend by 15-25% through systematic renewal reviews.
Bootstrapped Founders** wearing multiple hats who can't afford dedicated procurement software but need basic contract monitoring.
Required APIs
Google Sheets OAuth2:** Read/write access to your contract tracking spreadsheet.
Scope required: https://www.googleapis.com/auth/spreadsheets
Slack API:** Post messages to your #contract-renewals channel.
Scopes required: chat:write, chat:write.public
Bot must be added to the channel before first run
Easy Customization
Alert Stages:** Modify the alertStages array in the Brain node to change days (e.g., 60d, 45d, 30d, 14d for longer lead times) or urgency labels.
Notification Channels:** Replace Slack nodes with Email (Gmail), Microsoft Teams, or Discord to match your team's communication stack.
Timezone:** Change Workflow Settings → Timezone from UTC to your local timezone (e.g., Europe/Helsinki, America/New_York) so 9 AM means 9 AM local time.
Schedule Frequency:** Modify cron expression in Schedule node to run twice daily (0 9,17 * * *) or weekly (0 9 * * 1) instead of daily.
Data Destination:** Swap Google Sheets for Airtable, Notion, or PostgreSQL by replacing the Sheets nodes while keeping the same logic flow.