How to build a Telegram bot that sells access to a private group
By the Botable team
A paid access bot sells membership to a private channel or group. It takes payment in Telegram Stars, issues a single-use invite link, and removes the member when the subscription lapses. Describe your tiers and Botable builds it.
What is a paid access bot?
A Telegram paid-access bot turns a private channel into a product. The happy path is short — take payment, generate a single-use invite link, and record when access expires — but the value is entirely in the unhappy paths. A multi-use invite link that leaks costs you every future sale, so links must be single-use and time-limited. Expiry has to be enforced by a scheduled check that actually removes lapsed members, because a subscription nobody is removed for is a one-off payment with extra steps. And renewals need a reminder before the date, not after, since a member who is silently removed reads it as a bug rather than a lapse. Storing one row per member with tier, start, expiry and status is what makes all three possible, and it is also the record you will need the first time someone disputes a charge.
What commands does it have?
| Command | What it does |
|---|---|
/join | Shows the tiers and their prices |
/status | The member's tier and renewal date |
/renew | Extends before expiry |
/cancel | Stops renewal, keeps access until expiry |
/members | Admin view of active and lapsed members |
What do you need before you start?
- A Telegram bot token from @BotFather
- A private channel or group with the bot promoted to admin, able to invite and remove
- Your tiers, durations and prices — and a stated refund rule
How do you build it?
How does someone get in after paying?
The bot generates a single-use invite link with a short expiry and sends it only to the payer. Never a shared link: one screenshot in another group and your paid channel is public. Ask for single-use and time-limited explicitly.
How is expiry enforced?
A scheduled job compares today against each member's expiry row and removes the ones that have lapsed. Without this the bot sells one-off access forever. Say how much grace to allow — a day or two absorbs payment delays without giving away a month.
When should renewal reminders go out?
Before expiry, at least twice — a few days ahead and on the day. A reminder sent after removal reads as an error and converts far worse than one sent while the member still has access.
What has to be recorded for every payment?
Who paid, which tier, when it started, when it expires, and the Telegram payment reference — written before the invite link is sent, not after. A member with access and no order row is unresolvable the moment anything is disputed.
A prompt you can use as-is
Paste this into Botable and adjust the details. It is specific on purpose — a vague description produces a vague bot.
Build a paid access bot for my private channel. /join shows tiers: Monthly and Annual, priced in Telegram Stars. On successful payment, write the order first, then generate a single-use invite link that expires in 30 minutes and send it only to the payer. Track each member's expiry. Remind them 3 days before and on the day. Run a daily check that removes members more than 2 days past expiry. /status shows a member their tier and renewal date, /cancel stops renewal but keeps access until expiry, /members is an admin list of active and lapsed.
Who is this bot for?
- Creators selling a private community or signal channel
- Course and cohort operators gating a group by enrolment
- Anyone whose paid content already lives in Telegram
What goes wrong with this kind of bot?
- A reusable invite link leaks and turns a paid channel into a free one — single-use only
- No removal job means every subscription is silently a lifetime deal
- Write the order row before granting access; a granted seat with no record cannot be supported
Questions about paid access bots
Can I offer a free trial?
Yes — issue access with a short expiry and no payment, then let the normal renewal path take over. Describe the trial length and whether one account can claim it more than once, because that second question is the one people exploit.
What happens if someone leaves and rejoins?
Their row still holds the expiry, so the bot can re-issue a link if they are still paid up and refuse if they are not. Ask for this — without it, leaving the channel becomes an accidental way to lose access you paid for.