Telegram Comments Scraper avatar

Telegram Comments Scraper

Pricing

$2.50 / 1,000 comment scrapeds

Go to Apify Store
Telegram Comments Scraper

Telegram Comments Scraper

Get every public comment under any Telegram post: author name, @handle, text, timestamp, reactions, photos and the comment each one answers — one row each, ready for CSV, Excel or JSON. Point it at a list of posts or a whole channel. No Telegram account, phone number or login needed.

Pricing

$2.50 / 1,000 comment scrapeds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

3

Monthly active users

18 days ago

Last modified

Share

Telegram Comments Scraper — Discussion Threads

Every public Telegram post can carry a conversation underneath it, and that conversation is usually the most useful thing on the page: real people, real opinions, real names. This actor turns any public Telegram post into a clean table of its comments — who wrote each one, their public @handle, what they said, when, what reactions it collected, any photos, and which comment it was answering. Give it a list of posts, or just a channel, and it works through the newest posts for you. It is built for analysts, community managers, researchers and marketers who want the discussion rather than the announcement.

What you can do with it

  • Read the room. Pull the full discussion under a product launch, a policy announcement or a news post and see what people actually said.
  • Track sentiment over time. Sweep a channel's recent posts on a schedule and watch how the tone of its audience moves week to week.
  • Find the voices that matter. Sort by reactions to surface the comments the community itself upvoted, and the accounts behind them.
  • Rebuild whole threads. Every comment carries the identifier of the comment it answers, so a single group-by reassembles the conversation tree.
  • Compare competitors. Run the same sweep across rival channels and compare how much discussion each post generates.
  • Feed a model. Export as JSON or CSV and use the text for classification, summarisation or topic clustering.

What you get

One row per comment. An abridged real row:

{
"rowType": "comment",
"channel": "tginfo",
"postId": 4430,
"commentId": 1828198,
"authorName": "CHET -----",
"authorUsername": "chet_roller",
"hasAvatar": true,
"text": "Ну у меня нет времени возиться ещё и с телеграмом. Опция есть — я воспользовался…",
"date": "2026-08-02T15:38:23.000Z",
"isReply": true,
"replyToCommentId": 1828192,
"reactions": [{ "emoji": "🤝", "customEmojiId": null, "isPaid": false, "count": 2 }],
"reactionCount": 2,
"photoCount": 0,
"threadCommentCount": 42,
"threadCommentCountIsExact": true,
"scrapedAt": "2026-08-05T12:00:00.000Z"
}

Posts whose comments are switched off produce one short row of their own instead, so nothing in your output is a silent gap:

{
"rowType": "post_status",
"channel": "varlamov",
"postId": 60000,
"status": "comments_disabled",
"commentsDisabled": true,
"commentCount": 0
}

Input reference

FieldTypeDefaultWhat it does
postUrlslist of textone example postThe Telegram posts to collect comments from, one per line. Use Telegram's own Copy Link on a post and paste the result.
channeltextemptyA channel username such as @tginfo, or its link. The actor takes that channel's most recent posts and collects the comments under each one. Works on its own or alongside postUrls.
maxPostsnumber10How many recent posts to check when you supply a channel. Maximum 200. Posts with no open discussion cost almost nothing to check.
maxCommentsPerPostnumber200Upper limit per post. When a discussion is bigger than this, you receive the most recent comments up to the limit. Maximum 5000.
onlyTopLevelCommentstrue/falsefalseKeep only comments written straight to the post and drop the ones answering another comment. maxCommentsPerPost applies first, so a post whose newest comments are mostly replies can return only a few rows.
reportPostsWithoutCommentstrue/falsetrueAdd one short status row for every post with no open discussion. Switch off to receive comment rows only.
countrychoiceUnited StatesWhich country Telegram is browsed from. A few channels are restricted in some countries, so pinning this keeps repeat runs consistent.
postsAtOncenumber16How many posts are worked through side by side. Maximum 32.

Output fields

