A "Telegram bot" and a "Telegram scraper" solve the same request — get me the messages in this channel — with opposite architectures. After shipping a poller that has collected thousands of messages from public channels, here is the honest comparison, including the part nobody puts in tutorials: the bot API is not free for your use case.
The Bot API path
You register a bot with @botfather, get a token, add the bot to a channel as admin, and call TelegramClient / telethon / pyrogram.
What you pay:
- Membership tax: the bot must be in the channel. For channels you do not own, that means asking the owner to add an anonymous bot admin. Cold-asking 200 channel owners for admin rights is a business development funnel, not a script.
-
API-ID tax: MTProto access needs
api_id/api_hashfrom a personal Telegram account, phone-verified, per account. - Rate rules: flood limits are per-account, and Telegram's anti-abuse for new accounts is real.
What you get: full history on demand, media, member counts, instant push. For channels you own, it is strictly the right tool.
The public-preview path (no key, no bot, no phone)
Every public channel exposes a web preview at https://t.me/s/<channel>. It renders the last ~20 messages as plain HTML. ?before=<msg_id> and ?after=<msg_id> page through history. No login, no token, no captcha wall on this endpoint today.
What you pay:
- A ceiling: you poll; you do not backfill. A channel you discover at message 9,000 will never give you messages 1–8,999.
- A fragility tax: the HTML is a UI, not an API. Selectors change; parse defensively and alert on schema drift.
- Politeness: 1 request per channel per poll interval, exponential backoff on 429s.
What you get: zero-friction onboarding. You can point this at channel #4,000 in your niche five minutes after deciding to, with nothing registered.
The decision, in one table
| You need | Use |
|---|---|
| Channels you own | Bot API |
| Channels you can get added | Bot API |
| 100s of channels you do not own | Preview scraper |
| Full history of old channels | Neither (archive services) |
| Media files at scale | Bot API (preview serves thumbnails) |
The trap that costs people the most time
People build a bot, hit the admin-rights wall on external channels, conclude "Telegram scraping is impossible," and switch to a paid API reseller paying $50+/mo for the same public-preview bytes. The preview endpoint is the free API; it just does not come with docs, so it does not feel legitimate. It is. Read the robots terms, keep your rate honest, ship.
If you want the working version
I run the preview path in production: dedup on forward-trees, a six-column schema, and a diff-based delivery so subscribers get only what changed. The method — schema, dedup math, and the polling scheduler — is written up in the Telegram OSINT Sample Brief (pay what you want, $1+), and the full pipeline with my polling config ships in the Telegram & Web OSINT Bundle ($5).
Questions on the flood-limit specifics — ask in the comments.
Top comments (0)