Telegram Comments Scraper | Replies, Authors and Reactions avatar

Telegram Comments Scraper | Replies, Authors and Reactions

Pricing

from $0.96 / 1,000 comments

Go to Apify Store
Telegram Comments Scraper | Replies, Authors and Reactions

Telegram Comments Scraper | Replies, Authors and Reactions

Telegram comments scraper (Парсер комментариев Телеграм): export replies under any public post with author name, text, reactions and date, plus post views and channel subscribers. 124 comments in 8 seconds, 24 fields each, no Telegram account. Paste post links, sweep channels or search keywords.

Pricing

from $0.96 / 1,000 comments

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

Telegram Comments Scraper (Телеграм) | Replies, Authors and Reactions Under Any Post (2026)

Telegram comments, 24 fields each, from any URL.

From SilentFlow. Creators of Facebook Search Scraper and JD Products Scraper (#1 for “jd scraper” in Apify Store search), with 920,000+ combined lifetime runs.

Turn the discussion under any public Telegram post into a clean table: who wrote each comment, what they said, who they answered, the reactions it got and when, right next to the post it answers. 124 comments from 4 posts in 7 seconds in our test, without a Telegram account.

Why choose this actor?

Reading a post's comments 50 at a time in a tiny widget? Pasting them into a sheet, then going back to copy the post they were about? Watching a channel's audience react to every announcement, but with no way to export it?

  • 23 fields filled per comment, not 16. On our default run (124 comments under tginfo/4430 and the 3 newest posts of binance_announcements), 23 data fields carry a value on at least half the rows and 19 on every single row: the comment id, link and number, its text, media type, reply and edited flags, author name, reaction count, date, the post's id, link, text, date, views and comment count, and the channel's username, title, link and exact subscriber count. Author username, profile link and photo, the comment it answers, every reaction with its emoji and any photos fill in when the comment has them. The most used Telegram comments scraper shows 16 fields in its example row, with no post text, no post views and no channel audience.
  • Every comment arrives with the post it answers. All 124 rows of our test carried the post's text, publication date, view count and total comments, plus the channel title and its exact subscriber count (3,225,651 for Binance Announcements). Sentiment, topic and influence analysis need that context, and you no longer have to join two exports to get it.
  • Three ways in: post links, channels and keywords. Paste the posts you care about (https://t.me/tginfo/4430), sweep the newest posts of whole channels (binance_announcements, @tginfo), or let a keyword pick the posts for you: bitcoin in Binance Announcements found the 2 latest matching posts and their 7 comments in 3 seconds. The most used Telegram comments scraper takes post links and a single channel, with no keyword search. No field is required here, and a comment link works as well as a post link.

Try Telegram Comments Scraper free

Try your first 124 comments

Paste this input in the Input tab, or keep the prefilled form, and press Start:

{
"postUrls": ["https://t.me/tginfo/4430"],
"channelUsernames": ["binance_announcements"],
"maxPosts": 3,
"maxCommentsPerPost": 50
}

You get the 50 newest comments under a Telegram Info post about Australia's online safety regulator taking Telegram to court, then every comment under the 3 newest posts of Binance Announcements, newest comment first, each with its author, reply target, reactions and date, and the post and channel beside it. Our run on 5 November 2026 returned 124 comments in 7 seconds. Swap the link and the channel for your own, raise maxCommentsPerPost to read whole threads.

The Apify Free plan is enough to try it: no credit card, no Telegram account, no phone number, no API key.

How it works

SilentFlow · Telegram suite
  Telegram Scraper
Channel Posts, Views and
Telegram Comments Scraper
You are here

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:

You have access to the Telegram Comments Scraper on Apify: silentflow/telegram-comments-scraper
It reads the public comments under Telegram channel posts from t.me, without any Telegram account.
Input (no field is required, add at least one post link or channel):
- postUrls (array of strings): channel posts whose comments you want, https://t.me/tginfo/4430; a comment link (...?comment=123) gives its whole post
- channelUsernames (array of strings): public channels, as a username (binance_announcements), an @handle or a link; their newest posts are read
- keywords (array of strings): words looked for in the posts of every channel of channelUsernames; only matching posts are read
- maxPosts (integer, default 10): newest posts read per channel, or matching posts per keyword; post links are always read
- maxCommentsPerPost (integer, default 100): comments kept per post, newest first
- oldestCommentDate (string): keep comments posted after this date, "2026-10-01" or "7 days"
- onlyTopLevelComments (boolean, default false): skip comments that answer another comment
- debugMode (boolean, default false)
Output: one row per comment, 31 fields, flat:
- id (string, "channel/postId/commentId"), url (string, opens the comment), commentId (integer)
- text (string|null), mediaType (text, photo, other), imageUrls (array), links (array)
- isReply (boolean), replyToCommentId (integer|null), replyToAuthor (string|null), replyToText (string|null), isEdited (boolean)
- authorName (string|null), authorUsername (string|null), authorUrl (string|null), authorPhotoUrl (string|null)
- reactions (array of {emoji, emojiId, count, isPaid}), reactionsCount (integer, 0 when none)
- date (RFC 3339 UTC)
- postId (integer), postUrl, postText, postDate (RFC 3339), postViews (integer), commentsCount (integer, all comments of the post)
- channelUsername, channelTitle, channelUrl, channelSubscribers (exact integer)
- searchKeyword (string|null, the keyword that found the post), scrapedAt (RFC 3339)
Use apify-client for Python or JavaScript, or the Apify API.

How to scrape Telegram comments

Three inputs, from the simplest to the most targeted. Each one runs as it is.

Get every comment of one post

{
"postUrls": ["https://t.me/tginfo/4400"],
"maxCommentsPerPost": 500
}

Use Copy Post Link in Telegram and paste it. The whole discussion is read, newest comment first, until the post's last comment or your maximum. This post had 137 comments; all of them came back, each with the post's text and views.

Sweep the newest posts of a channel

{
"channelUsernames": ["binance_announcements", "nexta_live"],
"maxPosts": 5,
"maxCommentsPerPost": 100
}

The 5 newest posts of each channel are read, then the comments under each one. A channel that turned comments off is noticed after 3 posts and skipped, and the log names it, so one channel without comments does not hold up the others.

Collect the comments under posts that mention a word, this month only

{
"channelUsernames": ["binance_announcements"],
"keywords": ["bitcoin"],
"maxPosts": 2,
"oldestCommentDate": "30 days"
}

The keyword picks the posts: Telegram's own search inside the channel gives the latest matches, then older posts are checked for the word. Each row keeps searchKeyword, so one run with several keywords stays easy to split. The date keeps only the comments written in the last 30 days.

Input parameters

FieldTypeDefaultWhat it does
postUrlslist of textprefilled https://t.me/tginfo/4430Channel posts whose comments you want
channelUsernameslist of textprefilled binance_announcementsPublic channels whose newest posts are read
keywordslist of textemptyWords that pick the posts inside every channel listed
maxPostsinteger10Newest posts per channel, or matching posts per keyword
maxCommentsPerPostinteger100Comments kept per post, newest first
oldestCommentDatedate or ageemptyKeep comments posted after this date
onlyTopLevelCommentsyes or nonoSkip comments that answer another comment
debugModeyes or nonoDetailed logs

No field is required. An empty input stops at once with a message that says what to add. The number of rows is at most the number of posts read times maxCommentsPerPost, so set both to what you need.

Formats accepted for posts: https://t.me/tginfo/4430, t.me/tginfo/4430, https://t.me/s/tginfo/4430, a comment link (https://t.me/tginfo/4430?comment=1828127, which gives its whole post), telegram.me links and tg://resolve?domain=tginfo&post=4430 links.

Formats accepted for channels: a username (tginfo), an @handle (@binance_announcements), a channel link (https://t.me/nexta_live), its web preview (https://t.me/s/nexta_live) and tg://resolve?domain=tginfo. A search link made on a channel's web page (https://t.me/s/cointelegraph?q=ETF) reads the comments of the posts it finds.

Formats accepted for dates: a day (2026-10-01), a full timestamp (2026-10-01T18:00:00Z) or an age (12 hours, 7 days, 2 weeks, 1 month, 1 year).

Inputs from other tools: the field names other Telegram tools use (channel, channels, startUrls, urls) are read too, and a list of {"url": "..."} objects works like a list of links.

What is skipped: groups, private chats, bots and invite links (t.me/+..., t.me/c/...) have no public comments on the web. They are named in the log, and the rest of the input runs.

What data can you extract from Telegram?

One row per comment, 31 fields, flat and typed, in this order:

GroupFields
Identityid (channel/postId/commentId, stable), url (opens the comment in Telegram), commentId
Contenttext, mediaType (text, photo, or other for stickers, videos, voice and files shown in the app), imageUrls, links, isEdited
ThreadisReply, replyToCommentId, replyToAuthor, replyToText
AuthorauthorName, authorUsername, authorUrl, authorPhotoUrl
Measuresreactions (each with emoji, emojiId for custom emoji, count, isPaid for star reactions), reactionsCount
Timedate (RFC 3339, UTC)
PostpostId, postUrl, postText, postDate, postViews, commentsCount
ChannelchannelUsername, channelTitle, channelUrl, channelSubscribers
MetasearchKeyword, scrapedAt

A few facts that help when you use the data:

  • id and url never change: the same comment read twice has the same id, which makes merging scheduled runs simple.
  • replyToCommentId points at another row's commentId under the same post: a group-by rebuilds the conversation tree.
  • commentsCount is the post's total, so you can see how much of a thread a capped run covered.
  • postViews is the view count Telegram shows for the post at run time; channelSubscribers is exact, not rounded.
  • authorUsername and authorUrl are null for people who publish no @username: Telegram shows their display name only.
  • Profile photos and comment photos are links to Telegram's image servers. Save the images you need: these links can change over time, while url stays.
  • A missing value is always null, never an empty string. Numbers are numbers, booleans are booleans.

Output example

A real row from our test run, a reply with a reaction under a Binance Announcements post:

{
"id": "binance_announcements/9113/20291024",
"url": "https://t.me/binance_announcements/9113?comment=20291024",
"commentId": 20291024,
"text": "It's for affiliates not regular users",
"mediaType": "text",
"imageUrls": [],
"links": [],
"isReply": true,
"replyToCommentId": 20291012,
"replyToAuthor": "SK ᭄Hassan࿐",
"replyToText": "What is the reason for this?",
"isEdited": false,
"authorName": "Noobie Trader",
"authorUsername": "noobietrader1",
"authorUrl": "https://t.me/noobietrader1",
"authorPhotoUrl": "https://cdn5.telesco.pe/file/TIU6zAbXu_KzyEnkFUiAjk23CRR-W5yVTTtD2vMQql-rotwELTw0cJLt2SeMabA3TwJ_IlZox9SXSnMTTBdF1oXvQlZxZEIdCG3rRsx6pM3XMF7uPU_WlrRXCX4aI3r8Z7cDPw1n_zycq6U_ESug4tBrqoFK0bcT9bCqpHkGHG8ImPu4yE4q7x2ZXH9V0_4F2GzkfWhjqus-5JHQUixN36uU8U92dlSb-smUOnNnxVm4CT-Qu-UEbiNZHpzNykg7cg1GfQ_HOl4BbJU_plf0uhUskYgzV6d8KljGCUjdeV7e9HfQzqtL9OScgHIIDroN2O6m4Sg1jodNeURg9yiBbw.jpg",
"reactions": [
{
"emoji": "👍",
"emojiId": null,
"count": 1,
"isPaid": false
}
],
"reactionsCount": 1,
"date": "2026-11-05T13:29:15Z",
"postId": 9113,
"postUrl": "https://t.me/binance_announcements/9113",
"postText": "November Affiliate Dual-Star Program: Affiliate Rewards Up to 12,000 USDC & New Referral Rewards Up to 10 USDC!\n\nBinance is thrilled to launch the November Affiliate Dual-Star Program, featuring three complementary reward tracks and a total prize pool worth 500,000 USDC for both affiliates and referrals. The promotions are exclusively for Binance Affiliates, designed to incentivise our top-performing affiliates who drive new trader growth and activity.\n\n👉🏻 Learn more here \n\nDisclaimer: This is not available for users in the EEA.",
"postDate": "2026-11-05T10:02:36Z",
"postViews": 17000,
"commentsCount": 27,
"channelUsername": "binance_announcements",
"channelTitle": "Binance Announcements",
"channelUrl": "https://t.me/binance_announcements",
"channelSubscribers": 3225651,
"searchKeyword": null,
"scrapedAt": "2026-11-05T16:29:20Z"
}

Advanced usage

Collect yesterday's comments every morning

{
"channelUsernames": ["tginfo", "nexta_live"],
"maxPosts": 10,
"oldestCommentDate": "1 day"
}

Save this input as a task and schedule it daily in Apify. Each run returns only what people wrote in the last 24 hours under the 10 newest posts of each channel, and older comments are never read, so the run stays short. In our test, the last 3 days under the 2 newest posts of these two channels gave 60 comments in 6 seconds. Merge runs on id.

Keep distinct opinions on a launch, without the back-and-forth

{
"postUrls": ["https://t.me/tginfo/4400"],
"maxCommentsPerPost": 130,
"onlyTopLevelComments": true
}

Only the comments written straight to the post are kept. On this post of 137 comments, 91 top-level comments came back and 46 replies were skipped, in 3 seconds. The maximum counts the comments kept, so a thread full of replies still fills your quota.

Follow a ticker across several channels

{
"channelUsernames": ["binance_announcements", "cointelegraph"],
"keywords": ["bitcoin", "ETF"],
"maxPosts": 5,
"maxCommentsPerPost": 200
}

Each channel is searched for each keyword: here 4 searches, up to 5 matching posts each, and up to 200 comments per post. A post found by two keywords is read once. Filter the dataset on searchKeyword to compare how readers react to each topic.

Read a very long discussion to the first comment

{
"postUrls": ["https://t.me/tginfo/4400"],
"maxCommentsPerPost": 10000
}

Busy posts carry thousands of comments. The thread is read newest first, page after page, until its first comment or your maximum. commentsCount on every row tells you the post's total, so you can check the run covered all of it.

Feed a sentiment model or a spreadsheet

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("silentflow/telegram-comments-scraper").call(run_input={
"channelUsernames": ["binance_announcements"],
"maxPosts": 5,
"oldestCommentDate": "7 days",
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
# The most discussed posts of the week and their most reacted comments
by_post = {}
for r in rows:
by_post.setdefault(r["postUrl"], []).append(r)
for post, comments in sorted(by_post.items(), key=lambda kv: -len(kv[1])):
top = max(comments, key=lambda c: c["reactionsCount"])
print(len(comments), post, "|", top["authorName"], ":", (top["text"] or "")[:80])

The dataset also downloads as CSV, Excel, JSON or XML from the run page, or from https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv with your token.

FAQ

What does this scraper extract? One row per public comment under a Telegram channel post: the comment's text, photos and links, its author (name, @username, profile link and photo), the comment it answers, its reactions and date, plus the post it is under (text, date, views, total comments) and the channel (title, exact subscribers).

Do I need a Telegram account, a phone number or an API key? No. You give post links, channel usernames or keywords, and the run starts. Nothing is signed in and no account of yours is involved.

Which posts have comments? Only posts of channels that opened a discussion. Many news channels turned comments off: their posts are counted in the log and skipped, and a channel without comments is dropped after 3 posts so the rest of your input runs. Comments of group chats are not public on the web.

How fresh is the data? Live. Every run reads Telegram at that moment: new comments, new reactions and view counts appear as soon as Telegram shows them. Deleted comments are gone.

How many comments can I get? Every public comment of a post, newest first, up to maxCommentsPerPost. A channel gives its maxPosts newest posts, a keyword its maxPosts latest matching posts. There is no fixed limit per run beyond the numbers you set.

Can I read several posts, channels and keywords in one run? Yes. Mix post links, channels and keywords in one input. Duplicates are removed: the same post typed twice, or found by two keywords, is read once, and every comment appears once.

Why do some rows have no @username or photo? People who publish no @username are shown by Telegram with their display name only, and some have no profile photo. Those fields are then null. If you read the same post twice within a couple of minutes, Telegram can also leave the author names out of the second read; the comments, dates and replies still arrive, and a run a few minutes later brings the names back.

What does mediaType: "other" mean? The comment holds a sticker, video, voice message or file that Telegram only shows in its app. The row keeps its text, author and date, and url opens it in Telegram.

What is Telegram, and what are its comments? Telegram (Телеграм) is a messaging app with public channels: one-way feeds that news outlets, exchanges, creators and brands use to reach millions of subscribers. When a channel links a discussion group, every post gets a comment thread where readers answer, quote each other and react with emoji. This actor reads those threads; Russian-speaking teams know it as a «Парсер комментариев Телеграм».

Do the filters combine? Yes. keywords picks the posts, oldestCommentDate keeps only recent comments, onlyTopLevelComments drops replies and maxCommentsPerPost caps each post. For example, bitcoin + 7 days + top-level only gives the fresh opinions written straight under the bitcoin posts of the channels you list.

Which links last? url, postUrl, authorUrl and channelUrl are permanent t.me links. Photo links (authorPhotoUrl, imageUrls) point to Telegram's image servers and can change: download what you want to keep.

More SilentFlow scrapers

🛒 E-commerce

💼 Jobs

🏠 Real estate

📣 Social media

🏢 Business data

✈️ Travel

🎯 Lead generation

🔎 SEO

🎬 Video

📰 News

🧰 More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available data from Telegram's public pages on t.me: the comment threads Telegram shows to anyone under channel posts. It does not bypass any login, paywall or CAPTCHA, and never uses a Telegram account. Users are responsible for complying with Telegram's terms of service and applicable data protection laws (GDPR, CCPA, and PIPL where relevant). Comments are written by ordinary people, and their names, @usernames, profile photos and words are personal data: handle them accordingly, keep only what you need, and honor removal requests. The data returned is informational; verify accuracy for regulated use cases.

Telegram Comments Scraper by SilentFlow: every public comment under a Telegram post, with its author and the post beside it.