Blog · · 4 min read

How to remind customers before their subscription or membership renews with n8n and AI

Step-by-step guide to having n8n check your subscriptions and memberships in Google Sheets every morning, spot the ones ending soon and use AI to draft a personalised renewal reminder.

In a gym, academy, club, small SaaS or any business with monthly or yearly dues you jot down the renewal date… and then forget it. The customer stops paying without anyone writing to them, or renews with a competitor because nobody offered to keep them on time.

In this guide you'll build an n8n workflow that checks your subscriptions in Google Sheets every morning, spots the ones ending in 14 or 3 days and uses AI to draft a renewal reminder in Gmail. You review the draft and send it.

What you're going to build

A five-step workflow that runs on its own every day:

  1. Daily trigger: a Schedule Trigger node runs at 09:20.
  2. Read subscriptions: a Google Sheets node reads your "Subscriptions" sheet.
  3. Date filter: a Code node keeps only rows that expire in 14 or 3 days and have not already been reminded at that stage.
  4. AI reminder: a Basic LLM Chain writes a warm email that names the plan, the end date and how to renew.
  5. Draft and log: Gmail creates the draft and Google Sheets records the stage in reminder_sent.

What you need

  • An n8n instance (cloud or installed free on your computer).
  • Google Sheets and Gmail connected in n8n.
  • An OpenAI or other AI API key, with a monthly spend limit set in the provider's dashboard.
  • A "Subscriptions" sheet with columns: customer, email, plan, amount, cycle (monthly or yearly), ends_on (YYYY-MM-DD), payment_link (optional), notes and reminder_sent (empty).

Step 1: prepare the subscriptions sheet

Keep ends_on in a consistent date format. Use clear plan names ("monthly dues", "annual membership", "Pro plan"). Put your Stripe, Lemon Squeezy or other checkout link in payment_link when you have one; leave it blank otherwise so the prompt won't invent one. Use notes for useful preferences ("prefers WhatsApp", "loyalty discount").

Step 2: trigger and read

Add a daily Schedule Trigger at 09:20 (check that the workflow timezone in Settings is correct for you). Connect it to Google Sheets → Get Row(s) on your "Subscriptions" sheet.

Step 3: filter what renews soon

Add a Code node (Run Once for All Items) with this code:

const today = new Date(); today.setHours(0, 0, 0, 0);
const out = [];
for (const i of $input.all()) {
  const c = i.json;
  if (!c.email || !c.ends_on) continue;
  const days = Math.round((new Date(c.ends_on) - today) / 86400000);
  let stage = null;
  if (days <= 3 && days >= 0) stage = '3';
  else if (days <= 14 && days > 3) stage = '14';
  if (!stage || String(c.reminder_sent) === stage) continue;
  out.push({ json: { ...c, days, stage } });
}
return out;

Each customer gets at most two reminders: one two weeks before and one in the last three days. If nothing is due, the workflow ends without calling the AI.

Step 4: draft the reminder with AI

Add a Basic LLM Chain with a small, cheap model (for example gpt-4o-mini) and this prompt:

You work at [BUSINESS NAME]. Write a short email to
{{ $json.customer }} reminding them that their {{ $json.plan }} subscription
(cycle {{ $json.cycle }}, amount {{ $json.amount }}) ends on {{ $json.ends_on }}
({{ $json.days }} days left).
Payment link (include it if present; if empty, do not invent one): {{ $json.payment_link }}
Notes: {{ $json.notes }}
- Warm, professional tone, max 6 sentences.
- Name the plan and date without aggressive pressure.
- If payment_link exists, invite them to renew in one click; otherwise ask them to reply to this email.
- Do not invent discounts, prices or terms that are not in the data.
Return only the email body.

The facts come from your sheet; the AI only sets the tone. If you bill by direct debit and never send a link, remove that part from the prompt.

Step 5: create the draft and mark the reminder

Connect a Gmail → Create Draft node with recipient {{ $('Code').item.json.email }}, subject Your {{ $('Code').item.json.plan }} renews soon and the AI text as the body. Drafts let you review before sending, just like contract renewal reminders or insurance and document expiry reminders.

Then a Google Sheets → Update Row node that looks up by email + plan and writes the stage into reminder_sent.

Once you trust the wording, you can switch Create Draft to Send.

How to test it

  1. Add a test row with your own email and an ends_on within 10 days.
  2. Run the workflow by hand and check that a draft appears and reminder_sent becomes 14.
  3. Run it again: no new draft should be created.
  4. Change the date to within 2 days and confirm the second reminder is prepared.

Cost and good practices

Start with ready-made templates

If you'd rather skip the basic n8n setup, download the WhatsApp agent for free or check out the AgentKiosk pack: 8 ready-to-import agents in English and Spanish, each with workflow, prompt and guide, ready to combine with these subscription reminders.