Telegram Channel Messages Scraper with Comments

CleanScrape · @cleanscrape

Public Telegram channel posts with views, reactions, media and comments, exact subscriber counts, and only new posts on a schedule.

About

Export public Telegram channel messages without a Telegram account, phone number or API key. Paste channel names or links and get every post's text, date, views, reactions, media and links as a table you can download as CSV, Excel or JSON. Add the public comments, search inside a channel, filter by date or words, and schedule it to get only new posts.

Each channel also gets a row with its name, description and exact subscriber count. This is an independent tool, maintained by CleanScrape.

Start with a small run

  1. In Channels or post links, keep TelegramTips or paste the channels you follow: @durov, https://t.me/telegram, t.me/s/tginfo or a link to one post all work, one per line.
  2. Leave Posts per channel at 20 for a first look.
  3. Start the run and open its dataset. Download CSV or Excel for a spreadsheet, or JSON to keep reactions and media as lists.

No channel IDs, cookies or login are needed. Only public channels work: private channels, groups and invite links don't have a public web view.

Choose what to collect

Recent posts: posts come newest first. Posts per channel applies to each channel or post link, and the same channel pasted twice is read once.

One post: paste a link such as https://t.me/TelegramTips/576 to save that post (and its comments, if you turn them on).

Posts about a topic: Search within channels asks Telegram for the posts that match, in the channels you supplied. Telegram chooses the matches. For a strict check of the post text, use Include words or Exclude words: any included word or phrase keeps a post, any excluded one drops it, ignoring case.

A date range: Last 7 days, Last 30 days or Custom dates, by the post's publication time in UTC. The end date includes the whole day.

Comments: turn on Include comments to save up to Comments per post of each post's most recent public comments, for channels that have comments switched on. Each comment has its text, date, reactions, media, the comment it replies to and the commenter's display name as Telegram shows it to visitors who are not logged in (Telegram hides names in some regions; then the name is empty). Names are personal data: store and use them with care.

Get only new posts on a schedule

Turn on Only new posts and add a Bytewells schedule with the same input (hourly or daily, for example):

  • The first run saves the newest posts (up to Posts per channel) as the starting point.
  • Each later run saves only posts published since, and stops reading a channel as soon as it reaches posts it already covered, so a check takes a page or two per channel.
  • If more new posts arrived than Posts per channel allows, the next run continues where this one stopped. No new post is skipped, and none is saved twice.

Runs with the same channels share one history. To keep the history when you add or remove channels, give it a Watch name, such as Crypto news channels. Changing the search or the words starts a new history, so different filters are never mixed. The history is kept in your own Bytewells account, and two runs of the same watch can't overlap.

Examples

The last 100 posts of three channels:

{
  "channels": ["TelegramTips", "@durov", "https://t.me/telegram"],
  "maxPosts": 100
}

Posts that mention a topic in the last 30 days, with their comments:

{
  "channels": ["tginfo"],
  "search": "Stories",
  "period": "30days",
  "includeComments": true,
  "commentsPerPost": 50
}

A schedule that saves only new posts from a list of channels:

{
  "channels": ["TelegramTips", "durov", "telegram"],
  "maxPosts": 200,
  "onlyNew": true,
  "watchName": "telegram-news"
}

What you get

Bytewells gives a run one dataset, so posts, comments and channels are rows of the same table, told apart by rowType. Filter on it in your spreadsheet, or pick the Posts, Comments or Channels view.

rowTypeContents
postChannel, post ID, date, text, views, reactions, media, links, link preview, poll, forwarded from, signature, post link
commentOne row per comment: post ID, comment ID, date, display name, text, reactions, media, the comment it replies to
channelChannel name, description and subscriber count

