How to build an opt-in subscriber list for your Telegram bot, send broadcasts within Telegram's limits, handle blocks and errors, measure results and avoid being flagged as spam.
To broadcast from a Telegram bot, you keep a list of the users who started your bot and agreed to receive updates, then send the message to each of them one by one through the Bot API, staying within Telegram's sending limits and removing anyone who has blocked the bot. Telegram has no "send to all" button for bots, so the broadcast is a loop your bot or bot platform runs. Bots can only message people who started them, which makes every bot list opt-in by design.
This guide covers how to collect consent properly, what to store, how to write and send a broadcast, the rate limits and errors you will meet, paid broadcasts for very large lists, how to measure results, and how to fix delivery problems. It describes the Bot API calls in words rather than code.
A Telegram bot talks to each user in a private chat. When someone opens your bot and presses Start, Telegram creates that chat and your bot receives an update containing the user's chat ID. From then on, your bot can send messages to that chat ID.
A broadcast is simply the same message sent to many of those chat IDs. Three rules shape everything that follows:
Unlike a channel, a bot message arrives in a private chat, usually with a notification. That makes bot broadcasts more noticeable than channel posts, and also more irritating when unwanted. Treat that attention with care.
Before building a broadcast system, ask whether a channel would do the job. A channel sends one post to unlimited subscribers with no code, no rate limits and no list to maintain. Our guide to channels versus groups explains channels in detail.
A bot broadcast is better when:
For general news to everyone, a channel is usually simpler. Many businesses use both: a channel for news, a bot for personal messages.
Have these in place:
If you do not write code, a bot-building platform can handle storage and sending for you. Our guide to building a bot without coding covers that route, and the principles in this guide still apply.
Pressing Start lets your bot message someone, but it does not necessarily mean they want marketing messages. Someone who started your bot to check an order expects order updates, not weekly promotions. Ask separately.
A good pattern:
People who tap "Yes" are your broadcast list. People who tap "No" still use the bot normally but receive only messages related to their own actions.
Store only what you use. Do not store message contents you do not need.
Never import lists of phone numbers or usernames to message. It is impossible with a bot anyway, and attempting to reach people who never asked through other accounts leads to bans.
An easy way out keeps your list healthy. People who cannot find how to stop will block the bot instead, and many blocks are a strong spam signal.
Unsubscribing from broadcasts should not break the bot's main service. Someone who stops promotions should still get their order updates if they want them.
A bot message lands in a private chat, usually with a notification. That raises the bar for what is worth sending.
Ask: would this person be glad they received this? Useful examples include a new feature they asked for, an offer on something they showed interest in, a reminder they signed up for, or genuinely important news.
Using the user's first name or referring to their past choices can help, but only with data you hold accurately. A name that is blank or wrong looks careless.
The Bot API lets you send a message without a notification sound. That suits non-urgent updates, or sends that land at night in some time zones.
If the broadcast includes a photo, video or file, upload it once, then reuse the file identifier Telegram returns for the rest of the sends. Uploading the same file thousands of times is slow and wasteful.
If you want to reuse a post from your channel, the Bot API can copy a message to each user, which sends it without the "Forwarded from" header. Forwarding shows the source, which you may or may not want.
A broken link sent to thousands of people cannot be recalled from every chat easily. Testing takes minutes.
Telegram's Bot API documentation says bots can broadcast to their users at up to about 30 messages per second by default. Telegram's bot FAQ also advises not sending more than about one message per second to a single chat, and fewer to groups. Limits can change, so check Telegram's current bot documentation.
For a large list, a broadcast therefore takes time. As an illustration only: a list of 60,000 subscribers sent at 30 messages per second takes around half an hour. Plan for that.
If you send too fast, Telegram responds with a "too many requests" error that includes how many seconds to wait. Stop sending, wait at least that long, then continue from the same place. Ignoring it and retrying immediately makes things worse.
Telegram offers paid broadcasts for bots that need to send faster. When enabled in @BotFather, a bot can send well above the default rate, and each message above the free limit costs a small amount of Telegram Stars from the bot's balance. Telegram's documentation sets conditions for using it, such as a minimum Stars balance, and these have changed over time. Check the current requirements in the Bot API documentation and @BotFather before relying on it.
Most bots never need this. It matters for time-sensitive messages to very large lists, where a slow broadcast would deliver the last messages too late.
The sending limit is shared by everything your bot sends. If a broadcast uses the full allowance, the bot's normal replies to users, such as answers to commands or booking confirmations, get delayed or refused. Three habits prevent that:
Every send returns either success or an error. Use the errors to keep your list clean.
The send fails with a forbidden error saying the bot was blocked by the user. Mark that user as blocked and stop sending to them. Do not retry. If they unblock the bot later, your bot receives an update, and you can mark them active again. The same update type also tells your bot when a user blocks it, so you can update your list before the next broadcast.
The send fails with a forbidden error saying the user is deactivated. Mark them inactive permanently.
Usually means the stored chat ID is wrong, or the user never started this bot. Check how that ID got into your list.
Covered above: wait the time Telegram specifies, then resume.
If formatting marks are unbalanced, Telegram refuses the message. This affects every recipient, so it should be caught during testing. If it happens mid-broadcast, stop and fix the message.
Temporary failures can happen. Retry a few times with increasing pauses, then record as failed for review.
For each broadcast, keep counts of sent, blocked, deactivated and failed. A sudden rise in blocks after a broadcast is your clearest signal that the message was unwelcome.
Sending everything to everyone is the fastest way to raise blocks. If you know users' interests or past actions, send each group only what fits it. A user who bought one product category usually cares more about that category.
A notification at 3 a.m. annoys people. If your users are spread across time zones, either schedule by the user's likely local time, or send at a time that is reasonable for most, using silent sending for the rest. Telegram does not tell bots a user's time zone, so you may need to ask or infer it from language and context.
Decide a maximum number of broadcasts per week and stick to it. Users who agreed to "weekly updates" and receive daily ones will leave.
Telegram does not tell a bot whether a user read a message. You can still measure what matters.
Compare each broadcast against the previous ones. A message with fewer taps and more blocks than usual is telling you something.
Mistakes happen: a wrong date, a broken link, a price typo. Bots have two tools to fix them, and both depend on something you must do before sending.
When a send succeeds, Telegram returns the ID of the message in that user's chat. Save it with the user and the broadcast. Without these IDs you cannot touch the message again.
A bot can edit the text, caption or buttons of a message it sent. To correct a broadcast, run a second loop that edits each stored message, at the same careful pace as the original send. Edits do not trigger a new notification, so users who already read the message may not notice the change. If the mistake matters, such as a wrong event date, send a short correction as well.
A bot can also delete messages it sent in private chats, but Telegram limits how long after sending this is possible, and the exact rules are in the Bot API documentation. If a message was sent to the wrong segment, delete it quickly and send the right one.
If the message's button points to your own website, you can often fix a mistake by changing where that link leads on your side, which is faster than editing thousands of messages.
A list that only grows gradually fills with people who no longer care. Signs include more blocks per broadcast and fewer button taps.
A smaller list of people who want your messages beats a large list that blocks you.
Broadcasting to people is regulated in many places, and Telegram has its own rules against spam.
This is general information, not legal advice. Check local rules or ask a professional for your situation.
Many teams send broadcasts through automation platforms that connect a bot to a spreadsheet, CRM or form. When you use them, check that the tool:
Never paste your bot token into a tool you do not trust. Anyone with the token controls the bot and its subscriber chats.
This is an illustrative scenario.
A cookery school uses a bot for class bookings. It wants to announce new classes to interested students.
The message was unwanted by many. Review the content, the frequency and whether it went to the right segment. Reduce frequency and target more narrowly.
That may be correct: large lists take time at safe speeds. If it is slower than expected, check you are reusing media file identifiers and that your server is not the bottleneck. For time-critical large sends, look into paid broadcasts.
Your loop restarted from the beginning after an interruption. Record each successful send as it happens and resume from the queue.
The message was sent without a formatting mode, or with a different mode from the one the text was written for. Telegram supports more than one formatting style, and each uses different marks. Make sure the send uses the same style the text was written in, and test again.
For buttons that send data back to the bot rather than open a link, the bot must answer each tap. If it does not, the user sees a loading indicator and nothing happens. Check that the bot is running, receives the tap updates, and responds to them, including during a busy broadcast.
Check the tracked link parameters. A copy-paste mistake in one character sends everyone to an error page. Fix it on your website if you can redirect, or edit the stored messages.
Stop broadcasting, review consent records and content, and make sure only opted-in users are receiving messages.
Once your first broadcasts run smoothly, the next improvements usually come from the bot itself rather than the messages:
No. A bot can only message users who started it or interacted with it in a way that allows messaging. There is no way to cold-message people with a bot.
Not in Telegram itself. Broadcasting means your bot or bot platform sends the message to each subscriber in a loop. Some bot-building tools provide a broadcast feature that does this for you.
Telegram's documentation says around 30 messages per second by default, with an optional paid speed-up for bots that meet its conditions. Check the current Bot API documentation, as limits can change.
Sends to users who blocked the bot fail with a specific error, and your bot also receives an update when a user blocks or unblocks it. Use both to keep your list accurate.
No. Telegram does not report read status to bots. Measure button taps, link clicks, replies and conversions instead.
Sending at normal speed through the Bot API is free. Costs come from hosting your bot, any platform you use, and paid broadcasts if you choose to send faster than the default limit.
Broadcasting from a Telegram bot means sending one message to each opted-in user in turn. Ask clearly for permission to send updates, store each subscriber's status, and make stopping easy. Write short messages worth a notification, test them, and send at a steady pace within Telegram's limits, waiting when Telegram asks. Use errors to remove blocked and deleted users, segment by interest and time zone, and measure taps, clicks and blocks rather than reads. For general news to everyone, consider a channel instead; for personal, actionable messages, a well-run bot broadcast is hard to beat.
Ownership confirmed through our claim process — not an endorsement of their content.
Founder of Telegram.
The official Telegram on Telegram. Much recursion. Very Telegram. Wow.
Telegram Premium – a subscription that unlocks dozens of exclusive features.
Binance Official English Group Binance Official Chinese Group Binance English Announcements Binance Chinese Announcements
is a modern crypto news and research platform covering the latest developments across digital assets, markets, regulation, and blockchain technology.
Technical analysis & high-probability trade setups. Price action, market structure, risk control.
BlackBlock Markets exists to observe how capital moves before it becomes obvious.
This channel focuses exclusively on what shapes global finance. Macroeconomics, markets, liquidity, central banks.
Clear long & short signals for BTC, ETH & liquid altcoins. AI-backed analysis, real-time execution.