Telegram Channel Info Scraper — Subscribers & Stats avatar

Telegram Channel Info Scraper — Subscribers & Stats

Pricing

from $2.13 / 1,000 channels

Go to Apify Store
Telegram Channel Info Scraper — Subscribers & Stats

Telegram Channel Info Scraper — Subscribers & Stats

Size up public Telegram channels before reading any of them: one row per channel with its title, handle, bio, subscriber count, the counters its header states, and its newest post number. No posts saved and no login; channel names come from the input list.

Pricing

from $2.13 / 1,000 channels

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Share

Telegram Channel Info Scraper

Find out how big a public Telegram channel is, and what it says about itself, without reading a single post. Each channel in the list becomes one row: its display title, its handle, its bio, its subscriber count, every counter its header states, and the number of its newest post. Hundreds of channels can be looked up in one run.

Nothing is signed into. No bot token, no phone number and no API credentials are involved at any point, because the source is the public channel preview that any browser can open at t.me/s/<channel>. The channel names come from the run's input; Telegram publishes no directory, so there is nothing to search through here.

What a run returns

{
"channel": "telegram",
"channel_title": "Telegram News",
"channel_url": "https://t.me/s/telegram",
"username": "telegram",
"description": "The official Telegram on Telegram.",
"subscribers_display": "9.82M",
"counters": {
"subscribers": "9.82M",
"photos": "14",
"videos": "225",
"links": "372"
},
"newest_message_number": 454
}

Every row carries the same eight fields: channel, channel_title, channel_url, username, description, subscribers_display, counters and newest_message_number. A value the channel does not state is returned as null rather than omitted, with one deliberate exception: counters is an empty object rather than null when a header states no counters at all.

channel is the username the row was requested under, cleaned back to the bare handle, and username is the handle as Telegram itself states it on the page. The two are normally identical, and comparing them is worth doing when a channel is being resolved under a name that may have changed. channel_title is the display title, which an owner can change at any time; channel is the stable key.

Accepted input

channels is required and is the whole input. It takes one or more channels, one per line, in whatever form is closest to hand: telegram, @telegram, t.me/telegram, https://t.me/s/telegram and https://t.me/telegram/435 all reduce to the same username. Duplicates are removed before the first lookup, so a channel written three ways is resolved once and charged once.

There is no cap and no cursor, because there is nothing to page through. One channel produces one row.

{
"channels": ["telegram", "durov", "https://t.me/s/telegram"]
}

Questions

Why is counters a map instead of fixed columns? Because which counters exist varies per channel. Telegram renders between one and four of them in a channel header, covering subscribers, photos, videos and links, and a channel that has never posted a video has no videos counter at all. Fixed columns would either state null for counters a channel does not have or drop a label Telegram introduces later, and both misreport the page. A key that is present should be read; a key that is absent means the channel states no such counter, which is not the same as zero. subscribers_display is lifted out under a predictable name because it is the counter almost every run is after.

Why is subscribers_display text such as 9.82M rather than a number? Because that is all the public page publishes. There is no exact subscriber count anywhere an anonymous reader can reach, so 9.82M is the measurement, and expanding it to 9820000 would invent three digits Telegram never gave with nothing downstream able to tell them from measured ones. The value is passed through as it arrived, and the _display suffix states the type before anyone parses it. It is null on a channel whose header states no subscriber counter.

What happens to a channel that is private, misspelled, or actually a group? It is skipped, and the run carries on with the rest of the list. Telegram serves the same join page, with HTTP 200, for a channel that does not exist, for a private channel, for a group and for a chat, so those four cases are one answer from outside and cannot be told apart. The run logs a warning naming the channel, and a channel that produced no row is not charged for; a list of four hundred channels should not be lost to one retired name. An entry that is not a Telegram name at all is dropped the same way, before any lookup: a name is 5 to 32 characters, starts with a letter, and then uses letters, digits or underscores.

Is newest_message_number the number of posts a channel has published? It is the newest post's position in the channel's own numbering, which counts up from 1. That makes it a reasonable proxy for how much a channel has published, and an exact answer to whether anything has been posted since a previous run: store it, compare it next time, and a channel whose number has not moved has published nothing. It is a position in the channel's numbering rather than a count of the posts still visible, so treat it as an upper bound on how much a channel holds.

Does listing the same channel twice cost twice? No. @telegram, t.me/telegram and https://t.me/s/telegram are one channel written three ways, and the list is reduced to unique names before the first lookup. One row is produced and one row is charged.

Are reactions, engagement rates or post-level statistics available here? No, and not from the posts Actor either. The public preview page states the header counters listed above and nothing more; reactions and comment threads are not on it, so neither is reachable without an account. A post's view count is the one engagement figure the preview does carry, and Telegram Channel Scraper collects it per post.

Can channels be found by keyword or topic rather than named? No. Telegram publishes no public directory of channels and no list this Actor could walk, so the names have to come from somewhere else: a newsletter, a competitor's link list, a spreadsheet already in hand. This is a property of Telegram rather than a gap I intend to close later.

Telegram Channel Scraper exports the posts themselves, with each post's text, media, view count, timestamp, and what it was forwarded from or replying to. Resolving a list here first and exporting only the channels worth reading is the cheaper order of operations; newest_message_number from a row here is also the value that Actor takes as after to collect only what is new.