Downloads
Download the n8n workflow (JSON)
renewal-reminders-amc-n8n.json · n8n workflow · 19 steps · starts with Every morning 9 AM · uses Google Sheets, Anthropic, Slack, WhatsApp, Gmail · 25 KB
Import into n8n: Create Workflow, then the menu, then Import from File.
How to import it into n8n
- In n8n, create a new workflow.
- Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
- Open each node with a warning and connect your own account: the file carries no passwords or keys.
- Run it once with Test workflow, check the result, then switch it to Active.
What this workflow does
Every morning at 9 it reads all your AMCs, subscriptions and contracts from one Google Sheet and works out the days left on each. Contracts at 30, 7 or 1 day get a reminder written by Claude from your plan details: what renewal includes, the price and the pay link. The day's whole list comes to Slack first. One Approve sends a WhatsApp template and an email to each customer, and the sheet records which reminder went out so nobody gets the same one twice.
Who it is for
AC, RO, CCTV and lift service companies with AMCs, IT vendors with annual support contracts, gyms, software resellers and insurance agents. Anyone whose renewals live in an Excel file or a diary.
What you need
- An n8n account (Cloud or self-hosted)
- A Google Sheet with your contracts and renewal plans
- An Anthropic API key for Claude
- A WhatsApp Business Cloud API number with one approved utility template
- Gmail and Slack
The workflow, step by step
Step 1 · Every end date, checked at 9 AM
Every morning 9 AM starts the run. Get contracts reads the Contracts tab and Get renewal plans reads the Plans tab (price, inclusions, pay link per service). Work out days left parses each end date, skips Renewed and Cancelled rows and gives each contract a stage: 30 days, 7 days or 1 day. Due for a reminder? keeps only contracts whose stage is set and whose Last reminder is not already that stage. This is the guard that stops repeats.
Step 2 · Claude writes each reminder
Write renewal message asks Claude for an email subject, an email body and one WhatsApp line, using only your price, inclusions and pay link. The tone changes by stage. Reminder format keeps the output to those three fields. Build today's list joins Claude's text to each contract and sorts the list with 1-day reminders on top.
Step 3 · You approve the list in one tap
Approve today's reminders posts the full list in Slack with Approve and Reject. Approved? lets the run continue only on Approve. If nobody taps in 8 hours, nothing goes out and tomorrow's run picks the same contracts up again.
Step 4 · WhatsApp and email go out
One row per contract splits the list back into contracts and Loop over contracts takes them one at a time. Send WhatsApp reminder sends the amc_renewal_reminder template with six variables. Has email? sends Send email reminder only when you have an address. Pause 1 second keeps sends gentle.
Step 5 · Never the same reminder twice
Mark reminder sent writes the stage and today's date to Last reminder and Last reminder on, matched on Contract ID. If WhatsApp fails, Reminder failed alert tells you in Slack who to call, and the loop carries on.
Setup
- Import the JSON into n8n.
- Create the Sheet:
Contracts(Contract ID, Customer, Phone, Email, Service, End date, Amount, Status, Last reminder, Last reminder on) andPlans(Service, Renewal price, Includes, Pay link). Put the sheet ID in all Sheets nodes. - In Meta Business Manager, create the utility template
amc_renewal_reminderwith six body variables and wait for approval. Add your phone number ID in Send WhatsApp reminder. - Connect Anthropic, Slack, Gmail and WhatsApp. Change "Verma Cool Care" in Write renewal message to your business name.
- Add a test contract ending tomorrow with your own number, run the workflow, approve in Slack and check the WhatsApp, email and sheet.
How to customise
- Different stages: edit the stage line in Work out days left, for example 60, 15 and 3 days for annual software.
- Pay links: create Razorpay payment links per plan and paste them in the
Planstab, or generate one per customer with an HTTP Request to the Razorpay Payment Links API before the WhatsApp send. - Owner reminder only: delete the WhatsApp and email nodes and keep the Slack list as a daily "call these customers" list.
- After renewal: set Status to Renewed and update End date. The next cycle starts by itself.
Guardrails
- No customer gets anything until you approve the day's list.
- Claude uses only the prices and inclusions in your
Planstab. - Each stage is sent once per contract, recorded in the sheet.
Troubleshooting
- Nothing is due: check End date is a real date (YYYY-MM-DD or DD/MM/YYYY) and Status is not Renewed.
- Template rejected or failing: variables cannot contain line breaks; the workflow strips them. The variable count must match the template exactly.
- Phone errors: numbers must include the country code, like 9198XXXXXXXX, with no + or spaces.
- Same reminder again:
Last remindermust be written back; check Mark reminder sent matches on the Contract ID column.
Want the members-only resources too?
A free account unlocks them all, including the ones shared in DMs.

