Telegram Channel Scraper
Pricing
from $1.50 / 1,000 post returneds
Telegram Channel Scraper
Scrape public Telegram channels with no login and no API key, via the t.me/s/ web preview. Get posts with text, date, views, author, media, and source links, plus channel meta (title, subscribers). Paginates back through older posts.
Pricing
from $1.50 / 1,000 post returneds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
11 hours 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.