Telegram Public Channel Scraper
Pricing
from $2.00 / 1,000 messages
Telegram Public Channel Scraper
Messages, views, reactions, media, polls and replies from public Telegram channels. No login, no proxy, fast.
Pricing
from $2.00 / 1,000 messages
Rating
0.0
(0)
Developer
Nestor Cabrera
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Extract messages, views, reactions, media, polls, replies and forwards from public Telegram channels. No Telegram account, no login, no proxy and no API keys. Results are sorted newest first and are ready to export as JSON, CSV or Excel.
It reads the public web preview that Telegram publishes at t.me/s/<channel>, so it only works on channels that have that preview enabled.
What you can do with it
- Monitor channels on a schedule. Turn on
incrementaland run it hourly or daily: each run returns only the messages published since the previous one, so you never pay twice for the same message. Connect the dataset to Make, n8n, Zapier, Slack or a webhook for alerts. - News and market watching. Follow news, crypto, finance, tech or local channels and feed the text, links and reaction counts into your own dashboards. (This is data collection, not financial advice.)
- Brand and topic listening. Search a keyword across the channels you choose. Filtering happens on Telegram's side, so you only pay for matches.
- Content and competitor research. Compare views, reactions and posting frequency across channels to see what actually performs.
- Journalism, fact-checking and OSINT. Archive public posts with their original URLs and timestamps before they are edited or deleted.
- Datasets for analysis or NLP. Export clean text with dates, metadata, hashtags and mentions to JSON, CSV or Excel. Check the licensing and privacy rules that apply to your use.
- Time windows. Pull exactly "the last 7 days" or "September 2026" with
sinceDateanduntilDate, so you don't pay to scan history you don't need.
Input
| Field | Description |
|---|---|
channels | Usernames or links: durov, @durov, https://t.me/durov. Duplicates are merged. Private invite links (t.me/+...) can't be read and are skipped with a warning. |
maxMessagesPerChannel | Newest messages first. Default 100. Also your cost cap per channel. |
sinceDate / untilDate | ISO date (2026-10-01) or relative (7d, 12h, 2w). Paging stops as soon as it passes sinceDate, so you never pay to scan history you don't need. |
searchQuery | Optional keyword filtered by Telegram. |
incremental | Return only messages newer than the last one delivered in a previous run (kept per channel in a store on your account). Default off. |
includeChannelInfo | Adds one free record per channel (title, description, subscribers, counters). Default on. |
Example:
{"channels": ["durov", "https://t.me/telegram"],"maxMessagesPerChannel": 200,"sinceDate": "7d","searchQuery": "update"}
Output
One dataset item per message (type: "message"):
{"type": "message","channel": "durov","id": 548,"url": "https://t.me/durov/548","date": "2026-09-11T16:04:02+00:00","author": "Pavel Durov","text": "Plain text with line breaks preserved","textHtml": "<div class=\"tgme_widget_message_text\">...</div>","views": 2130000,"reactions": [{"emoji": "👍", "count": 1200}],"totalReactions": 72470,"forwardedFrom": {"name": "Source channel", "url": "https://t.me/source/12"},"replyTo": {"id": 540, "url": "https://t.me/durov/540", "author": "Pavel Durov", "text": "..."},"photos": ["https://cdn..."],"videos": [{"url": "https://cdn...", "thumbnail": "https://cdn...", "duration": "0:42"}],"documents": [{"title": "Report", "extra": "PDF"}],"poll": {"question": "...", "kind": "Anonymous Poll", "options": [{"text": "A", "percent": 24}]},"linkPreview": {"url": "...", "siteName": "...", "title": "...", "description": "...", "image": "..."},"links": ["https://example.com"],"hashtags": ["#news"],"mentions": ["@someone"]}
Plus one type: "channel" record per channel and, if a channel can't be read, a type: "error" record that explains why. Neither of those is charged.
Incremental mode in detail
- First run: you get the newest messages (up to
maxMessagesPerChannel) and the actor remembers the newest id per channel. - Next runs: only messages newer than that id are returned and charged. If nothing new was posted, the run costs almost nothing.
- If more than
maxMessagesPerChannelnew messages appeared between two runs, you get the newest ones and the older gap is skipped. Raise the limit or run more often if you must not miss any. - If a run stops early (for example, you hit your maximum charge), the pointer for that channel is not advanced, so the next run may repeat some messages but will never skip any.
- Combining it with
searchQuerytracks new matching messages only.
Good to know
- Public channels only. Groups, private channels, member lists, comments and anything behind a login are not available through the public preview.
- Channels without a preview (many large publishers disable it) return a clear error instead of an empty result.
- Video and media URLs are Telegram CDN links that can expire. Download what you need soon after the run.
- Reaction counts and views are a snapshot at the time of the run.
- Telegram rate-limits heavy traffic. The actor spaces out requests and retries with backoff automatically.
Is it legal?
It only collects data that Telegram already shows publicly on the web. You are responsible for how you use it, including compliance with Telegram's terms and with data-protection law such as GDPR when messages contain personal data.