🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Gmail + Slack renewal reminders, logged in Sheets

Lisa Granqvist Partner Workflow Automation Expert

Renewals usually don’t fail because your service got worse. They fail because the reminder didn’t happen, the follow-up got buried, or the “contract end date” lived in someone’s head instead of a system.

Account managers feel this on chaotic Mondays. Agency owners notice it when cash flow gets weird. And operations leads get stuck building spreadsheets to patch the gaps. This renewal reminders automation gives you consistent outreach without the daily scramble.

This n8n workflow checks GoHighLevel every morning, emails the right clients via Gmail, pings the right people in Slack, and logs everything in Google Sheets. You’ll see exactly how it works, what you need, and the common mistakes to avoid.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Gmail + Slack renewal reminders, logged in Sheets

The Problem: Renewal follow-ups slip through the cracks

“We’ll remind them 10 days before renewal” sounds simple until you’re juggling 40 accounts, three channels of communication, and a CRM that’s only as accurate as the last person who updated it. One missed reminder turns into a rushed conversation, a discount you didn’t need to offer, or a churned client who “already decided.” The worst part is the mental load. You keep a quiet background anxiety running all month because you don’t trust the process. And when leadership asks, “How many renewals are at risk this week?” you’re stuck guessing.

It adds up fast. Here’s where it breaks down in real teams.

  • You end up checking GoHighLevel manually, then copying details into a doc or Slack message.
  • Reminder emails go out inconsistently, so some clients get proactive outreach and others get silence.
  • Internal ownership gets fuzzy when the account manager field is missing or outdated.
  • There’s no clean audit trail, which means you can’t prove follow-up happened (or improve it).

The Solution: Daily GoHighLevel renewal outreach with Gmail, Slack, and Sheets

This workflow runs on a daily schedule and does the boring but high-stakes work for you. Each morning at 9 AM, it pulls your contacts from GoHighLevel and checks that the key custom fields exist (specifically Contract End Date and Account Manager). Then it calculates which accounts are expiring soon, focuses only on the ones inside your reminder window (the template uses 10 days), and formats the details so messages don’t look like robotic CRM exports. From there, it sends a renewal reminder email through Gmail to the client, posts a Slack alert to keep the internal owner accountable, and finally records a summary into Google Sheets so you can track what happened over time. One run, one system of record.

The workflow starts with a schedule trigger at 9 AM. Next, it validates and filters GoHighLevel contacts down to “expiring within 10 days.” Finally, Gmail handles the client-facing message, Slack covers internal visibility, and Google Sheets becomes your lightweight audit log.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you manage 40 active clients and, in a typical week, about 8 are within 10 days of renewal. Manually, you might spend 5 minutes per client pulling details in GoHighLevel, then another 5 minutes writing an email and posting a Slack note. That’s roughly 80 minutes a week, and that’s on a “good week.” With this workflow, you spend maybe 10 minutes up front setting the message and Slack channel, then the daily run handles outreach while you skim the Google Sheets log when you want a quick status check.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • GoHighLevel to pull contacts and custom fields.
  • Gmail to send renewal reminder emails.
  • Slack to notify account owners and teams.
  • Google Sheets to log reminders and summaries.
  • Slack bot token (create it in Slack API apps).

Skill level: Beginner. You’ll connect accounts, paste in IDs (like a Slack channel), and test one run.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A daily schedule kicks it off. At 9 AM, n8n starts the run automatically, so renewals don’t depend on someone “remembering” before standup.

Contacts are pulled from GoHighLevel and validated. The workflow retrieves your CRM records, then checks that Contract End Date and Account Manager exist. If the fields are missing, you’ll know early instead of finding out after emails fail to send.

Expiry logic narrows the list to the accounts that matter today. A code step calculates days until expiry, then a filter confirms which contracts fall within your reminder window (10 days in the template). Only those clients move forward.

Emails, Slack alerts, and a log are produced in one run. Gmail sends the client-facing reminder, Slack posts internal details for follow-up, then a merged summary is recorded in Google Sheets for tracking and reporting.

You can easily modify the reminder window from 10 days to 7 (or 14) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Schedule Trigger

Set the daily schedule that starts the workflow and pulls contacts for renewal checks.

  1. Add the Daily Schedule Trigger node.
  2. Set Cron Expression to 0 9 * * * to run every day at 9:00 AM.
  3. Connect Daily Schedule Trigger to Retrieve GHL Contacts.

Step 2: Connect GoHighLevel and Validate Contact Data

Pull contacts from GoHighLevel and ensure they include custom fields before processing.

  1. Open Retrieve GHL Contacts and set Operation to getAll.
  2. Credential Required: Connect your highLevelOAuth2Api credentials in Retrieve GHL Contacts.
  3. Open Validate Custom Fields and set the condition Left Value to {{ $json.customFields }} with Operation notEmpty.
  4. Connect Retrieve GHL Contacts to Validate Custom Fields, then to Contract Expiry Filter Logic.

