ActorStack.dev

Telegram has three APIs, and the one you want needs no key at all

The Bot API cannot read a channel it is not in. MTProto needs a phone number and an api_id. The public web preview needs neither, and it is what a channel publishes to the open web.

By Oswaldo Carabano7 min read

Short answer

Telegram offers the Bot API and the MTProto client API, and neither is a good fit for reading public channels at scale. A bot cannot read a channel it has not been added to as an administrator, and MTProto requires an api_id registered against a real phone number, which is an account that can be banned. The third route is not an API at all: every public channel is served a web preview at t.me/s/<handle> to anonymous visitors, with no credential of any kind. That is what this Actor reads, which is why nothing in the pipeline expires.

Key points

  • The Bot API can only read messages from a channel where the bot has been added, so it cannot be pointed at an arbitrary public channel.
  • MTProto requires an api_id and api_hash registered against a phone number, which turns your account into a dependency that can be restricted.
  • The public preview at t.me/s/<handle> is served to anonymous visitors with no credential, and it carries post text, timestamps, view counts, reactions and links.
  • A credential you do not hold cannot expire mid-run, which is the reliability argument for the anonymous route rather than a purity argument.
  • The preview does not render attachments, so the anonymous route genuinely gives less than a signed-in one — and that trade is stated rather than hidden.
On this page6 sections

“Is there a Telegram API?” has an unhelpful answer: there are two, and the one most people mean cannot do the thing they want. It is worth separating them before choosing a tool.

Three routes, and what each one costs you

RouteCredentialCan it read an arbitrary public channel?
Bot APIBot tokenNo — only chats the bot belongs to.
MTProto client APIapi_id + phone numberYes, with an account that can be restricted.
Public web previewNoneYes, for public channels with the preview on.

The Bot API cannot read a channel it is not in

A bot receives updates from chats it is a member of. To read a channel, the bot has to be added to it as an administrator — which you can do to your own channel and cannot do to somebody else's. That single constraint rules the Bot API out for monitoring channels you do not own, which is the usual reason people go looking.

MTProto works, and puts an account at risk

The client protocol is what the real apps speak, and a client library using it can read any public channel and download its files. It needs an api_id and api_hash registered against a real phone number, and the account you sign in with becomes part of your infrastructure.

There is nothing improper about that. The problem is operational: the pipeline now has a credential that a person owns, that can be rate-limited, and whose restriction stops everything at once. Pipelines built this way tend to work well and then stop working entirely.

The web preview is public by construction

Every public channel is served at t.me/s/<handle> to anonymous visitors, which is how a channel link renders anywhere outside Telegram. It carries post text, timestamps, view counts, reactions, links and inline buttons.

Nothing about reading it can expire, because nothing about it was ever issued to you. That is the whole reliability argument, and it is the same one behind not requiring a SAM.gov key.

What the anonymous route genuinely costs

Private channels and groups are also out of reach, permanently and by definition. Passing one returns a free diagnostic row rather than a silent empty result.

When MTProto is the right choice anyway

Three cases: you need attachments, you need channels that are not public, or you need to act rather than read — sending, joining, replying. None of those is a scraping problem, and all of them justify holding an account. Reading public channels at scale is not one of them.

Frequently asked questions

Can a Telegram bot read any public channel?
No. A bot only receives updates from chats it belongs to, so reading an arbitrary public channel requires adding your bot to it as an administrator — which you cannot do to somebody else's channel.
Is MTProto against the rules?
MTProto is Telegram's own client protocol and using it is normal; the risk is operational rather than formal. It ties the pipeline to an account registered to a phone number, and an account that gets restricted takes the pipeline with it.
What does the web preview leave out?
Attachments, principally. Across 893 posts in 29 channels there was not one document, voice note, audio file, sticker, location or round video, so the preview almost certainly does not render them at all. A signed-in client can download files; an anonymous reader cannot.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Platform docschecked 9 Sept 2026
    Telegram Bot APITelegram
  2. Platform docschecked 9 Sept 2026
    Obtaining api_idTelegram
  3. Platform docschecked 9 Sept 2026
    Search — MTProto APITelegram
  4. Operator claimchecked 9 Sept 2026
    Telegram Channel Scraper — Actor README and input schemaActorStack / Apify Store
A row of residential mailboxes on posts in front of a wooden fence and trees.
TelegramExplainer

Channel id versus handle

A channel that renames itself breaks every dataset keyed on its handle. The internal id survives the rename, and it is on every row.

4 min
A person reading on a smartphone in a dark room, their face lit only by the screen.
TelegramGuide

Scrape Telegram channels

A walkthrough of reading public Telegram channels anonymously: the four modes, when search beats reading a history, and what the anonymous preview does and does not render.

9 min
A person reading on a smartphone in a dark room, their face lit only by the screen.
TelegramMeasured

The attachment finding

Documents, voice notes, audio, stickers, locations and round videos never appeared once in the anonymous preview. Fields that would always be false were cut rather than shipped.

5 min