Telegram + Google Sheets: never miss renewals
Subscription renewals have a nasty habit of showing up at the worst time. One missed date turns into a surprise charge, an awkward “why is this on the card?” moment, and a scramble to cancel something you did not even want anymore.
This hits marketing leads managing tool sprawl, but small business owners and agency ops feel it too. With Telegram renewals automation, you get a simple system that checks your sheet every morning and nudges you before money leaves your account.
You will see how the workflow tracks subscriptions in Google Sheets, sends Telegram reminders, and even lets you update records by chatting with a bot. No more “I’ll remember.”
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Telegram + Google Sheets: never miss renewals
flowchart LR
subgraph sg0["Telegram Message Received Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n1@{ icon: "mdi:memory", form: "rounded", label: "Window Buffer Memory", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Response", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Telegram Response"]
n7@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet in Googl..", pos: "b", h: 48 }
n8@{ icon: "mdi:wrench", form: "rounded", label: "Calculator", pos: "b", h: 48 }
n9@{ icon: "mdi:wrench", form: "rounded", label: "SerpAPI", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Smart Bill Manager", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Append or update row in shee..", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram Message Received"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send a chat action"]
n9 -.-> n14
n8 -.-> n14
n2 --> n3
n0 -.-> n14
n14 --> n2
n1 -.-> n14
n16 --> n14
n16 --> n17
n7 -.-> n14
n15 -.-> n14
end
subgraph sg1["Daily 8AM Check Flow"]
direction LR
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Daily 8AM Check", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Read Subscriptions", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Any Subscriptions Due?", pos: "b", h: 48 }
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Telegram Response1"]
n11@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Message a model", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n13 --> n12
n4 --> n5
n12 --> n10
n5 --> n6
n6 --> n13
n11 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n16,n4,n11 trigger
class n14,n12 ai
class n0 aiModel
class n8,n9 ai
class n1 ai
class n6 decision
class n7,n15,n5 database
classDef customIcon fill:none,stroke:none
class n3,n16,n17,n10 customIcon
The Problem: Subscription renewals get missed (and it costs you)
Most teams track subscriptions in the messiest way possible: a few receipts in email, a card statement, maybe a spreadsheet that was “temporary” six months ago. Then renewals arrive. Somebody pays for another month of a tool no one uses, or worse, a critical service lapses because the card changed and nobody noticed. The real cost isn’t just the charge. It’s the mental load of constantly remembering dates, chasing invoices, and asking “who owns this?” when finance flags it.
It adds up fast. Here’s where it breaks down in real life:
- You spend about 30 minutes hunting renewal dates every time budgeting comes up.
- Manual reminders live in someone’s calendar, so coverage disappears when that person is out.
- Sheet updates happen late (or never), which means your “monthly tools cost” is always a guess.
- When a renewal is missed, the cleanup takes longer than the tracking ever should have.
The Solution: Daily Google Sheets checks + Telegram reminders (with chat-based updates)
This n8n workflow turns your Google Sheet into a living subscription system, with Telegram doing the nagging for you. Every day at 8:00 AM, it pulls your subscription list from Google Sheets, checks what’s coming due, formats the key details (service name, amount, due date, owner, notes), and sends a clean reminder message in Telegram. On top of that, it handles inbound Telegram messages so you can add, update, or look up subscription info by typing normally. The AI layer (OpenAI model + an agent with short-term memory) translates your message into a structured update, then upserts the right row back into Google Sheets.
The workflow starts with a morning schedule trigger that scans your sheet automatically. When something is due soon, it compiles the relevant rows and sends Telegram alerts. If you message the bot (“add Canva renewal on the 3rd, $15, marketing card”), it interprets the request and updates the sheet without you opening a tab.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you manage 25 active subscriptions. Manually, even a quick weekly check can take about 10 minutes per subscription to confirm dates, owners, and amounts, which is roughly 4 hours a week once you include context switching. With this workflow, the daily scan and reminder run in under a minute, and updates happen in a single Telegram message that takes maybe 30 seconds. That’s how teams get back around 5 hours weekly, without “getting better at spreadsheets.”
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your subscription database.
- Telegram bot to send reminders and accept commands.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect accounts, paste a few credentials, and test with real Telegram messages.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A daily schedule kicks things off. At 8:00 AM, n8n runs automatically and pulls your subscription rows from Google Sheets. You can also run it manually if you’re testing.
Upcoming renewals get identified. An “upcoming dues” check filters the list down to the subscriptions that need attention soon, then compiles those rows into a message-friendly payload.
AI helps with human messages. If you DM the bot to add or change a subscription, the AI agent uses an OpenAI chat model plus session memory to understand intent, calculate or validate fields when needed, and prepare a clean update.
Telegram gets the final output. For reminders, it sends an alert to Telegram. For management requests, it replies with confirmation and writes the upsert back into Google Sheets so your source of truth stays accurate.
You can easily modify reminder timing to match your billing cycle 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 trigger that checks the subscription sheet for upcoming dues and builds the reminder message.
- Add the Morning Schedule Trigger node.
- Set the schedule rule to the cron expression
0 8 * * *to run at 8:00 AM daily. - Connect Morning Schedule Trigger to Retrieve Subscription Sheet.
- Optionally keep Manual Start Trigger connected to Retrieve Subscription Sheet for testing.
Step 2: Connect Google Sheets
Configure all Google Sheets nodes that read, look up, and update subscription data.
- Open Retrieve Subscription Sheet and select the spreadsheet
[YOUR_ID]and sheetDashboard. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Retrieve Subscription Sheet.
- Open Lookup Sheet Rows and confirm the filters use the AI expressions, such as
{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('values0_Value', ``, 'string') }}for the Bill Name lookup. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Lookup Sheet Rows.
- Open Upsert Sheet Records and confirm Operation is set to
appendOrUpdate, spreadsheet[YOUR_ID], and sheetRaw Data. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Upsert Sheet Records.
[YOUR_ID] placeholders with your actual Google Sheet document ID and the correct sheet names, or the workflow will return empty data.Step 3: Build the Due-Date Filtering and Aggregation Path
Filter rows that are due soon, aggregate them, and generate a structured prompt for Telegram alerts.
- In Check Upcoming Dues, set the condition to Due In ≤
3using{{ $('Retrieve Subscription Sheet').item.json['Due In'] }}. - Connect Retrieve Subscription Sheet → Check Upcoming Dues → Compile Items.
- In Compile Items, set Aggregate to
aggregateAllItemData. - Connect Compile Items to Compose Model Prompt.
- In Compose Model Prompt, keep JSON Output enabled and ensure the user message content uses
{{ JSON.stringify($json.data) }}. - Credential Required: Connect your openAiApi credentials in Compose Model Prompt.
Step 4: Configure the Telegram Alert Output
Send the AI-generated reminder message to Telegram when dues are coming soon.
- Connect Compose Model Prompt to Send Telegram Alert.
- In Send Telegram Alert, set Text to
{{ $json.message.content.message }}. - Set Chat ID to your recipient or group ID using
{{ '[YOUR_ID]' }}. - Credential Required: Connect your telegramApi credentials in Send Telegram Alert.
[YOUR_ID] with the correct Telegram chat ID, or the alert will fail.Step 5: Set Up the Telegram Conversation Flow
Handle incoming Telegram messages and reply with structured subscription management responses.
- Add Telegram Incoming Message and configure it to listen for message updates.
- Credential Required: Connect your telegramApi credentials in Telegram Incoming Message.
- Confirm the parallel execution: Telegram Incoming Message outputs to both Subscription AI Manager and Telegram Typing Action in parallel.
- In Telegram Typing Action, set Operation to
sendChatActionand Chat ID to{{ $('Telegram Incoming Message').item.json.message.chat.id }}. - Credential Required: Connect your telegramApi credentials in Telegram Typing Action.
Step 6: Set Up the AI Orchestration and Tools
Configure the AI agent, language model, memory, and tools that interpret messages and update Google Sheets.
- Open Subscription AI Manager and set Text to
{{ $json.message.text }}with Prompt Type set todefine. - Ensure AI Chat Engine is connected as the language model for Subscription AI Manager and uses the model
gpt-4.1-nano. - Credential Required: Connect your openAiApi credentials in AI Chat Engine (credentials are added to the parent language model node, not the agent).
- Attach Session Memory Window to Subscription AI Manager and keep the session key
{{ $('Telegram Incoming Message').item.json.message.from.id }}for user-specific memory. - Connect the AI tools: Lookup Sheet Rows, Upsert Sheet Records, Math Utility, and Search Web Tool as AI tools for Subscription AI Manager.
- Credential Required: Connect your serpApi credentials in Search Web Tool (tool credentials are configured on the tool node, but used by the parent agent).
Step 7: Configure the Telegram Reply Output
Shape the AI response and send it back to the user in Telegram.
- Connect Subscription AI Manager to Shape Reply Payload.
- In Shape Reply Payload, set the response field to
{{ $json.output }}. - Connect Shape Reply Payload to Dispatch Telegram Reply.
- In Dispatch Telegram Reply, set Text to
{{ $json.response }}and Chat ID to{{ $('Telegram Incoming Message').item.json.message.chat.id }}. - Credential Required: Connect your telegramApi credentials in Dispatch Telegram Reply.
Step 8: Test and Activate Your Workflow
Validate that both the scheduled reminders and the Telegram conversation flow work end-to-end.
- Click Execute Workflow and use Manual Start Trigger to simulate a scheduled run.
- Confirm that Retrieve Subscription Sheet returns rows, Check Upcoming Dues filters items, and Send Telegram Alert posts a formatted message.
- Send a message to your bot to trigger Telegram Incoming Message and verify that Telegram Typing Action shows typing while Dispatch Telegram Reply responds.
- Check that Upsert Sheet Records updates your
Raw Datasheet when you provide complete subscription details. - When satisfied, toggle the workflow to Active to run on schedule and respond to Telegram messages in production.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the Google connection in n8n Credentials and your Google account’s app access 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
About 30 minutes if your Google Sheet and Telegram bot are ready.
No. You’ll mostly connect accounts and paste in a few keys. The workflow already handles the logic and message formatting.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually a few cents for typical chat-based updates.
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.
Yes, but do it intentionally. You’ll adjust the due-date logic in the “Check Upcoming Dues” part of the workflow, then tweak the message template used before “Send Telegram Alert.” Common changes include sending reminders 7 days before renewal, adding a second “day before” follow-up, and routing certain subscriptions to a different Telegram chat (like finance vs. marketing).
Most of the time it’s expired OAuth access or the wrong Google account connected. Reconnect the Google Sheets credential in n8n, then confirm the spreadsheet is shared with that account. Also check that the Sheets API is enabled for the project if you’re using your own OAuth setup. If it only fails when the list grows, you may be hitting rate limits, so reduce how often you read the entire sheet or filter earlier.
Plenty for a typical small business: hundreds of rows in Google Sheets is normal. On n8n Cloud, the limit is usually your monthly executions (Starter plans are fine for daily checks plus a steady trickle of chat updates). If you self-host, there’s no execution cap, so it mostly comes down to your server and Google API quotas.
Often, yes, because this isn’t just “if row matches, then send message.” You’re mixing scheduled checks, conditional logic, and a conversational AI agent that can interpret messy human instructions. n8n handles that kind of branching cleanly, and self-hosting removes the anxiety of per-task pricing when usage grows. Zapier or Make can still work if you want a basic reminder and nothing else. If you’re on the fence, Talk to an automation expert and describe your subscription volume and who needs the reminders.
Once this is running, renewals stop being a surprise and start being a decision. Set it up, let Telegram do the nudging, and keep your budget honest.
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.