ActorStack.dev

How to scrape public Telegram channels without an account

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.

By Oswaldo Carabano9 min read

Short answer

Public Telegram channels can be read without a login, a phone number, a bot token or an API key, because Telegram serves every public channel a web preview at t.me/s/<handle> to anonymous visitors. Choose messages mode to read a channel's posts, search mode to have Telegram filter by keyword on its side, discover mode to search a curated catalogue by niche without knowing channel names, and channel-info mode for metadata and an exact subscriber count. Post text arrives on 99.6% of rows and view counts on 99.2%, measured over 893 posts across 9 channels.

Key points

  • The public preview at t.me/s/<handle> is served to anonymous visitors, so no account, phone number, bot token or API key is involved at any point.
  • Search mode filters on Telegram's side: 20 matching posts cost 1 request and 24 KB, against 25 requests and 712 KB for reading the same channel's history.
  • Discover mode searches a curated catalogue of verified channels by niche, so a search does not require knowing any channel names — and the run log states how many channels were searched.
  • Attachments are not available to any anonymous reader: 893 posts across 29 channels produced zero documents, voice notes, audio, stickers, locations or round videos.
  • A handle that cannot be read returns a free diagnostic row naming which of five cases it was, rather than an empty result.
On this page8 sections

Telegram publishes every public channel twice: once inside the app, and once as a plain web page that any anonymous visitor can request. The second one is what makes a scraper possible without an account, and it is the whole basis of this Actor.

Why there is no login step

A public channel is served at t.me/s/<handle> to anyone who asks, with no cookie, no token and no phone number. That is not a loophole; it is how a channel gets shared outside Telegram at all. Everything below reads that page.

The practical consequence is reliability rather than principle. There is no session to expire halfway through a backfill and no account to be restricted, which is the failure mode of every scraper built on a signed-in client. The three routes into Telegram data compares this with the Bot API and MTProto.

Step 1 — pick the mode that matches what you know

ModeYou already knowWhat it returns
messagesthe channelsEvery post, newest or oldest first, up to your cap.
searchthe channels and a keywordOnly posts matching the keyword, filtered on Telegram's side.
discovera keyword and a nicheMatching posts across a curated catalogue of verified channels.
channel-infothe channelsMetadata and the exact subscriber count, one row per channel.

The choice is a cost decision more than a feature one. Reading a channel to find twenty posts about one topic cost 25 requests and 712 KB in testing; asking Telegram to filter cost 1 request and 24 KB for the same twenty — the measurement.

Step 2 — name the channels, four ways that all work

durov, @durov, t.me/durov and https://t.me/s/durov all mean the same channel and all resolve to the same internal id. Paste whichever form you happen to have.

In discover mode you name no channels at all: you pick a niche and the Actor searches the largest verified channels in it — what that catalogue reaches and what it does not.

Step 3 — set the caps before the run, not after

maxMessagesPerChannel is a hard cap and it defaults to 200, so a channel with 40,000 posts cannot quietly run up a bill. In discover mode the default drops to 20, because that mode opens many channels at once.

sinceDate is the other brake worth setting. Walking newest-first stops as soon as it passes the date, so posts older than your window are never fetched and never charged.

Step 4 — run it

input.json
{
  "mode": "search",
  "channels": ["durov", "https://t.me/s/tgbeta"],
  "searchTerms": ["react", "typescript"],
  "exactMatch": true,
  "sinceDate": "2026-06-01",
  "maxMessagesPerChannel": 500
}

exactMatch is on by default and removes the posts Telegram matched by word stem rather than by your term — a search for hiring otherwise returns a post about hiring a cab. Discarded candidates are never charged.

Reading the output

Identity fields are at 100%: datetime, message id, url, channel username and telegram_channel_id. Post text is at 99.6% and never truncated. View counts arrive on 99.2% of rows, as a typed number and as the string Telegram displayed. The full field reference gives the rate for all of them, measured over 893 posts across 9 channels.

What a run costs

$0.001 per post, $0.001 per search result, $0.002 per channel record, $0.00001 to start. Five hundred posts is fifty cents. Three things are never charged: error and diagnostic rows, candidates discarded by exact match, and rows you already received if a run is interrupted and resumed.

Charging happens immediately after each row is delivered rather than in a batch at the end, so a run that dies halfway bills exactly what it delivered.

Four mistakes that waste a run

Reading a history when you wanted a topic. If you know the keyword, search mode does the filtering on Telegram's side and you stop paying for the posts you walk past.

Expecting attachments. Across 893 posts in 29 channels the anonymous preview rendered no documents, voice notes, audio, stickers, locations or round videos — the finding. Photo and video flags do ship.

Passing a group or an invite link. Only public channels with the web preview enabled can be read. Anything else returns a free diagnostic row naming which case it was, which is more useful than an empty result and costs nothing.

Planning around the average email rate. 3.0% overall spans 0% in news channels and 9.0% in job channels. Plan against your channel type.

Frequently asked questions

Do I need a Telegram account or a phone number?
No. The Actor reads the public preview pages Telegram serves to any anonymous visitor at t.me/s/<handle>. There is no session to expire and no account that can be banned, which is the failure mode of scrapers that sign in with a phone number.
Can I search Telegram without knowing channel names?
Yes, with discover mode, which searches a curated catalogue of verified public channels grouped by niche. It does not reach channels outside that catalogue, and the run log states how many were searched, so you always know the denominator.
How many posts can I read from one channel?
Up to 20,000 per channel, capped by `maxMessagesPerChannel`, which defaults to 200. In discover mode the default drops to 20 per channel because that mode opens many channels at once.
Does it work on private channels or groups?
No. Only public channels with their web preview enabled. Anything else — a group, a bot, a user account, a private channel, an invite link — returns a free diagnostic row naming which it was.

Sources

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

  1. Operator claimchecked 9 Sept 2026
    Telegram Channel Scraper — Actor README and input schemaActorStack / Apify Store
  2. Platform docschecked 9 Sept 2026
    Telegram Bot APITelegram
  3. Platform docschecked 9 Sept 2026
    Obtaining api_idTelegram
  4. Operator claimchecked 9 Sept 2026
    Telegram Terms of ServiceTelegram
Printed notices and leaflets stapled to a wooden hoarding on a street.
TelegramGuide

Channel discovery

Discover mode searches a curated catalogue of verified public channels by niche. What that catalogue is, what it is not, and why searching for a technology beats searching for an English phrase.

6 min
A laptop screen showing a plain text-mode terminal with a command prompt.
TelegramExplainer

The Telegram API question

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.

7 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