Telegram Channel Posts Scraper avatar

Telegram Channel Posts Scraper

Pricing

$1.00 / 1,000 results

Go to Apify Store
Telegram Channel Posts Scraper

Telegram Channel Posts Scraper

Scrape public Telegram channels without an account or API key: posts with text, date, views, reactions, media links, link previews, hashtags, forwards and replies, plus channel info and subscriber counts. Filter by date or keyword.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

Çınar Özkan

Çınar Özkan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Download the posts of public Telegram channels into a table or JSON: text, date, views, reactions, media links, link previews, hashtags, forwards and replies, plus the channel's subscriber count. No Telegram account, no API key, no phone number.

Try it in about a minute: keep the default input (durov) and press Start. You get the channel summary and the 20 newest posts.

What you get

  • Posts, newest first: full text (line breaks kept), exact post link, date and time (UTC), views, edited flag, author signature.
  • Reactions: every reaction with its count, and the total.
  • Media: links to photos and videos, video length, file names and sizes of documents.
  • Link previews (site, title, description, image), hashtags, mentions and all links found in the text.
  • Forwards and replies: who a post was forwarded from, and which post it answers.
  • Channel summary (one row per channel): title, description, verified badge, subscribers, number of photos, videos and links.
  • Filters: only posts from/until a date (7 days, 2026-10-01), only posts that contain your keywords, a maximum per channel.

Use cases

  • Watch what competitors, brands or news channels post, and which posts get the most views and reactions.
  • Track a keyword or a product name across channels you follow.
  • Build datasets for research, media monitoring or sentiment analysis.
  • Measure channel growth by saving the subscriber count on a schedule.

How it works

The Actor reads the public web preview that Telegram publishes for channels at t.me/s/<channel>. It sends ordinary web requests, about 20 posts per request, page by page for each channel, with up to three channels read at the same time. It does not log in and cannot see anything that is not publicly visible.

Input

FieldWhat it does
Telegram channelsOne per line: durov, @durov, https://t.me/durov or https://t.me/s/durov.
Maximum posts per channelNewest first. 0 returns only the channel summary. Default 100.
Only posts from / untilAbsolute (2026-10-01) or relative (7 days, 2 weeks, 3 months).
KeywordsKeep only posts containing at least one of them (not case sensitive).
Add a channel summary rowOne extra row per channel. Counts as one result.
Maximum pages per channelSafety limit for filters that match rarely. 200 pages reach back about 4,000 posts.
ProxyOff by default. Turn on Apify Proxy if Telegram refuses your requests.

Output

Each post is one row. Example (shortened):

{
"type": "post",
"channel": "durov",
"postId": 531,
"url": "https://t.me/durov/531",
"date": "2026-07-16T20:45:25+00:00",
"text": "🩵 Telegram now has a Rich Text Editor.\n\nIt supports tables, headings, ...",
"views": 5840000,
"author": "Pavel Durov",
"isForwarded": false,
"media": [{ "type": "video", "url": "https://cdn4.telesco.pe/file/b231b9b161.mp4?t...", "postUrl": "https://t.me/durov/531" }],
"mediaTypes": ["video"],
"reactions": [{ "emoji": "stars", "count": 6300 }, { "emoji": "custom", "count": 54600, "customEmojiId": "5265077361648368841" }],
"reactionsTotal": 95110
}

And the channel summary row:

{ "type": "channel", "channel": "durov", "title": "Pavel Durov", "verified": true, "subscribers": 10200000,
"photosCount": 102, "videosCount": 47, "linksCount": 200, "description": "Founder of Telegram." }

Download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

Pricing

Pay per result: every post and every channel summary row is one result. Set a maximum cost per run and the Actor stops saving as soon as it is reached, so you never pay for more than you allowed. See the Pricing section on this page for the price per 1,000 results.

Calling it from Python

# pip install "apify-client>=3"
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<this Actor>").call(run_input={
"channels": ["durov", "telegram"],
"maxPostsPerChannel": 50,
"keywords": ["update"],
})
for row in client.dataset(run.default_dataset_id).iterate_items():
print(row["type"], row.get("date"), row.get("views"), (row.get("text") or "")[:60])

Tutorial and ready-made scripts

Good to know

  • Only channels with the public web preview switched on can be read. Private channels, groups, users and bots cannot. If a channel is not available you get the reason in the run log and in the CHANNEL_ERRORS record of the run's key-value store.
  • Numbers are rounded by Telegram. Views, reactions and subscribers appear on the page as 5.84M or 1.2K, so they are approximate for big values.
  • Custom emoji reactions come with their customEmojiId; Telegram does not show the picture on the public page.
  • Media links are temporary. Photo and video links on Telegram's servers can expire, so download the files you need soon after the run.
  • Very large videos may come with a thumbnail and the post link only.
  • No search across all of Telegram. You give the channels; the keyword filter works inside each channel.
  • Not affiliated with Telegram. Use the data in line with Telegram's terms and the laws that apply to you, especially for anything about individuals.

FAQ

Do I need a Telegram account or an API key? No.

Can it read a private channel or a group? No, only what anyone can see in a browser at t.me/s/<channel>.

How fast is it? In our cloud tests one channel gave 400 posts in about 30 seconds, and three channels at once gave 600 posts in about 22 seconds. Time grows with the number of pages, so very large histories take a few minutes.

A channel returns nothing. Why? Its owner switched the web preview off, or the name does not exist. The reason is written to the log.

Something looks wrong. Open an issue on the Actor page with the channel name and what you expected.