Track SaaS Renewals Automatically: A Step-by-Step n8n Workflow for Airtable and Slack
The Problem: SaaS Sprawl and Surprise Renewals
As your company grows, so does your list of SaaS subscriptions. From project management tools to marketing platforms, each new subscription adds a recurring cost and a renewal date to track. Without a system, it’s easy to lose control. You end up paying for unused licenses, missing opportunities to negotiate better terms, or getting hit with unexpected auto-renewals for expensive annual contracts.
Manually tracking these subscriptions in a spreadsheet is a common first step, but it’s reactive and prone to human error. Someone has to remember to check the sheet, calculate renewal dates, and notify the right people. This process is exactly the kind of repetitive, high-value task that automation was built for.
This guide will walk you through building a proactive, automated SaaS renewal alert system using n8n, Airtable, and Slack. This workflow will automatically check your subscription list, identify upcoming renewals, and send a notification to a designated Slack channel, giving your team ample time to act.
Why Automate SaaS Subscription Tracking?
Automating this process provides immediate, tangible benefits:
- Cost Control: Get ahead of auto-renewals for tools you no longer need.
- Better Budgeting: Proactively see what expenses are coming up in the next 30, 60, or 90 days.
- Improved Security: A central, up-to-date inventory helps you deprovision accounts when an employee leaves.
- Operational Efficiency: Free up your finance and IT teams from manual, repetitive tracking and follow-ups.
Prerequisites: Setting Up Your Airtable Tracker
Before building the workflow, you need a centralized place to store your subscription data. Airtable is perfect for this, but a Google Sheet works just as well. Create a new Airtable base with the following fields:
-
Tool Name(Single line text): The name of the software (e.g., Figma, Asana). -
Owner(Single line text or Collaborator): The team or individual responsible for the tool. -
Cost(Currency): The cost per billing cycle. -
Billing Cycle(Single select): Options like 'Monthly' and 'Annually'. -
Renewal Date(Date): The next date the subscription will renew. -
Last Alert Sent(Date): This crucial field will store the date we last sent a notification, preventing duplicate alerts.
Populate this base with a few of your current SaaS subscriptions to have data to test with.
Building the n8n Workflow: Step-by-Step
This workflow will run on a schedule, fetch all subscriptions from Airtable, find the ones renewing soon, and send a customized alert to Slack.
Step 1: Trigger the Workflow on a Schedule
Every workflow starts with a trigger. Since we want this to run automatically, the Schedule Trigger node is the perfect choice. Configure it to run once a day, early in the morning.
Step 2: Fetch Subscription Data from Airtable
Next, add the Airtable node. Configure it with your Airtable credentials.
- Operation: List
- Base ID: Select your SaaS Tracker base.
- Table ID: Select the table containing your subscriptions.
When you run this node, it will pull all the records from your Airtable base into the n8n workflow.
Step 3: Filter for Upcoming Renewals
This is where the core logic lives. We only want to act on subscriptions that are renewing soon and for which we haven't already sent a recent alert. Add an IF node after the Airtable node.
Set up two conditions:
-
Condition 1 (Renewal Date): Check if the
Renewal Dateis within a specific timeframe. To find renewals in the next 30 days, you can use an expression. Set the Value 1 to{{ $json.fields['Renewal Date'] }}. Set the Operation toDate & Time->is before. For Value 2, use an expression to calculate the date 30 days from now:{{ $now.plus({ days: 30 }) }}. -
Condition 2 (Last Alert): Check if an alert has already been sent recently. Add another condition and set Value 1 to
{{ $json.fields['Last Alert Sent'] }}. Set the Operation toDate & Time->is before. For Value 2, use an expression to check if the last alert was more than a few weeks ago, for example:{{ $now.minus({ weeks: 3 }) }}. This ensures that even if a renewal is within the 30-day window, you aren't sending an alert for it every single day.
This IF node will now only pass items that are renewing soon and haven't been recently flagged.
Step 4: Format the Slack Alert
Before sending the alert, it's good practice to create a clean, readable message. Add a Set node connected to the true output of the IF node.
Create a new value named slackMessage. Use an expression to combine data from the Airtable node into a helpful message:
`SaaS Renewal Alert :bell:
Tool: {{ $json.fields['Tool Name'] }} Renewal Date: {{ new Date($json.fields['Renewal Date']).toLocaleDateString() }} Cost: ${{ $json.fields['Cost'] }} ({{ $json.fields['Billing Cycle'] }}) Owner: {{ $json.fields['Owner'] }}
Please review and decide whether to renew or cancel.`
Step 5: Send the Notification to Slack
Add a Slack node. Configure it with your credentials and set the following:
- Channel: Select the channel where alerts should be posted (e.g.,
#finops-alertsor#it-notifications). - Text: Use an expression to insert the message from the previous step:
{{ $json.slackMessage }}.
Step 6: Update the Airtable Record
This final step is critical to prevent spam. After a notification is sent, we need to update the Last Alert Sent field in Airtable. Add another Airtable node after the Slack node.
- Operation: Update
- Base ID: Select your SaaS Tracker base.
- Table ID: Select your subscriptions table.
- Record ID: Pass the ID of the record being processed. Use the expression
{{ $json.id }}. - Fields > Update: Add the
Last Alert Sentfield and use the expression{{ $now }}to set its value to the current date and time.
Now, the workflow will not send another alert for this same record until the date condition in the IF node is met again (e.g., a few weeks later).
Example n8n Workflow (Visualized)
Your final workflow should look like this:
Schedule Trigger → Airtable (List) → IF (Check Dates) → Set (Format Message) → Slack (Send Message) → Airtable (Update)
Each node plays a specific role:
-
Schedule Trigger: Kicks off the process daily.
-
Airtable (List): Fetches the full list of SaaS subscriptions.
-
IF: Acts as a gatekeeper, only allowing records that need attention to pass through.
-
Set: Prepares a clean, human-readable message.
-
Slack: Pushes the alert to the right team.
-
Airtable (Update): Marks the record as 'notified' to prevent duplicate alerts.
Taking It Further: Advanced Tips
Once you have the basic workflow running, you can easily extend it:
- Tiered Alerts: Add multiple IF nodes to create different alert windows. For example, send a 60-day notice for annual contracts over $5,000 and a 14-day notice for smaller monthly subscriptions.
- Dynamic Tagging: Use the Owner's email from Airtable to find their Slack User ID and tag them directly in the alert for immediate accountability.
- Aggregate Reports: Add a step before the alerts to calculate the total cost of all subscriptions renewing in the next month and send a summary report to a management channel.
- Google Sheets Integration: If you use Google Sheets instead of Airtable, simply replace the Airtable nodes with Google Sheets nodes. The core logic of filtering by date and updating a 'last notified' column remains exactly the same.
Conclusion
By connecting a simple database like Airtable with the power of n8n, you can build a robust, automated SaaS management system. This workflow eliminates the mental overhead of manual tracking, prevents costly surprise renewals, and gives your organization better control over its software stack. Start with this template and customize it to fit your team's exact needs.
Enjoyed this article?
Share it with others who might find it useful