Telegram Channel Messages Scraper
Pricing
from $0.25 / 1,000 telegram messages
Telegram Channel Messages Scraper
Get public Telegram channel messages with text, dates, views, reactions, links, media, and channel details. Filter by date, keyword, or views, add post comments, or monitor channels for new posts. No Telegram login needed.
Pricing
from $0.25 / 1,000 telegram messages
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
67
Total users
8
Monthly active users
7 days ago
Last modified
Categories
Security
Limited permissionsShare
📨 Get public Telegram channel posts as clean data
Telegram Channel Messages Scraper is for researchers, analysts, marketers, and developers who follow public Telegram channels. Paste channel links or @handles and get one row for each message, with its text, date, link, views, reactions, links, media, and channel details. You do not need a Telegram login, phone number, or API key.
- Save the latest posts from news, crypto, or product channels so you can read and search them in one place.
- Track how views and reactions change across a channel's posts over time.
- Collect every link, @mention, hashtag, and email address that a channel posts.
- Pull only the posts that match a keyword, a date range, or a minimum view count.
- Schedule a channel monitor that saves only the posts published since the last run.
📋 What each Telegram message row contains
Each row is one public channel message. It includes:
- The message number, link, publish date, and text
- The edited flag and the author signature, when Telegram shows them
- The view count and each reaction count, including paid Star reactions
- The original source of a forwarded message, and the message that a reply answers
- The hashtags, @mentions, links, and email addresses in the text
- Photos, videos, and files, with their public links and preview images
- Public comments under the post, when you turn comments on
- Channel details: title, description, verified badge, picture, subscriber count, and counts of photos, videos, and links
When Telegram does not show a value, the field is null, {}, or []. The Actor does not guess it.
🚀 How to scrape a Telegram channel
- Add one or more public channel targets. You can use a channel URL, a
t.me/sarchive URL, an @handle, a bare handle, or a direct post URL. - Set how many messages to save. Leave it empty or set 0 to save all available messages.
- Add a date range, keyword, or other filter if you want fewer messages.
- Start the run and open the dataset. Export it as JSON, CSV, Excel, or another format.
Start with a small limit, check the rows, and then run the same input on a schedule or through the Apify API.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
targets | array | Required. Public Telegram channels to read, 1 to 500 per run. Works with https://t.me/durov, https://t.me/s/durov, @durov, durov, and direct post links such as https://t.me/durov/500. Private /c/ links and invite-only channels do not work. |
maxMessages | integer | The most message rows to save across the whole run. Leave it empty or set 0 to save all available messages. The form prefills 60. |
sortOrder | string | newest_first (default) or oldest_first. Sets the order of the saved rows. |
dateFrom | string | Optional. Saves only messages published on or after this date, in UTC. The form prefills 2026-01-01, but there is no default when you leave it out. |
dateTo | string | Optional. Saves only messages published before the start of this date, in UTC. It must be later than dateFrom. |
afterMessageNumber | integer | Optional. Saves only messages with a higher message number. The message number is the last part of a post link, such as 540 in https://t.me/durov/540. |
beforeMessageNumber | integer | Optional. Saves only messages with a lower message number. |
keyword | string | Optional. Saves only the messages that Telegram's channel search finds for this word. |
minViews | integer | Optional. Saves only messages with at least this many views. |
onlyWithMedia | boolean | Saves only messages with a photo, video, file, or other media. Default false. |
onlyWithLinks | boolean | Saves only messages with at least one link. Default false. |
monitorName | string | Optional. A name for a channel monitor, using letters, numbers, dashes, and underscores, up to 63 characters. Each later run with the same name saves only messages published since the last run of that monitor, for each channel. It works with channels, not single post links. |
includeComments | boolean | Saves the public comments under each post, with each author's public name and username. Each saved comment is charged. Default false. |
maxCommentsPerPost | integer | The most comments to save for each post. Default 20. Set 0 to save all comments. Used only when includeComments is on. |
Example input
{"targets": ["https://t.me/telegram"],"maxMessages": 60,"sortOrder": "newest_first","dateFrom": "2026-01-01","onlyWithMedia": false,"onlyWithLinks": false,"includeComments": false,"maxCommentsPerPost": 20}
If two targets point to the same message, the Actor saves that message only once.
🧾 Output
Output fields
| Field | Type | What it does |
|---|---|---|
inputTarget | string | The channel name, @handle, or link you entered that found this message. |
channelUsername | string | The public username of the channel. |
messageId | string | The number of the message in the channel. |
messageUrl | string | The link to open the message on Telegram. |
date | string or null | When the channel published the message. |
text | string or null | The text of the message. |
isEdited | boolean or null | Telegram shows that the message was edited. |
authorSignature | string or null | The author name that Telegram shows on the message. |
views | integer or null | The number of views. |
viewsText | string or null | The view count as Telegram shows it, such as 15.3K. |
replyCount | integer or null | The number of replies that Telegram shows. |
reactions | object | Reaction counts. Each key is an emoji, or the number ID of a custom emoji. The key ⭐ holds paid Star reactions. |
forwardedFrom | object or null | For a forwarded message, the original source. |
forwardedFrom.name | string or null | The name of the original source. |
forwardedFrom.url | string or null | The Telegram link of the original source. |
replyTo | object or null | For a reply, the message that it answers. |
replyTo.messageId | string or null | The number of the message that it answers. |
replyTo.messageUrl | string or null | The link of the message that it answers. |
hashtags | array | The hashtags in the message. |
mentions | array | The @mentions in the message. |
urls | array | The links in the message. |
emails | array | The email addresses in the message. |
media | array | The photos, videos, and files in the message. |
media.type | string | The kind of media, such as photo or video. |
media.url | string or null | The public link to the media file. |
media.thumbnailUrl | string or null | The public link to the preview image. |
comments | array | The public comments under the post. Empty when comments are off. |
comments.authorName | string or null | The public name of the comment author. |
comments.authorUsername | string or null | The public username of the comment author. |
comments.text | string or null | The text of the comment. |
comments.date | string or null | When the comment was published. |
channel | object | Details of the channel that published the message. |
channel.title | string or null | The name of the channel. |
channel.description | string or null | The description of the channel. |
channel.isVerified | boolean or null | Telegram shows a verified badge for the channel. |
channel.avatarUrl | string or null | The link to the channel picture. |
channel.subscriberCount | integer or null | The number of subscribers. |
channel.photoCount | integer or null | The number of photos in the channel. |
channel.videoCount | integer or null | The number of videos in the channel. |
channel.linkCount | integer or null | The number of links in the channel. |
Example message
{"inputTarget": "durov","channelUsername": "durov","messageId": "503","messageUrl": "https://t.me/durov/503","date": "2026-05-06T15:57:26+00:00","text": "🏁 TON leads Layer-1 blockchains in finality time. 🔗 Sources: https://telegra.ph/Comparison-of-Layer-1-blockchains-by-finalization-time-05-01","isEdited": false,"authorSignature": "Pavel Durov","views": 14800000,"viewsText": "14.8M","replyCount": null,"reactions": {"⭐": 10300,"5265077361648368841": 41600,"5314647211299067950": 15700,"5472404692975753822": 10800,"5447193685919811994": 6770,"5447458260200214425": 118},"forwardedFrom": null,"replyTo": null,"hashtags": [],"mentions": [],"urls": ["https://telegra.ph/Comparison-of-Layer-1-blockchains-by-finalization-time-05-01"],"emails": [],"media": [{"type": "video","url": "https://cdn4.telesco.pe/file/85102421eb.mp4?token=JbL7IbbWLPlAvGjWzp2m5t6F1lZ4ty9iB40FL7ejgzBbz8HxML3Zu7ZJksDka2gsOJUjnl3eqIjnqgs5BI9hnRO2vANy9wRTw57IcO59aH_AFkjsb4TNRvVER7mXK_19nbb8ne43cG4G4GTxlYvdP-T2Ao28zGZ1mjMFZc6xn4JxikELsF-Fw1gg1xZvcJ8pDraqqtqQB7qHmeCs5Qo4QpC24Nmv4-JXiD7KAfpGUSLNubPqKIu4keHEVAYTWng633D52lFTWCdM2G_Lpn__45SNoBQvrA5K2kq3a6Q9witr125SDJOCwH9twIR_4qNC5M62iyYdpGm7QQcvfrWlSw","thumbnailUrl": "https://cdn4.telesco.pe/file/PnlkhpY4klk_AK6u3GEX6v_vA0ZyFIi4jpR3YQlhR45XK1vC31CzITzGRQDLx8UtmzcJZXGn6DSvb_HimTlsMQJ3mXbZ9z5uMMIEIXiHvb1zqVv9UCQFThPpoLGGdUbJzczFWoLx0G5uPbdMi6RJUhm9ojUnTc9VAwgA8U0JzF-hz-1HG-VZibXSvgGA5k7agbbZ9n4_Ncby_IwCO7McWgyegbpWXVyewyxJM4wU-HWMafGuxnkNiSrXU3qIMW2FEZ937szc0i-Hg1TxvXfUTsFDpq6eMvSrupHdnbe5AzHfxdTRBd-Mr9Tz5_NC1nk8loWX7fFVLNFaI6JcCxuAXw"}],"comments": [],"channel": {"title": "Pavel Durov","description": "Founder of Telegram.","isVerified": true,"avatarUrl": "https://cdn4.telesco.pe/file/TotdkaP-2xUX87mdgGA6XuCX6b3m-acrpIFK05L9o1sPWhLmC-cTk0tTxQPNhpFoRWV0u5Gbk4PrCxD_rTDFMztog61SKKDOz7z26KUr9_riVkRwSMxW3KxqX5oUCQKBYcPqj3O4dMn8ITdAKVZkJp9HVzKcHWcuZFfqxcBz8QblSJ2DQvME3IIo14TFfuexAMLPbyXm9xOMlSDIxH8GRAqfrYwfu9j0BxUqZajvHslNFhVsWslSIbXYeN9Q9J7vuhzxNpRP1ql6Dy2NAmlcCwXBvx0CHne4EH79l_THYRvmez9MKoghidCZzxfj5le3jHbPATEDolGtGdXbWz8EfA.jpg","subscriberCount": 10200000,"photoCount": 102,"videoCount": 47,"linkCount": 200}}
Media links come from Telegram and can expire after some time.
💳 Pricing
This Actor uses pay-per-event pricing. You pay for:
- Actor start: one small charge each time a run starts.
- Message: one charge for each message row saved to the dataset.
- Comment: one charge for each public comment saved, only when you turn comments on.
A run that finds no matching messages pays only the start charge. Filters such as dates, keyword, and minimum views run before saving, so messages they skip are not charged. See the Pricing tab for the current prices. To control cost, set maxMessages and a maximum charge per run.
🔌 Integrations
You can run this Actor from the Apify API, on a schedule, or from tools such as Make, Zapier, n8n, Google Sheets, and webhooks. A scheduled run with monitorName gives you a simple feed of new channel posts.
❓ FAQ
Can I get only new messages each day?
Yes. Set monitorName and run the Actor on a schedule. Each run with the same monitor name saves only the messages published since the last run of that monitor, for each channel.
How do I get a channel's full history?
Leave maxMessages empty or set it to 0, and leave the date and message number fields empty. The Actor then saves every public message it can reach, back to the first one.
Can I scrape private Telegram channels or groups?
No. The Actor reads public channels only. Private /c/ links, invite-only channels, private chats, and DMs do not work.
Do I need a Telegram account, cookies, or an API key?
No. Paste public channel links or handles and start the run.
How is this different from Telethon or Pyrogram?
Telethon and Pyrogram are Python libraries that use the Telegram API. You need your own API ID, a phone login, and code. This Actor needs no login or code. It gives you the data as a ready dataset that you can export or connect to other tools.
Can I download the media files?
The Actor saves the public link and preview image of each photo, video, or file. It does not store copies of the files. For a media-first job, use a Telegram media downloader.
Why are some fields empty?
Telegram does not show every value on every message. For example, reply counts and reactions show only when the channel allows them. The Actor keeps those fields empty instead of guessing.
Actor Release Notes
v1.0 (31-10-2026)
- With
newest_first, messages are now saved from newest to oldest. Before, older messages could be saved first. - Fixed long runs that could run out of memory and stop before saving results.
- New filters:
keyword,afterMessageNumber,beforeMessageNumber,minViews,onlyWithMedia, andonlyWithLinks. - New
monitorNameinput. Later runs with the same name save only messages published since the last run. - New
includeCommentsandmaxCommentsPerPostinputs save the public comments under each post. Each saved comment is charged. - Breaking change:
maxMessagesno longer has a default of 60. When you leave it empty or set it to 0, the run saves all available messages, and each one is charged. To keep the old behavior, setmaxMessagesto 60. The old limit of 10,000 is gone. - New output fields:
isEdited,authorSignature,viewsText,forwardedFrom,replyTo,mentions,emails,comments, andchannelwith channel details. - Breaking change: the
mediaMode,includeReactions, andincludeExtractedEntitiesinputs are removed. Every row now always has media, reactions, links, and hashtags. Remove these keys from your input. The Actor ignores them. - Breaking change: the
normalizedTarget,channelUrl,sourceUrl,position,forwards, andscrapedAtoutput fields are removed with no replacement. UseinputTarget,channelUsername, andmessageUrlto find the channel and message. - Custom emoji reactions now use the custom emoji number ID as their key in
reactions.
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Telegram Channel Scraper: find public Telegram channels from search terms before you collect their messages.
- Telegram Info Scraper: look up profile details of public Telegram users, bots, channels, and groups.
- Telegram Media Downloader: get direct links to photos, videos, and audio from public Telegram posts.
- Telegram Lead Scraper: turn emails, phone numbers, and websites published on public Telegram pages into lead rows.
- Telegram Channels Scraper: Messages, Contacts & Leads: another way to collect public channel messages with the emails and links in each post.
Made with ❤️ by Maxime Dupré