⚠️ Common Pitfall: If custom fields are missing or empty in GoHighLevel, Validate Custom Fields will stop those contacts from reaching the expiry logic.

Step 3: Set Up Contract Expiry Filtering

Filter contacts based on contract end date and enrich the data for notifications.

  1. Open Contract Expiry Filter Logic and replace [YOUR_ID] with your GoHighLevel custom field ID for contract end date.
  2. In the same code, replace the second [YOUR_ID] with your account manager custom field ID.
  3. Verify the filter range in the code is set to the next 10 days with if (daysUntilExpiry >= 0 && daysUntilExpiry <= 10).
  4. Open Confirm Expiring Soon and confirm the number condition uses {{ $json.daysUntilExpiry }} and Operation smallerEqual with Value2 10.
  5. Confirm the string condition uses {{ $json.contractEndDate }} with Operation isNotEmpty.

Keep contract dates stored as timestamps in GoHighLevel so the date parsing in Contract Expiry Filter Logic works correctly.

Step 4: Configure Notifications and Parallel Execution

Send a renewal email and post a Slack alert simultaneously for each expiring contact.

  1. In Dispatch Renewal Email, set Send To to {{ $json.email }}, Subject to Important: Your Contract Renewal is Coming Up, and paste the provided message template.
  2. Credential Required: Add Gmail credentials to Dispatch Renewal Email to send emails.
  3. In Post Slack Renewal Alert, set Select to channel and choose your renewals channel ID in Channel.
  4. Credential Required: Add Slack credentials to Post Slack Renewal Alert to post notifications.
  5. Ensure Confirm Expiring Soon outputs to both Dispatch Renewal Email and Post Slack Renewal Alert in parallel.
  6. Connect both outputs into Combine Notification Results with Mode combine and Combination Mode mergeByPosition.

⚠️ Common Pitfall: If the Slack channel ID in Post Slack Renewal Alert is left as [YOUR_ID], the message will fail to post.

Step 5: Record the Execution Summary to Google Sheets

Summarize the run and log the results to your tracking spreadsheet.

  1. Connect Combine Notification Results to Build Execution Summary.
  2. Review the Build Execution Summary code to ensure it returns summary, totalRemindersSent, timestamp, and message.
  3. In Record Summary to Sheets, set Operation to appendOrUpdate.
  4. Select your spreadsheet in Document and set Sheet Name to Sheet1.
  5. Credential Required: Add Google Sheets credentials to Record Summary to Sheets to write the summary.

Step 6: Test and Activate Your Workflow

Run a manual test to verify contacts are filtered and notifications are sent before enabling the schedule.

  1. Click Execute Workflow and confirm contacts pass through Validate Custom Fields and Confirm Expiring Soon.
  2. Verify a test contact receives the email from Dispatch Renewal Email and a message appears in Slack from Post Slack Renewal Alert.
  3. Check your spreadsheet to confirm Record Summary to Sheets appended a summary row.
  4. When successful, toggle the workflow Active to enable the daily schedule.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • GoHighLevel credentials can expire or need specific permissions. If things break, check your GoHighLevel app/API access and the n8n credential test first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this renewal reminders automation?

About 30 minutes if your GoHighLevel fields and accounts are ready.

Do I need coding skills to automate renewal reminders?

No. You’ll mostly connect accounts and paste in a Slack channel ID. The only “logic” you might edit is the number of days before expiry.

Is n8n free to use for this renewal reminders automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume.

Where can I host n8n to run this renewal reminders automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this renewal reminders automation workflow for a different reminder window?

Yes, and it’s the most common tweak. Change the expiry threshold in the “Contract Expiry Filter Logic” code step (the template uses 10 days), and the rest of the renewal reminders automation stays the same. You can also adjust the email copy in the Gmail step and route Slack alerts to different channels based on account manager.

Why is my GoHighLevel connection failing in this workflow?

Usually it’s expired credentials or missing API access to the Contacts endpoint. Reconnect the GoHighLevel credential in n8n, then confirm the account you’re using can read contacts and custom fields. If only some contacts fail, check that Contract End Date and Account Manager are actually present on those records. Rate limiting can also show up if you’re pulling a large contact list at once, so consider filtering earlier or running during quieter hours.

How many contacts can this renewal reminders automation handle?

A few thousand contacts is fine for most setups.

Is this renewal reminders automation better than using Zapier or Make?

Often, yes, if you care about reliability and logic. This renewal reminders automation has validation, filtering, merging results, and a summary log, which is where simpler tools can get clunky or expensive as you add branches. n8n also gives you a self-hosted option when execution limits become annoying. Zapier or Make can still be a decent choice for a basic “send one email” flow, but this is more than that. Talk to an automation expert if you want help picking the cleanest setup.

Once this is running, renewals stop being a “hope we remember” process and start acting like a system. The workflow handles the repetitive touches so you can spend your time on the conversations that actually save accounts.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal