Telegram Channel Scraper - Posts, Views & Reactions
Pricing
from $2.10 / 1,000 results
Telegram Channel Scraper - Posts, Views & Reactions
Reads public Telegram channels over plain HTTP -- no login, no session string, no bot token. Returns each post's text, date, views, reactions, photos, videos, polls, replies and forwards, plus the channel profile. Tells a private or non-existent handle apart from an empty channel.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Telegram Channel Scraper — Posts, Views & Reactions
Reads public Telegram channels over plain HTTP. No login, no session string, no bot token, no API id/hash, no phone number.
Most Telegram scrapers drive MTProto with a logged-in user account. This one
reads https://t.me/s/<channel> — the server-rendered preview Telegram itself
publishes to anonymous visitors — so there is no account to get rate-limited,
flagged or banned, and nothing to hand over.
What you get
Three record types share one dataset, told apart by recordType:
recordType | One per | Carries |
|---|---|---|
CHANNEL | channel | title, @username, description, verified flag, subscriber count, photo/video/link counters, avatar URL, and the channel's internal numeric id |
MESSAGE | post | id, permalink, ISO date + unix timestamp, full text (and its HTML), views, reactions, photos, videos (with direct CDN URLs), polls, link previews, reply quotes, forward source, inline buttons, author signature |
SEARCH_SUMMARY | channel | what was actually applied, pages fetched, id range covered, duplicates skipped, whether the walk hit your cap or the start of the channel |
ERROR | failed input | a named reason — every input maps to at least one row |
Input
| Field | Meaning |
|---|---|
channels | @durov, durov, t.me/durov or https://t.me/s/durov — all accepted |
searchQuery | optional keyword filter, applied by Telegram inside each channel |
maxMessagesPerChannel | 0 walks the whole readable history back to post #1 |
sinceMessageId | incremental mode: only posts newer than an id you already have |
startFromMessageId | resume a deep backward crawl from a known id |
includeMessages / includeChannelProfile | either half can be switched off |
For scheduled monitoring: take lastMessageId from the summary row and feed
it back as sinceMessageId next run.
What it will tell you that a naive scraper will not
A handle that is not a readable channel still returns HTTP 200. Telegram
redirects /s/<handle> to /<handle> and serves a normal-looking landing
page with zero messages. Four different situations look identical at the
status-code level, and this actor names each one:
channel_not_found— the handle does not existnot_a_channel— it is a user account, or a botpreview_unavailable— a real channel that publishes no public preview (private, a group, or "Preview channel" switched off)
That third case is the one that quietly costs you data. @cryptocom is a
genuine channel with 366 subscribers whose history is not publicly readable —
a scraper that only counts messages reports "0 posts" and the run looks
successful.
Counts are rounded by Telegram before they reach the page. Views arrive as
"447K", subscribers as "9.72M". Both forms are kept: viewsRaw /
subscribersRaw hold Telegram's own string, views / subscribers hold the
expanded integer, and viewsApproximate / subscribersApproximate tell you
when precision was already lost upstream. The exact number is not in the
document at all.
Custom-emoji reactions carry no emoji. Premium reactions render as an
empty <tg-emoji emoji-id="…"> element — the character itself is absent from
the HTML. Rows carry emoji (null for those) and customEmojiId, plus an
isPaid flag for Telegram Stars reactions.
Known limits — Telegram's, not this actor's
- File attachments are not rendered in the public preview. Documents,
voice notes, audio tracks, stickers and round videos have no markup on the
page at all. A post on a file-sharing channel arrives with its caption text
and no file. Verified against several such channels;
SEARCH_SUMMARYstates this on every run aspreviewRendersFileAttachments: false. - Poll results are percentages. Per-option vote counts are not published; only the percentage per option and the total voter count. No absolute per-option number is invented from them.
- Comment threads are not part of the preview — discussion-group replies live in a linked group, which has no public preview of its own.
- Private channels and invite links (
t.me/+…,t.me/joinchat/…) are out of scope by construction: there is nothing public to read. - Video URLs are direct, tokenised Telegram CDN links. They work, and the token expires — download promptly rather than storing the URL.
Politeness
One origin serves every public channel, so minRequestInterval defaults to
1 second and is exposed as an input. t.me/robots.txt returns HTTP 404, which
RFC 9309 §2.3.1.3 treats as no restrictions; no WAF was observed (7 of 7 TLS
profiles clean on a cold request). A proxy is optional and off by default.