Skip to content
Little Red Bot AI automation for Singapore SMEs
Playbooks23 min readSource-verified · our method

Roster reminders that stop the 'who's opening tomorrow?' text

Your Google Sheet roster messages the team on Telegram every evening — who opens tomorrow, who closes. Free tools, no code, about 90 minutes. Checked against official docs, Aug 2026.

BeginnerAbout 1.5 hours (Step 4 is the meat)💳S$0 on free tiers (about 90 of Make's 1,000 free credits a month)operations🧰Telegram · Make · Google Sheets

Published 25 Aug 2026 · Facts checked 25 Aug 2026

What you'll have by tonight: every evening at six, your staff Telegram group gets a message that reads Tomorrow, Wed 26 Aug — Ah Hock opens 7am, Siti closes 3–11pm, Marcus off. It comes from a roster you already keep in a Google Sheet. Nobody types it. Nobody chases it. And the 10.40pm "eh, who's opening tomorrow ah?" message stops arriving, because the answer was already sitting in the group four hours earlier.

That message is one of the quiet weekly taxes of running a shop, a kitchen or a clinic. It is never one message — it is a text, then a reply, then someone who didn't see it, then you opening the sheet on your phone at a red light. This playbook removes it with three free tools and no code.

Is this for you?

Build it if your rota changes from week to week, you have roughly four or more people on it, the team is already on Telegram, and you keep the roster in a Google Sheet (or would happily move it there).

Skip it if any of these are true — genuinely, go do the other thing:

  • You have three people or fewer, or the pattern never changes. Then the automation is a repeating Google Calendar event. Make one event called "Ah Hock opens", set it to repeat using the control next to Does not repeat, add your staff as guests, and let Calendar send the reminders (Google's guide). Ten minutes, not ninety, and nothing to maintain. Building the full thing below for a three-person team is a hobby, not an improvement.
  • Your team is on WhatsApp, not Telegram. The free WhatsApp Business app cannot be automated like this — the automatable version is the paid Cloud API, which is not a beginner tool. We explain the split in WhatsApp Business app vs API. Move the roster chat to Telegram first, or skip this one.
  • Your roster lives in a payroll or scheduling system already. If you run something like a proper scheduling module, it probably has shift notifications built in. Native beats glued-on. Turn theirs on.

Two things you should know before you commit an hour, because both are the kind of surprise that makes people close the tab at Step 4:

  1. There is one line you will paste into a box in Make, and it looks like this: formatDate(addDays(now; 1); "YYYY-MM-DD"; "Asia/Singapore"). You do not have to understand it. You do have to copy it accurately, semicolons and all. It is the bit that means "tomorrow's date".
  2. Once, you will open a long web address in your browser and read a screenful of raw text to find a number. It looks alarming. It is not. It takes four minutes and you never do it again.

Everything else is clicking, choosing from menus, and typing words into boxes. No terminal, no code, no card.

What it costs

S$0 per month at realistic small-business volume, on genuine free tiers, and no credit card to start any of them. Verified 25 August 2026 — free tiers change, so glance at the linked pages before you build.

PartFree tierCard needed?
Telegram botFree — "The Telegram Bot Platform hosts more than 10 million bots and is free for both users and developers" (Telegram)No
Make (the wiring)Free plan: "Up to 1,000 credits/mo", 2 active scenarios, "15-minute minimum interval between runs" (Make pricing)No — Make's own guide says the "free tier plan comes with all the features, does not require a credit card, and is forever free" (Make)
Google SheetsFree with a personal Google account — "All Google accounts come with up to 15 GB of storage" (Google One)No

The credit maths, which is the whole reason this is free. Make bills in credits, and for ordinary apps "1 operation equals 1 credit" (Make). This build runs three modules once a day. Two of them are cheap by rule: "Search modules use 1 credit per run, even when they return multiple bundles" and "Aggregators use 1 credit for each aggregation" (Make). So a six-person shift costs the same as a one-person shift.

That is 3 credits per evening, which is roughly 90 a month out of 1,000. (That arithmetic is ours — 3 × 31 — built on the quoted rules above.) You could run this, plus a second automation, and still not reach the free ceiling.

If you ever outgrow it: Make's cheapest paid tier today is the Make Plan at $9/mo for 5k credits/mo, with "Unlimited active scenarios" (Make pricing, read 25 Aug 2026). For this build, you will not get near it. The realistic reason to pay Make is running many automations at once, not this one.

Before you start (about 10 minutes)

Open three things. No payment details anywhere.

  1. Telegram, with a staff group. If your team already has a group chat on Telegram, use it. If not, create one and add the team — you'll add the bot to it in Step 3. You'll want Telegram on a computer too for one step, because you'll be copying a long number; the phone app works but the copying is more painful.
  2. A Google account. Your normal Gmail is fine. It owns the roster sheet.
  3. A free Make account — sign up at make.com with your email. The Free plan is the default and the button on the pricing page reads Get started. Make will ask a few setup questions when you first log in — answer whatever's true, it doesn't affect anything. If it asks you to pick a region, either is fine. None of it asks for payment.

Then five steps. Steps 1 to 3 are short. Step 4 is the real work.

Build it, step by step

Step 1 — Create the bot that will do the talking (5 minutes)

A "bot" here is nothing clever. It is an account that can post messages into your group, and Make will hold its password.

In Telegram, search for @BotFather — the official one, with the blue tick. Open a chat with it and, following Make's own instructions, "type /newbot to the message box and press enter."

BotFather asks two questions:

  • A name — anything readable. "Roster Bot" is fine.
  • A username — this one must end in the letters bot, for example sunshine_cafe_roster_bot. If the name you want is taken, BotFather will say so; add your initials or a number and try again. Nothing is broken when this happens.

BotFather then sends you a token: a long line that looks like 8123456789:AAF.... Make's docs put it plainly — "you will receive the message from botfather containing the token copy the token value and store it in a safe place." Paste it into a note on your phone for the next twenty minutes. Treat it exactly like a password, because that is what it is: anyone holding it can post as your bot.

You'll know this worked when BotFather replies with a message containing the token and a t.me/ link to your new bot.

Step 2 — Build the roster sheet (15 minutes)

Open a new Google Sheet. At the bottom, rename the tab to Roster — the exact word matters later, so keep it simple and remember the spelling you chose.

Put these four words across row 1, one per cell:

A1B1C1D1
DateNameShiftNote

Then fill in a couple of weeks of rota underneath, one row per person per day:

DateNameShiftNote
2026-08-26Ah HockOpening 7am–3pmhas the keys
2026-08-26SitiClosing 3pm–11pm
2026-08-27MarcusOpening 7am–3pm

Set the sheet's clock to Singapore. Go File → Settings. In the General section set Locale and Time zone to Singapore, then click Save settings. Google notes that "When you make a change, it changes for the entire spreadsheet. Everyone working on it will see the changes, regardless of their location" (Google).

Now the one thing in this step that actually matters. After you type 2026-08-26 into A2 and press Enter, look at what the cell shows you. Google may leave it as you typed it, or reformat it to something like 26/08/2026. Either is fine — but you need to know which, because in Step 4 you tell Make to match that exact shape. Write down which of these your sheet displays:

What your cell showsThe code you'll use in Step 4
2026-08-26YYYY-MM-DD
26/08/2026DD/MM/YYYY
08/26/2026MM/DD/YYYY

(Those two-and-four-letter codes are Make's date tokens — YYYY gives "1970 1971 ... 2029 2030", MM gives "01 02 ... 11 12", DD gives "01 02 ... 30 31", per Make's token list. Type them exactly as printed, capitals included.)

You'll know this worked when you have a tab called Roster, four headers, a few real rows, and a note to yourself saying which of the three date shapes your sheet displays.

Step 3 — Put the bot in the group and find the group's ID number (15 minutes)

Make needs to know which chat to post into, and Telegram identifies chats by a number, not a name. Getting that number is the fiddliest part of this build. It is four minutes of work wrapped in five minutes of "am I doing this right?". You are.

3a. Add the bot to your staff group. Open the group and add the bot by its @username — the same way you'd add a person. Telegram's FAQ describes adding members as "You can add your contacts, or using search by username" (Telegram FAQ). The exact screens differ between iPhone, Android and Desktop and Telegram doesn't document one path for all of them, so: look for the group's member list or its add-people option, search your bot's username, add it. When it's in, Telegram shows a small "X added Roster Bot" line in the chat. That line is your confirmation.

3b. Say something the bot is allowed to hear. This is the part people trip on, and it's not your fault — it's a deliberate Telegram safety feature. By default a bot in a group is deaf to normal chatter. Telegram lists exactly what it does hear, and the first item is "Commands explicitly meant for them (e.g., /command@this_bot)" (Telegram).

So in the group, send this one message, using your bot's real username:

/start@sunshine_cafe_roster_bot

Nothing visible will happen. That's expected — the bot has no reply programmed. It heard you anyway.

3c. Read the number. In a browser, go to this address, swapping in your token from Step 1:

https://api.telegram.org/bot8123456789:AAF.../getUpdates

Telegram documents this address shape itself: "All queries to the Telegram Bot API must be served over HTTPS and need to be presented in this form: https://api.telegram.org/bot<token>/METHOD_NAME" (Telegram Bot API).

Three things people get wrong here, so read slowly:

  • The word bot is glued to the front of your token, no space, no slash between them.
  • There are no angle brackets — you're replacing <token>, not keeping the < and >.
  • The /getUpdates on the end is spelled with a capital U.

You'll get a screenful of dense text starting {"ok":true,"result":[. Don't read it all. Use your browser's find (Ctrl-F or Cmd-F) and search for "chat". You're looking for a fragment like:

"chat":{"id":-1001234567890,"title":"Sunshine Cafe Team",

The number straight after "id": is what you want. Copy it exactly as it appears — including the minus sign at the front if there is one. If you see several, take the one whose "title" matches your group's name. Paste it into your note next to the token.

If you instead see {"ok":true,"result":[]} — an empty pair of brackets — nothing recent is waiting. Telegram keeps these for a limited time: "Incoming updates are stored on the server until the bot receives them either way, but they will not be kept longer than 24 hours" (Telegram Bot API). Go back to the group, send the /start@yourbotname message again, then reload the browser page.

You'll know this worked when you have two things saved: a token, and a chat ID number.

Step 4 — Wire it together in Make (give this one a patient 30–40 minutes the first time)

This is the heart of it and it deserves real attention. Three modules. Do them in order and don't skip the trial run in the middle.

In Make, click + create a new scenarioMake's guide puts it "in the top right corner", and there's a second one "in the scenarios tab located in the left sidebar". You get a blank canvas. Add your first module by clicking "the giant plus in the center of your canvas".

To add each next module, right-click the dots on the connecting line and choose to add a module — that's the path Make's own tutorial uses ("right click the dots between the filter and the apple ios module and select add a module"). If your builder also shows a small + on the edge of a module, that reaches the same place. If two modules ever end up as separate bubbles, drag a line from the right-hand dot of one to the left-hand dot of the next.

A note in case it bothers you: the first module here is a search, not a watcher. That's allowed and deliberate — Make's docs say "we highly recommend starting your scenario with a trigger still, you can start your scenario with any possible module" (Make). The scenario runs on the clock you set in Step 5, and this module is what runs first.

Module 1 — Google Sheets → "search rows". Click create a connection and sign in with Google. Make's docs describe it as: "Click sign in with google if prompted, authenticate your account, grant all requested permissions, and confirm access" (Make). Google will show a consent screen asking you to allow Make to reach your Sheets — that's expected. If Google warns that it hasn't verified the app, that's normal for tools of this kind; continue through it.

Then fill in these fields (field list from Make's docs):

  • Search Method — "select an option to choose the spreadsheet in which you want to search rows". Pick the option that lets you choose your file from your Drive rather than typing an ID.
  • Spreadsheet Name — your roster file.
  • Sheet NameRoster (or whatever you named the tab).
  • Table Contains Headers — yes. This is what makes Make label your columns Date, Name, Shift, Note instead of A, B, C, D.
  • Column RangeA to D.
  • Limit — "the maximum number of results make should return during one scenario execution cycle". Put 25. That's more people than you'll ever roster on one day, and it costs nothing extra.
  • Filter — "set the filter for the row to be searched by". This is the important one, described next.

The filter. You want: the Date column equals tomorrow. Set the column to Date, choose the text "equal to" style comparison (Make groups its comparisons by type; the exact label wording may differ from the words here — you're after a plain "is the same as" text match), and then in the value box on the right, paste this:

formatDate(addDays(now; 1); "YYYY-MM-DD"; "Asia/Singapore")

Swap YYYY-MM-DD for whichever code you wrote down in Step 2 — if your sheet shows 26/08/2026, use "DD/MM/YYYY" instead. Leave everything else exactly as printed, semicolons included.

What it does, in English: addDays(now; 1) is "today plus one day" and formatDate turns that into text shaped like your sheet (both documented by Make). The "Asia/Singapore" on the end pins it to Singapore time so the date flips at midnight here, not somewhere else.

If pasting the line doesn't take, build it by hand instead: clicking a field opens Make's mapping panel, whose tabs include Date and time functions, and you "click the function name or drag it to the field" (Make).

Now prime it before going further. Add tomorrow's date into a couple of rows of your sheet if it isn't there, save the module, and click the run once button. Make should come back with your rostered people for tomorrow. Do not build the next two modules until this one returns rows — everything downstream depends on it, and debugging it now takes two minutes instead of twenty.

Module 2 — Tools → "text aggregator". Search for text aggregator when adding the module. This is the module that turns four separate rows into one tidy message instead of four separate pings (Make).

  • Source Module — choose your Google Sheets search rows module from the dropdown. Make describes this field as "The module from which the bundle aggregation will start."

  • Switch on the advanced settings toggle at the bottom of the window.

  • Row separator — choose new row from the dropdown, so each person lands on their own line.

  • Text — this is what each line will say. Click into the box and build it from your sheet's columns, which the panel lists on the right. Something like:

    • Name — Shift  (Note)
    

    …where Name, Shift and Note are clicked in from the panel, not typed. The bullet, the dash and the brackets are yours to type.

  • Stop processing after an empty aggregation — switch this on. Make's default is the opposite: "By default, the aggregator outputs the result of the aggregation even in case no bundles reached the aggregator." With it on, a day where nobody is rostered sends nothing at all, instead of an awkward empty message. This is a small toggle that saves a real embarrassment.

Module 3 — Telegram Bot → "Send a text message or reply" (module name from Make).

  • create a connection — Make's instruction is "in the token field, enter the token you copied from your telegram bot account", then "click save". Paste the token from Step 1.

  • Chat ID — paste the number from Step 3c, minus sign and all. (There's also a User ID field on this module — leave it alone. You're posting to a group.)

  • Text — write your message and click in the aggregator's Text output where the list should go. For example:

    📋 Tomorrow's shifts:
    
    [the aggregator's Text output]
    
    Changes? Tell the group before 9pm.
    
  • Parse mode — leave it empty. That sends your words exactly as typed. It's an optional field for bold and italics, which you don't need here.

Click the save control on the toolbar.

You'll know Step 4 worked when you can click run once button and a real message lands in the staff group.

Step 5 — Set the clock: Singapore time, 6pm daily (10 minutes)

Two settings, and the order matters — do the time zone first, or you'll schedule 6pm in Prague.

5a. Set your Make organisation's time zone to Singapore. Make is explicit that the organisation time zone "defines the time used when executing" scenarios, while your personal user time zone only "defines how [Make] displays time" in history (Make). Getting these two confused is the difference between a 6pm reminder and a 6am one.

The path Make documents: click your profile icon at the upper right → profile → the time zone options tab → the edit icon next to your organisation → pick the Singapore zone → save. Only organisation owners and admins can change it; on a personal free account, that's you.

5b. Schedule the scenario. Back in the scenario builder, "click every 15 minutes on the toolbar" to open the schedule settings (Make). Choose once daily from the run options — the full list Make offers is "at regular intervals," "once daily," "weekdays (mon fri)," "weekly," "monthly," "specified dates," and "on demand". Set the time to 18:00. (If your team would rather hear it after closing, Make notes you "can add as many run times as you need in the daily schedule".)

5c. Turn it on. Make prompts you to activate scenario after scheduling (Make). Until you do that, nothing runs on its own, no matter how well it worked when you clicked run once.

You'll know this worked when the toolbar shows a daily schedule instead of "every 15 minutes", and the scenario is switched on.

Test it works (10 minutes)

Do all four. The fourth is the one people skip and regret.

  1. Put tomorrow in the sheet. Add two rows dated tomorrow, with two different names and shifts. Save.
  2. Click run once button. Within a few seconds a message should appear in the staff group listing both people, one per line.
  3. Test the quiet day. Delete tomorrow's rows temporarily and click run once again. Nothing should arrive in the group — that's the "Stop processing after an empty aggregation" toggle doing its job. Put your rows back afterwards.
  4. Wait for the real thing. Tonight at 6pm, the message should arrive without you touching anything. Until that has happened once, the build is not finished — a scenario that works on run once button but was never activated will sit there doing nothing, quietly, forever.

When it doesn't

Nothing arrives at 6pm, but run once works. The scenario was never activated, or the schedule was never changed off its default. Open the scenario and check the toolbar shows a daily schedule and the scenario is switched on (Make).

It arrives, but at a strange hour. You set the schedule before setting the organisation time zone, or you changed your user time zone instead of the organisation's. Only the organisation setting decides when scenarios run (Make). Fix the organisation zone, then reopen the schedule and re-enter 18:00.

The message arrives, but it's empty or says nothing useful. Module 1 found no rows. The first thing to check is the date shape: your sheet displays 26/08/2026 but your filter is asking for 2026-08-26, so nothing matches. Open your sheet, look at a date cell, and match the code in the filter to it using the table in Step 2.

Module 1 returns nothing at all, even for today's date. Check three things in order: the Sheet Name field matches your tab's spelling exactly; Table Contains Headers is set to yes; and Column Range covers columns A to D. If your dates come back looking like a five-digit number such as 46261 rather than a date, the field to look at is Value Render Option, which Make describes as the setting that "defines how cell values are returned in the output" (Make).

The getUpdates page shows {"ok":true,"result":[]}. Telegram doesn't keep updates "longer than 24 hours" (Telegram Bot API). Send /start@yourbotname in the group again and reload the page.

The getUpdates page shows an error about an unauthorized or not-found bot. The address is malformed. Check the word bot sits directly against the token with no space, that you removed the < and >, and that you copied the whole token including the part after the colon.

Telegram module errors with something about the chat. The Chat ID is wrong or the bot isn't in the group any more. Confirm the bot still appears in the group's member list, then redo Step 3c and re-paste the number — including its minus sign, which tends to get dropped when you double-click to select.

One message per person instead of one tidy list. Module 2 is missing, or its Source Module isn't pointing at the Google Sheets search. Open the aggregator and set Source Module to the search rows module (Make).

A day with nobody rostered sends a blank message. The Stop processing after an empty aggregation toggle in Module 2 is off. Switch it on.

You've run out of Make credits. At three credits a day this build shouldn't get you near 1,000, so something else in your account is consuming them, or the scenario is running far more often than daily. Check the schedule first.

Your data (read this one)

Your roster is staff data. Names, and where a named person will be at a given hour. Under Singapore's PDPA that is personal data, so it's worth being clear about where it travels.

What leaves your business: for each evening's run, the names, shifts and notes for tomorrow only — not the whole sheet. Those rows pass from Google to Make and then into a Telegram message.

Google. The sheet stays in your Google account. Make reads it through the connection you authorised in Step 4 and reads only the range you set. Make states in its privacy notice that "Google Workspace APIs are not used to develop, improve, or train generalized AI and/or ML models" (Make).

Make. The rows pass through Make's servers as the scenario runs. Make's privacy notice says that for EU, UK or Swiss residents personal data "may be transferred outside of the European Economic Area (EEA), UK or Switzerland", and that personal data "will be deleted upon your request or as soon as it is no longer serving the purpose for which it has been collected" (Make). We looked for a stated retention period for scenario execution logs on Make's own pages and did not find one — so assume run history sits in your account until you clear it, and don't put anything in the Note column you'd mind being logged. "Has the keys" is fine. A staff member's medical reason for a shift swap is not.

Telegram. The message goes into a normal group chat, so everyone in that group sees tomorrow's roster — which is the point, but check the group has only staff in it. On the bot itself, Telegram's privacy policy is blunt: "No other bots or third-party bot developers are affiliated with Telegram. They are completely independent from us." In this build you are the third-party developer, and the bot is controlled by your token and your Make account. Telegram also notes that a bot in a group "may know you are a member" and that bots "will obviously get your messages when you send them something" (Telegram).

One genuine reassurance: because you left privacy mode alone, your bot is not reading the group's chatter. Telegram limits a default bot to commands aimed at it and replies to its own messages (Telegram). It posts; it doesn't listen. Do not make the bot a group admin unless you have a reason — admin bots "always receive all messages".

Practical PDPA housekeeping: tell your staff the group gets an automated roster message and that a tool called Make reads the roster sheet to send it. One sentence at a shift briefing. It costs nothing and it's the difference between a tool your team trusts and one they find out about sideways.

Switch it off

No lock-in, nothing to cancel, no spend to stop — you never entered a card anywhere, so there is no bill to worry about, ever.

To stop it temporarily, switch the scenario off in Make. It stays built and you can switch it back on before the busy season.

To remove it properly, do all four:

  1. Delete the scenario in Make, so it stops running and stops holding your data flow.
  2. Revoke Make's access to your Google account. Do this from Google's own side, in your Google Account's security settings under third-party access, not from Make. That's the one that truly cuts the connection.
  3. Remove the bot from the group — the same way you'd remove any member. The wording differs by device, so look for the member list and the remove option.
  4. Delete the bot itself via @BotFather, which has a delete-bot command in its command list. Send it /help if you want to see the list. Once deleted, the token is dead even if someone copied it.

Your Google Sheet is yours throughout. Keep it, export it, or delete it — none of the above touches it.

What's next

Send private DMs instead of a group message. Tempting, and harder than it sounds. Telegram is explicit: "Bots can't start conversations with users. A user must either add them to a group or send them a message first" (Telegram). So every staff member must message your bot once before it can DM them, and you must find each person's chat ID by repeating Step 3c for each of them. Doable, but it's a second evening's work and it grows every time you hire. Start with the group.

Add a second run for the morning. Make lets you "add as many run times as you need in the daily schedule" (Make), so a 6.30am "opening today: Ah Hock" costs three more credits a day. In a copy of the scenario you'd shorten addDays(now; 1) to now — but note the free plan allows 2 active scenarios, so that's your second slot spent (Make pricing).

Reuse the same bot elsewhere. The token and chat ID you now have work for any Telegram automation. Catch every lead from your website form and low-stock alerts from a Google Sheet both use the same pairing, and the receipt bot teaches the Telegram-plus-Sheets skill from the other direction.

Before you build a third and fourth of these, read the real cost of automation — free tools are free, but the maintenance is not, and knowing that early is what separates a system from a pile of half-working scenarios.

Everything above was written from each tool's official documentation on 25 August 2026, with no build behind it and no screenshots — that's what Level 1 research means on this site. Screens move. If a button has been renamed since, the thing you're looking for is described in words next to it, and the linked doc is the current truth. More builds like this one are in the playbooks library.

Sources

Every factual claim above traces to one of these, fetched on the fact-check date in the byline.

  1. Telegram — the Bot Platform is free for both users and developers (fetched 25 Aug 2026)
  2. Telegram Bot API — request URL form, getUpdates, and the 24-hour update window (fetched 25 Aug 2026)
  3. Telegram — privacy mode: which messages a bot sees in a group (fetched 25 Aug 2026)
  4. Make pricing — Free plan: 1,000 credits/month, 2 active scenarios, 15-minute minimum interval (fetched 25 Aug 2026)
  5. Make — 'free tier plan… does not require a credit card, and is forever free' (fetched 25 Aug 2026)
  6. Make — how features use credits: search modules 1 credit per run, aggregators 1 credit per aggregation (fetched 25 Aug 2026)
  7. Make — a scenario can start with any module, not only a trigger (fetched 25 Aug 2026)
  8. Make — Google Sheets 'search rows' module and its fields (fetched 25 Aug 2026)
  9. Make — Telegram Bot app: 'Send a text message or reply' and the token connection (fetched 25 Aug 2026)
  10. Make — text aggregator: source module, row separator, empty aggregation (fetched 25 Aug 2026)
  11. Make — schedule a scenario: once daily, and where to click (fetched 25 Aug 2026)
  12. Make — organisation time zone decides when scheduled scenarios run (fetched 25 Aug 2026)
  13. Make — date and time functions: addDays and formatDate (fetched 25 Aug 2026)
  14. Make — tokens for date/time formatting: YYYY, MM, DD (fetched 25 Aug 2026)
  15. Google — set a spreadsheet's locale and time zone (fetched 25 Aug 2026)
  16. Google — repeating Calendar events, the 'Does not repeat' control (fetched 25 Aug 2026)
  17. Telegram Privacy Policy — what bot developers can see, and that bots are third parties (fetched 25 Aug 2026)
  18. Make Privacy Notice — data transfers and AI training (fetched 25 Aug 2026)

How we're funded: some links on this page are affiliate links — if you sign up through one, we may earn a commission, at no extra cost to you. It never changes what we recommend. Full disclosure.

Get the next one in your inbox

The Red Dot Report — one useful automation email a week.