Telegram bot hosting
Host your Telegram bot, from a template or your repository
Paste the token from BotFather and the grammY starter is answering /start within a minute, or point us at your own repository in any of eight runtimes. Polling needs no address and runs on the free tier; webhooks run behind the web address. Every push redeploys the bot.
- First bot free, no card
- Polling or webhooks
- Always on, no sleep timer
- Europe and North America
- Status
- Online
- Tier
- Starter · 1 GB · 1 vCPU
- Updates
- Long polling, no address
- Auto-deploy
- main · 6b1d4e8
Two ways to run it
A Telegram bot gets its updates one of two ways, and the choice decides whether it needs a web address at all. The template does both: one environment variable switches between them.
Polling
Works on the free tierThe bot opens a connection to Telegram and asks for updates. Nothing has to reach it from outside, so it needs no web address and no open port. This is what the template does unless you tell it otherwise, and it is the right answer for almost every bot.
- No address, no certificate, nothing to point at the bot
- Runs on the free 256 MB tier as it is
- TELEGRAM_BOT_TOKEN is the only variable you have to set
Webhooks
Needs the always-on addressTelegram delivers each update to your bot's https address instead. Set TELEGRAM_MODE to webhook and WEBHOOK_URL to the app's address, and the template registers https://name.fadehost.app/telegram when it starts. Telegram only delivers to ports 443, 80, 88 and 8443 over https with a valid certificate, which the web address meets as it is.
- Worth it when the bot already serves a dashboard or an API on the same address
- Worth it when you would rather Telegram called the bot than hold a connection open
- WEBHOOK_SECRET travels with every update; the bot refuses updates without it
- The address has to answer at any moment, so it has to be the always-on one: $2/mo or $20/yr
From BotFather to a live bot
- 1
Get a token from BotFather
In Telegram, message @BotFather, send /newbot, answer two questions and copy the token it hands back. It looks like 123456789:AAF... and it is the only thing that identifies your bot.
- 2
Deploy the template or your repository
In the panel, open Apps, host something and choose the Telegram bot. Take the template as it is, or point us at your own repository, public or private. The token goes in the environment table, never in the code.
- 3
Send /start
We clone the code, install it and start the bot. The live console shows it log in as your bot and answer the first update. Edit a handler, push, and the new version deploys itself.
What the template reads
One KEY=value per line in the environment table on the bot's page, values masked once they are saved.
TELEGRAM_BOT_TOKEN=123456789:AAF-token-from-botfather
TELEGRAM_MODE=polling
WEBHOOK_URL=https://helper-bot.fadehost.app
WEBHOOK_SECRET=a-long-random-string
PORT=8080Polling needs the first line and nothing else. The next three are read only when TELEGRAM_MODE is webhook. PORT is set for you on every app, so leave it out unless your code wants a different one.
View the template sourceWhat every bot gets
A Telegram bot is an app on the same runtime as everything else we host, so it gets what every app gets. All of it is on the bot's own page in the panel.
Push to deploy
Connect the FadeHost GitHub App once and every push to the branch reinstalls and restarts the bot. No SSH, no restart button.
Private repositories
Pick the repository through the GitHub App, or paste the URL with an access token. We fetch the code on every deploy and never store your credentials.
Live console
Everything the bot prints lands on its page as it happens, with the install and build output above it.
Crash doctor
When the bot dies in a loop we read the log and name the cause in plain words, usually within a minute: a token Telegram rejected, a package that is not installed, a handler that throws on every update.
Environment variables
TELEGRAM_BOT_TOKEN and the rest live in a table in the panel with their values masked. Edit, save once, and the bot restarts with the new values.
Deploy history and rollback
Every deploy is listed with its commit. Roll back pins the bot to an older one and redeploys it; unpin when the fix is pushed.
Scheduled commands
Run a command inside the bot's container on a cron schedule: a nightly cleanup, a digest, a reminder job. Ten per bot, each run keeping its exit code and last output.
Usage chart
CPU and memory over the last 24 hours, sampled every five minutes, on the bot's page. A bot sitting at its memory limit is obvious before it starts restarting.
Eight runtimes
Node.js, Python, Bun, Deno, Go, Java, PHP and Ruby, picked from what is in the repository. grammY, telegraf, python-telegram-bot and aiogram run as they are.
A web address
Give the bot a name and it answers at https://name.fadehost.app over HTTPS: the webhook endpoint, a dashboard, a status page. Free addresses sleep when idle; always on is $2 a month or $20 a year.
MySQL database
Paid bots include a MySQL database at no extra cost. One click creates it and the connection details land in the bot's environment.
One private network
From the bot's container you reach your databases and your game servers by name, on a network only your account is on.
Three regions
Europe West (France), Canada East (Montreal) or USA West (Oregon). Pick the one closest to you and to whatever the bot talks to.
Dockerfile and Railpack builds
Paid bots can build into an image instead of installing at start: your Dockerfile, or Railpack when there is none, started in seconds on every restart.
Backups
A daily backup of everything under /data for $1 a month per bot, kept seven days, restored in one click.
Always on, locked down
Non-root, a read-only filesystem apart from its own storage, hard memory and CPU limits, and an automatic restart if the bot falls over. No sleep timer, nothing to renew.
Pricing
Per bot, per month, on the same bill as your game servers and your other apps. Yearly is ten months for twelve.
Free $0/mo | Starter $2/mo or $20/yr | Standard $3/mo or $30/yr | Pro $6/mo or $60/yr | |
|---|---|---|---|---|
| RAM | 256 MB | 1 GB | 2 GB | 4 GB |
| CPU | 0.25 vCPU | 1 vCPU | 1 vCPU | 3 vCPU |
| Disk under /data | 3 GB | 5 GB | 10 GB | 20 GB |
| Database | not on this tier | MySQL included | MySQL included | MySQL included |
| Web address | Sleeps when idle | +$2/mo always on | +$2/mo always on | +$2/mo always on |
| Daily backups, 7 days | +$1/mo | +$1/mo | +$1/mo | +$1/mo |
| Image builds | not on this tier | Dockerfile, Railpack | Dockerfile, Railpack | Dockerfile, Railpack |
| Bots | 1 per verified account | As many as you pay for | As many as you pay for | As many as you pay for |
| Start free | Add Starter | Add Standard | Add Pro |
- Always on, no sleep timer, no coins, no daily renewals
- GitHub auto-deploy, live console, crash doctor
- Deploy history and rollback, scheduled commands, usage chart
- Environment variables, private network, three regions
What a typical setup costs
A polling bot
Free tier
$0
256 MB, a quarter of a CPU and 3 GB of disk, always on. Polling needs no address, so there is nothing else to pay for. One free app per verified account.
A webhook bot
Starter plus the always-on address
$4/mo
1 GB and 1 vCPU at $2, the address at $2, so Telegram always has somewhere to deliver. $40 a year if you pay yearly.
Bots go on the same subscription as your game servers and your other apps. Add one in the plan builder: one account, one bill.
Frequently asked questions
- Is Telegram bot hosting free?
- Yes. Every verified account gets one app free, and a bot is an app: 256 MB of RAM, a quarter of a CPU and 3 GB of disk, always on. No card, no coins, no daily renewal clicks and no sleep timer. Polling mode needs nothing else. Paid tiers are $2, $3 and $6 a month, or $20, $30 and $60 a year.
- Polling or webhooks, which should I use?
- Polling unless you have a reason not to. The bot asks Telegram for updates over an outgoing connection, so it needs no web address and runs on the free tier; the template uses it by default. Webhooks are worth it when the bot already has a web address for a dashboard or an API, or when you would rather Telegram called the bot than hold a connection open.
- What does webhook mode need?
- An always-on web address, which means a paid tier: $2 a month or $20 a year on top of the bot. Set TELEGRAM_MODE to webhook and WEBHOOK_URL to the address, and the template registers the webhook at /telegram when it starts. Set WEBHOOK_SECRET as well: Telegram sends it with every update and the bot refuses updates without it. Telegram only delivers to ports 443, 80, 88 and 8443 over https with a valid certificate, which https://name.fadehost.app meets as it is. A free address sleeps when nobody is using it, which is not what you want on the receiving end of a webhook.
- What is in the template?
- A grammY bot in Node.js with /start, /help, /ping, /id, an inline button and an echo. index.js wires up polling or webhook mode and every handler lives in src/commands.js, so adding a command is a few lines. It is a public MIT repository you can read, fork and change.
- Which languages and libraries can I use?
- Node.js, Python, Bun, Deno, Go, Java, PHP and Ruby, picked from what is in your repository. Anything that talks to the Bot API works: grammY, telegraf and node-telegram-bot-api on Node.js, python-telegram-bot and aiogram on Python. A language we do not detect can still run on a paid tier, which builds your Dockerfile.
- Can I deploy my own repository?
- Yes, public or private. Install the FadeHost GitHub App and pick the repository, or paste the URL with an access token. We clone it, install the dependencies, run your build if there is one and start the bot, and every push to the branch redeploys it.
- Can I run a userbot with Telethon or Pyrogram?
- A bot that logs in with a token from BotFather is what this is for, in any library. Automating a personal Telegram account against Telegram's own rules, adding members in bulk, scraping groups or sending unsolicited messages, is not allowed here. The full rules are in the terms.
- Where does the bot keep its data?
- Under /data, which survives deploys and restarts. The code directory is replaced with your repository on every deploy, so a file written next to the code is gone after the next push. For more than a file or two, a paid bot includes a MySQL database at no extra cost; PostgreSQL and Redis are managed databases on the same private network.
- Can the bot also have a web page or a dashboard?
- Yes. Give it a name and it answers at https://name.fadehost.app over HTTPS: a settings page, a status page, the webhook endpoint, or all three on one address. The bot listens on the PORT variable and we route the name to it. On the free tier that address sleeps when nobody is using it and wakes on the next request; on a paid tier it stays on for $2 a month or $20 a year.
- What happens when the bot crashes?
- It restarts on its own, and the crash doctor reads the log and names the cause, most often a token Telegram rejected with a 401 or a dependency missing from package.json. The live console keeps the output, so you can see what the bot said last.
- What happens when a push breaks the bot?
- Open the bot's deploy history, find the last commit that worked and roll back to it. The bot redeploys pinned to that commit while you fix the code; unpin when the fix is pushed.
- What are the limits on each tier?
- Free: 256 MB, 0.25 vCPU, 3 GB of disk, one app. Starter, Standard and Pro: 1, 2 and 4 GB of RAM, 1, 1 and 3 vCPU, and 5, 10 and 20 GB of disk. Every bot has a hard memory and CPU limit, and the 24 hour usage chart on its page shows how close it is running.
- Where does my bot run?
- Europe West (France), Canada East (Montreal) or USA West (Oregon). Pick the region closest to you and to the databases or game servers the bot talks to.
- Can I run more than one Telegram bot?
- One app is free per verified account. After that, add a tier for each bot at $2, $3 or $6 a month, on the same subscription as your game servers and your other apps.
What a bot may and may not do is in the terms.
Read on
App hosting
The same runtime behind this page: web apps, APIs, workers and static sites from a repository.
Discord bot hosting
The same runtime set up for Discord: the token, intents and nine ready-made bots.
WhatsApp bot hosting
A bot on Meta's official Cloud API, with a template that checks the webhook signature.
App hosting documentation
Create an app, the PORT variable, build modes, rollback, schedules, backups and the limits per tier.
The starter bot on GitHub
The grammY template: index.js, the handlers in src/commands.js and the environment it reads.