Telegram Channel Scraper — Public Posts, Views, Media, No Login
Pricing
from $5.00 / 1,000 posts
Telegram Channel Scraper — Public Posts, Views, Media, No Login
Scrape public Telegram channels with no account: messages with text, timestamp, views, media URLs, forwards. Search channels, fetch single posts, or pass a post-ID cursor to track a channel and pay only for new updates. Public channels only — member lists need a login, this Actor never signs in.
Pricing
from $5.00 / 1,000 posts
Rating
0.0
(0)
Developer
Petro Pankov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Telegram Channel Scraper: public posts, views and media, no login
Scrape public Telegram channels without an account. Hand it channel handles or t.me links,
get back every recent post as a clean row: full text, exact timestamp, view count, media URLs,
forward attribution and a reply flag.
No API key. No login. No captcha. No proxy required.
Channel messages come back as structured rows you can send straight to a sheet, a database or an LLM pipeline.
What you get per post
| field | what it is |
|---|---|
channel / channelTitle | handle and display name |
postId / url | post number and direct t.me link |
datetime | exact publish time, ISO 8601 with timezone |
text | full post text |
views | view count, expanded from Telegram's 1.2M shorthand to 1200000 |
media | photo / video / document / voice URLs attached to the post |
forwardedFrom | original channel when the post is a forward |
isReply | whether the post replies to another |
scrapedAt | when this run collected it |
channelSubscribers / channelDescription | with includeChannelMeta on |
Input
{"channels": ["durov", "https://t.me/telegram"],"maxItemsPerChannel": 100,"since": "2026-07-01","includeMedia": true,"minViews": 1000,"excludeForwarded": false,"mediaOnly": false,"includeChannelMeta": false}
channels takes durov, @durov or https://t.me/durov. All three work.
since skips anything older than the date you give, so a daily run costs you the day, not the
archive. maxItemsPerChannel caps posts per channel, which caps what you pay: billing is per
post returned.
You are billed per post returned, and nothing else: a channel with no new posts costs nothing, a
private or nonexistent one is skipped rather than charged, and the same channel listed twice —
durov, @durov, https://t.me/durov — is scraped once, not billed twice.
minViews, excludeForwarded and mediaOnly filter posts out before they are returned, so
they cut the bill and not just the file.
Running it on a schedule
A date is a blunt cursor. Two runs on the same day either hand you the boundary day twice or
lose whatever landed between them, and you pay for the overlap either way. So every run reports
the last post ID it saw per channel — in the log, and in the key-value store as LAST_POST_IDS:
Next incremental run: pass afterPostIds={"durov": 536}
Feed that back as afterPostIds (or afterPostId for a single cursor across all channels) and
the next run returns only what is genuinely new. A quiet channel returns nothing and costs
nothing.
Two other ways to ask
Search inside the channels. searchQuery runs Telegram's own in-channel search over the same
public page, so you can watch twenty channels for one word and pay only for the posts that
mention it. A channel with no match returns nothing rather than an error.
Fetch specific posts. postUrls takes links like https://t.me/durov/536 and returns those
posts alone — useful when something else in your pipeline already found the link. Works with or
without channels.
What people use it for
- Channel monitoring: run it on a schedule, keep only what is newer than the last run.
- Narrative tracking:
forwardedFromshows how a post spreads between channels. - Engagement research:
viewsis on every post, so you can rank content without opening Telegram. - Archiving: text plus media URLs for the channels you care about.
Scope: public channels only, on purpose
This Actor reads Telegram's public channel preview, which anyone can open in a browser without an account. That is the whole design.
It will not scrape member lists, phone numbers or private groups. Those need a logged-in Telegram session, and session-based scrapers break the moment the account behind them gets flagged. Nothing here signs in, so there is no session to lose. A private, invite-only or nonexistent channel is skipped with a clear log line and an empty result rather than a mysterious error.
Fewer moving parts is the point: an anonymous HTML page keeps working.
Notes
- Posts come back newest first.
- Channels are processed one at a time, with a short delay between page requests, so Telegram is not being hammered and neither is your run.
- A channel with no posts returns nothing and says so in the log.