Telegram Channel Scraper: Posts, Views, Reactions & Media avatar

Telegram Channel Scraper: Posts, Views, Reactions & Media

Pricing

from $1.00 / 1,000 post scrapeds

Go to Apify Store
Telegram Channel Scraper: Posts, Views, Reactions & Media

Telegram Channel Scraper: Posts, Views, Reactions & Media

Scrape any public Telegram channel without an account, phone number or API keys. Get posts with full text, views, reactions, media URLs, links, hashtags, forwards and channel stats (subscribers, verified). Date range, keyword search, new-posts-only monitoring. Fast and cheap: $1 per 1,000 posts.

Pricing

from $1.00 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

JackKnifeAI

JackKnifeAI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Telegram Channel Scraper: Posts, Views, Reactions & Media (No Login)

Scrape any public Telegram channel without a Telegram account, phone number, API ID or bot token. Get every post's full text, views, reactions, media URLs, links, hashtags, mentions and forwards, plus channel stats such as subscribers, verified status and media counts. You can filter by date, keyword and minimum views, search inside a channel, and run in monitoring mode so each run returns only new posts.

$1 per 1,000 posts, about 5x cheaper than most Telegram scrapers.

Use cases

  • Crypto and trading signal research: collect posts, views and reactions from signal and news channels.
  • Brand, news and OSINT monitoring: schedule hourly runs with onlyNewPosts to get only fresh posts, then send them to Slack, Sheets or a webhook.
  • Influencer and channel analytics: compare subscribers, views per post and engagement across competitor channels.
  • Datasets for NLP or AI: export clean post text with dates and engagement as JSON, CSV or Excel.
  • Lead generation: extract the links, @mentions and hashtags that channels share.

Features

  • ✅ No login, no phone number, no Telegram API keys
  • ✅ Many channels per run, with full history paging (tested at 1,000+ posts per channel)
  • ✅ Views, reactions with counts, paid stars, author signature and edited flag
  • ✅ Photos, videos, video thumbnails, documents, polls and link previews
  • ✅ Forwarded-from channel, reply-to links, hashtags, mentions and outbound links
  • ✅ Search posts inside a channel (searchQuery)
  • ✅ Filters: last N days, from date, keywords, minimum views, exclude forwards. Filtered-out posts are free.
  • ✅ Monitoring mode (onlyNewPosts) remembers the last post per channel between runs
  • ✅ A channel info row with subscribers, description, photo and media counts

Input

FieldDescription
channelsUsernames or links: durov, @telegram, https://t.me/durov, https://t.me/s/durov
maxPostsPerChannelNewest first, default 100
searchQueryOptional search within each channel
postedWithinDays / dateFromDate limits
keywordsKeep posts containing any of these words
minViewsKeep posts with at least this many views
excludeForwardedSkip forwarded posts
onlyNewPostsReturn only posts newer than the previous run
stateStoreNameName of the key-value store used for monitoring state. Use a different name for each separate monitor.
includeChannelInfoAdd one channel row per channel (default true)
proxyConfigurationOptional Apify proxy
{
"channels": ["durov", "telegram", "https://t.me/bbcrussian"],
"postedWithinDays": 7,
"minViews": 10000,
"maxPostsPerChannel": 500
}

Example: hourly monitor for new posts mentioning bitcoin

{
"channels": ["durov", "telegram"],
"keywords": ["bitcoin", "btc"],
"onlyNewPosts": true,
"stateStoreName": "my-btc-monitor"
}

Output

Post row (type: "post"):

{
"type": "post",
"channel": "durov",
"postId": 551,
"url": "https://t.me/durov/551",
"date": "2026-10-10T14:22:43+00:00",
"text": "💸 If your wallet doesn’t look like this, don’t even bother sending me money for my birthday! 🎂",
"textLength": 95,
"views": 2030000,
"reactionsTotal": 61150,
"reactions": [{"emoji": null, "customEmojiId": "5936157098181135162", "count": 38200}],
"paidStars": 60300,
"author": "Pavel Durov",
"mediaType": "video",
"photos": [],
"videos": ["https://cdn4.telesco.pe/file/...mp4"],
"documents": [],
"links": [],
"hashtags": [],
"mentions": [],
"isForwarded": false,
"forwardedFrom": null,
"replyToUrl": null,
"channelTitle": "Pavel Durov",
"channelSubscribers": 10100000,
"scrapedAt": "2026-11-04T04:39:04+00:00"
}

Channel row (type: "channel"):

{
"type": "channel",
"username": "durov",
"url": "https://t.me/durov",
"title": "Pavel Durov",
"verified": true,
"description": "Founder of Telegram.",
"subscribers": 10100000,
"photos": 102,
"videos": 47,
"links": 200
}

A private, deleted or non-existent channel produces a free type: "error" row, and the run continues.

The Posts and Channels tabs show tables. You can export JSON, CSV, Excel or HTML, or connect the API, Make, Zapier, n8n, Google Sheets or webhooks.

Pricing (pay per event)

  • $0.001 per post, which is $1 per 1,000 posts
  • $0.002 per channel info row
  • Posts removed by your filters are free.
  • Set a maximum cost per run and the actor stops cleanly when it's reached.

Limits

  • Works only with public channels that have a web preview at t.me/s/<name>. Private groups, invite links (t.me/+...) and chats aren't supported.
  • Media URLs are Telegram CDN links that expire after a while. Download the files soon after scraping if you need them.
  • Comment threads aren't included.

FAQ

Do I need a Telegram account or API keys? No. The actor reads Telegram's public web preview.

How do I get only new posts every hour? Turn on onlyNewPosts and schedule the actor in Apify Schedules. Each run returns only posts published since the last run.

Can I use it through the API? Yes. Call POST https://api.apify.com/v2/acts/classier_wholemeal~telegram-channel-scraper/run-sync-get-dataset-items with the JSON input.