Pricing
from $1.50 / 1,000 post returneds
Telegram Channel Scraper
Scrapes public Telegram channels via the t.me/s/ web preview (no login, no API key) and returns posts with text, date, views, author, media, and source links plus channel title and subscriber count. Top use: monitoring topical channels like crypto si
Pricing
from $1.50 / 1,000 post returneds
Rating
5.0
(2)
Developer
Actor stats
0
Bookmarked
3
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Scrape public Telegram channels with no login and no API key, using Telegram's
own server-rendered web preview at https://t.me/s/<channel>. No bot token, no phone
number, no MTProto.
What it does
- Accepts a list of channels in any common form:
durov,@durov, orhttps://t.me/durov. - Reads the channel header: title, description, and counters (subscribers, photos, videos, links).
- Returns one row per post with text (links and hashtags preserved), date, views, author, media info, and any forwarded/source link.
- Pages back through older posts automatically via
?before=<id>until it hitsmaxItemsor the channel's earliest post. - Dedupes posts by message id.
Only works for public channels that expose a web preview. Private channels, groups,
and channels with the preview disabled will return a NOT_FOUND diagnostic row.
Input
| Field | Type | Default | Description |
|---|---|---|---|
channels | string[] | ["telegram","durov"] | Channels to scrape (username, @handle, or t.me link). |
maxItems | integer | 100 | Max posts per channel. |
includeChannelInfoRow | boolean | true | Emit one channel summary row before each channel's posts. |
proxyConfiguration | object | off | Optional. The t.me/s/ preview is a public, no-auth endpoint with no anti-bot, so a proxy is not required and is off by default. Only enable it (Apify Proxy, datacenter is fine) if you hit IP rate limits on high-volume runs. |
Output
One channel-info row per channel (when enabled), then one row per post:
{"ok":true,"rowType":"post","channel":"durov","messageId":505,"postUrl":"https://t.me/durov/505","text":"TON is #1 in annual staking rewardsβ¦","date":"2026-05-08T17:41:53.000Z","views":"3.76M","author":"Pavel Durov","hasMedia":true,"mediaType":"photo","mediaUrl":"https://cdn4.telesco.pe/file/β¦","link":null,"channelTitle":"Pavel Durov","subscribers":"11M"}
mediaType is one of photo, video, roundvideo, voice, sticker, document, or null.
Nullable fields: the preview only exposes what Telegram renders, so several
fields are commonly null: text (media-only posts), views (small/old channels),
author (most channels don't sign posts), mediaType / mediaUrl (text-only posts),
and link (posts that aren't forwards and have no link preview). On the channel-info
row, subscribers, photosCount, videosCount, and linksCount can be null when
the header doesn't show that counter.
Billing
Charged per post row (post event). Channel-info rows and diagnostic rows
(BAD_INPUT, NOT_FOUND, NO_RESULTS, network errors) are not charged.
Troubleshooting
NOT_FOUND/NO_RESULTSβ the channel is private, deleted, a group, or has its web preview disabled. Only public channels with a workingt.me/s/<name>page can be scraped.BAD_INPUTβ no usable channel was provided. Pass a username,@handle, ort.melink.RATE_LIMITEDon large runs β lowermaxItemsor enable the optional proxy to spread requests across IPs.