The run summary (SUMMARY, a JSON record in the run's key-value store) lists for every input the posts saved, pages read, the oldest and newest post, and why collection stopped.

recordId (channel/post ID, plus the comment ID for comments) is a stable key for joining exports. IDs are kept as text.

Reading the counts

Telegram rounds views and reactions above 1,000: viewsText: "6.23K" becomes views: 6230 with viewsApproximate: true. It is a rounded number, not an exact count. Subscriber counts come from the channel page and are exact (subscribersApproximate: false). Missing values are null, never zero.

Media links point to files in Telegram's public preview; they can expire, and files are not downloaded. Custom emoji reactions have an ID but no readable character.

Check coverage before treating an export as complete

Posts per channel is a maximum, not a promise. Each input's reason in the run summary says why it stopped: the post limit, Pages per channel, the start date, the oldest visible post, no matching posts, or no public preview. A channel without a public preview may be private, renamed, removed, a group or a user account; the other channels still run.

Telegram's comment widget shows the most recent comments of a post (in one test, 97 of 104). The summary keeps the total Telegram shows and the number saved, so a large discussion is never presented as complete when it isn't.

This Actor does not search all of Telegram, list group members, read private chats or log in to an account.

Pricing

$19 a month to rent it, after a 7-day free trial, long enough to see a week of scheduled checks. Cancel at any time; access runs to the end of the month you paid for.

Runs use a little compute, paid from your Bytewells credit at Bytewells' rates, separately from the rental. No proxy is needed. In tests on Bytewells, the latest 20 posts of a channel used $0.0002 of credit, 5 posts with 220 comments $0.0004, 1,000 posts of one channel $0.0017, and a scheduled check of 3 channels with nothing new $0.0003.

There is no charge per post or comment, so monitoring many channels every hour costs the same rental.

Speed and limits

Requests to Telegram are paced (about one every 0.65 seconds) so runs stay polite and reliable. A page has about 20 posts, and each post with comments is one more request. Pages per channel (default 50) and Request limit (default 500) cap long runs; raise them for deep history, and give long runs a longer timeout. The run stops before its timeout and keeps what it saved.

Use it from the API

The Actor runs through the Bytewells API, which works with Apify's API clients: point the client's base URL at Bytewells (see Bytewells docs) and call cleanscrape/telegram-channel-messages-scraper with an input from the examples above. All rows are in the run's default dataset (filter on rowType); SUMMARY is a JSON record in its key-value store.

Common questions

Do I need a Telegram account or API key?

No. The Actor reads the public web view of channels (t.me/s/), which anyone can open in a browser without logging in.

Can it search all of Telegram?

No. It searches inside the channels you give it. Searching all of Telegram needs a logged-in account, which this Actor never uses.

Can I get private channels or group chats?

No. Only public channels have a public web view.

Are views exact?

Views and reactions are rounded by Telegram above 1,000 (viewsApproximate says when). Subscriber counts are exact.

How far back can it go?

As far as the channel's public history goes; one test reached posts from 2015. Raise Posts per channel, Pages per channel and Request limit for deep history.

What does a run cost on top of the rental?

Only the compute it uses, from your Bytewells credit. Test runs used $0.0002 to $0.0017 each.

Is it legal to scrape Telegram channels?

The Actor reads pages that Telegram publishes for anyone, without logging in, at a gentle pace, and it doesn't get around any protection. Telegram's terms restrict some uses of its content, including training AI models without consent, so check the rules that apply to how you store and use the data. This is not legal advice.

Support

CleanScrape maintains this Actor and fixes it when Telegram changes its pages. If something looks wrong, email [email protected] with the run ID and the channel or post link. Never include passwords, session cookies or private messages.

Disclaimer

This Actor is an independent tool developed by CleanScrape. It is not affiliated with, endorsed by, or sponsored by Telegram. Telegram and other trademarks belong to their owners and are used only to identify the source.

More tools from CleanScrape

FAQ

Do I need a Telegram account or API key?
No. It reads the public web view of channels (t.me/s/), which anyone can open without logging in.
Can it read private channels or groups?
No. Only public channels have a public web view. Private channels, groups and invite links are skipped and reported.
How do I get only new posts?
Turn on Only new posts and add a schedule. Each run saves only posts published since the last run of that watch; none is skipped or saved twice.
Why a 7-day trial?
Long enough to run a schedule for a week and see what monitoring your channels gives you.
What does a run cost on top of the rental?
Only the compute it uses, from your Bytewells credit. Test runs used $0.0002 to $0.0017 each.

More Actors from the same publisher.

View all from @cleanscrape