Telegram Public Channel Scraper avatar

Telegram Public Channel Scraper

Pricing

from $2.00 / 1,000 messages

Go to Apify Store
Telegram Public Channel Scraper

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

Nestor Cabrera

Maintained by Community

Actor 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 incremental and 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 sinceDate and untilDate, so you don't pay to scan history you don't need.

Input

FieldDescription
channelsUsernames 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.
maxMessagesPerChannelNewest messages first. Default 100. Also your cost cap per channel.
sinceDate / untilDateISO 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.
searchQueryOptional keyword filtered by Telegram.
incrementalReturn only messages newer than the last one delivered in a previous run (kept per channel in a store on your account). Default off.
includeChannelInfoAdds 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 maxMessagesPerChannel new 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 searchQuery tracks 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.

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.