FieldTypeDescription
rowTypetextcomment for a comment, post_status for a post with no open discussion.
channeltextThe channel the post belongs to.
postIdnumberThe post the comment sits under.
postUrltextDirect link to that post.
commentIdnumberStable identifier for this comment.
commentUrltextDirect link that opens this comment in Telegram.
authorNametextThe commenter's display name.
authorUsernametextTheir public @handle, or null when they do not publish one.
authorUrltextLink to their public profile, when they have a public @handle.
authorAvatarUrltextTheir profile picture, or null when they publish none.
hasAvatartrue/falseWhether a real profile picture was published.
texttextThe comment itself, with line breaks preserved. null for a photo-only comment.
datedateWhen the comment was posted, in UTC.
isReplytrue/falseWhether this comment answers another comment.
replyToCommentIdnumberThe comment it answers, or null.
reactionslistOne entry per reaction: the emoji, its count, whether it was a paid reaction, and a code for custom emoji that have no character of their own. null when Telegram publishes no reactions for the comment.
reactionCountnumberAll reactions added together, or null when none are published.
photoslistPictures attached to the comment, each with a direct link.
photoCountnumberHow many pictures the comment carries.
discussionIdtextIdentifier of the discussion the comment belongs to — the same for every comment under a channel's posts.
threadCommentCountnumberHow many comments Telegram states the post has.
threadCommentCountIsExacttrue/falsefalse when Telegram published that figure in rounded form.
statustextOn a status row: comments_disabled or channel_not_found.
commentsDisabledtrue/falseOn a status row: whether the post simply has no open discussion.
scrapedAtdateWhen the row was collected.

Pricing

You pay per row written to your dataset — nothing else.

EventCharged whenPrice per 1,000
Comment scrapedEvery row the run produces$2.50

Worked example. You sweep a channel's 20 most recent posts. Sixteen of them have open discussions averaging 60 comments each, and four have comments switched off. That is 960 comment rows plus 4 status rows — 964 rows, about $2.41. Switch reportPostsWithoutComments off and you pay for the 960 comment rows only, about $2.40.

Set maxCommentsPerPost to control the ceiling on a busy post, and set a charging limit on the run if you want a hard cap on spend. When that limit is reached the run stops cleanly and tells you so.

Limits & what this actor cannot do

  • Only public Telegram channels are covered. Private channels, invite-only groups and one-to-one chats are not publicly viewable and are reported as unavailable rather than returned empty.
  • Comments only exist where the channel owner has switched them on. A post with no open discussion is reported as such — it is never returned as a thread that happens to have zero comments.
  • A post that is no longer available and a post with comments turned off look identical from the outside, so both are reported the same way.
  • Commenters who do not publish an @handle are returned with their display name only. Telegram publishes nothing else about them.
  • Reaction and comment counts are a snapshot at the moment of collection and keep changing afterwards.
  • Telegram publishes very large counts in rounded form, so the biggest figures are approximate rather than exact. Every row states which kind it received.
  • When you cap the comments per post, you receive the most recent ones up to that cap, not a sample from across the discussion.
  • Some channels are restricted in some countries, so the same post can return a different result depending on the country the run browses from.
  • Speed depends on the size of the job and on Telegram's own response times. No fixed throughput is promised.
  • Lawful use. Comments are written by ordinary people, and their names and handles are personal data. Telegram's terms govern automated access, and you are responsible for using anything you collect lawfully, in line with the source site's terms and with applicable privacy law. This actor only ever reads what Telegram already publishes to the public.

FAQ

Do I need a Telegram account? No. Nothing is connected, nothing is signed in, and no account of yours is involved at any point.

Does it need my phone number or login? No. There is nothing to authorise and nothing to paste in. You supply post links or a channel name, and that is all.

Can I schedule it? Yes. Point it at a channel, set how many recent posts to check, and schedule it daily or hourly from Apify. Each run returns what is published at that moment, so you can track how a discussion grows.

Is the data complete? For a post with an open discussion, the actor works through the whole thread from the newest comment back to the first, unless you cap it. What it cannot give you is anything Telegram does not publish publicly: private channels, comments on posts where discussion is switched off, deleted comments, or details about a commenter beyond what they have chosen to show.

What happens to posts with comments switched off? They are reported with status: "comments_disabled" so you can see the post was checked. Switch reportPostsWithoutComments off if you would rather your dataset contained comments only.

Can I collect comments from a group chat? No. Only the discussion attached to a public channel post is publicly viewable. Group conversations themselves are not.

What formats can I export? Anything Apify offers — CSV, Excel, JSON, XML — or read the dataset straight from your own tooling.