Telegram Channel Scraper - Posts, Views & Reactions avatar

Telegram Channel Scraper - Posts, Views & Reactions

Pricing

from $2.10 / 1,000 results

Go to Apify Store
Telegram Channel Scraper - Posts, Views & Reactions

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

Ibnu Adzim

Maintained by Community

Actor 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:

recordTypeOne perCarries
CHANNELchanneltitle, @username, description, verified flag, subscriber count, photo/video/link counters, avatar URL, and the channel's internal numeric id
MESSAGEpostid, 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_SUMMARYchannelwhat was actually applied, pages fetched, id range covered, duplicates skipped, whether the walk hit your cap or the start of the channel
ERRORfailed inputa named reason — every input maps to at least one row

Input

FieldMeaning
channels@durov, durov, t.me/durov or https://t.me/s/durov — all accepted
searchQueryoptional keyword filter, applied by Telegram inside each channel
maxMessagesPerChannel0 walks the whole readable history back to post #1
sinceMessageIdincremental mode: only posts newer than an id you already have
startFromMessageIdresume a deep backward crawl from a known id
includeMessages / includeChannelProfileeither 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 exist
  • not_a_channel — it is a user account, or a bot
  • preview_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_SUMMARY states this on every run as previewRendersFileAttachments: 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.