Telegram Channel Posts: Messages, Views, Media
Pricing
from $0.90 / 1,000 post rows
Telegram Channel Posts: Messages, Views, Media
Public Telegram channel posts from the t.me web preview: text, links, views, reactions, media flags, photo URLs, forwards, replies and channel subscribers. No login, no bot token, no phone number.
Pricing
from $0.90 / 1,000 post rows
Rating
0.0
(0)
Developer
Ailu Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Security
Limited permissionsShare
Telegram Channel Posts: Public Channel Messages, Views, Reactions, Media
Returns posts from public Telegram channels as flat JSON rows, read from Telegram's public web preview (https://t.me/s/<channel>): message text with line breaks, links, hashtags, view count, reaction totals, author signature, forwarded-from, reply-to, photo URLs, video/document/poll flags, poll options and link preview cards. Give it any number of channel usernames or links; it pages backwards through each channel's history, newest first, and can stop at a date or keep only posts with your keywords. An optional free row per channel adds title, description and subscriber count. No Telegram account, bot token, phone number, browser or proxy is needed. Compared with the most used Telegram channel Actors there is no start fee, channel rows and error rows are free, and every post row carries reactions, polls and link previews.
Use cases
- Track what a set of news, crypto or brand channels publish each day, with views and reactions, for dashboards or LLM summaries.
- Monitor channels for keywords (product names, tickers, competitors) with
keywordsandsinceDayson a schedule. - Collect subscriber counts and post engagement for many channels to compare their reach.
- Archive public announcements (text, links, photos, polls) from official channels.
Input
| Field | Default | Meaning |
|---|---|---|
channels | ["durov", "telegram"] | Public channel usernames or links: durov, @durov, https://t.me/durov, https://t.me/s/durov. |
maxPostsPerChannel | 50 | Posts returned per channel, newest first. About 20 posts per request. |
sinceDays | 0 | Stop at posts older than this many days. 0 = no date limit. |
keywords | [] | Keep only posts whose text, link preview or poll question contains one of these words (case-insensitive). |
includeChannelInfo | true | Add one free rowType: "channel" row per channel (title, description, subscribers, photo, counters). |
maxItems | 200 | Maximum billable post rows for the whole run. |
Running with the defaults returns the latest 50 posts of @durov and @telegram plus two free channel rows in about 6 seconds.
Output
| Field | Type | Meaning |
|---|---|---|
id | string | <channel>/<messageId> |
rowType | string | post (billable), channel (free), error (free) |
channel, messageId, url | string, integer, string | Channel username, message number, https://t.me/<channel>/<messageId> |
date | string | Publication time, ISO 8601 UTC |
text | string or null | Plain text, line breaks kept, emoji kept, formatting removed |
links, hashtags | string[] | Links in the text (deduplicated) and hashtags without # |
views, reactionsTotal, paidStars | integer or null | Counters as shown by Telegram ("5.87M" becomes 5870000) |
author | string or null | Author signature, when the channel signs posts |
isEdited, isForwarded | boolean | Edited mark, forwarded mark |
forwardedFrom, forwardedFromUrl | string or null | Original chat name and link, when Telegram shows them |
hasPhoto, hasVideo, hasDocument, hasPoll | boolean | Media flags |
photoUrls | string[] | Photo URLs on Telegram's CDN |
linkPreview | object or null | {url, siteName, title, description} |
poll | object or null | {question, type, options: [{text, percent}]} |
replyToMessageId | integer or null | Message this post replies to |
fetchedAt | string | ISO 8601 UTC fetch time |
Channel rows add title, description, subscribers, photoUrl, verified, photosCount, videosCount, filesCount, linksCount. Error rows add error.
Sample post row (trimmed):
{"id": "durov/538","rowType": "post","channel": "durov","messageId": 538,"url": "https://t.me/durov/538","date": "2026-08-04T15:20:04.000Z","text": "Last night, Apple briefly removed Telegram from the App Store ...","links": ["https://telegram.org/safety"],"hashtags": [],"views": 4550000,"reactionsTotal": 76200,"paidStars": 17900,"author": "Pavel Durov","isEdited": true,"isForwarded": false,"hasPhoto": false,"hasVideo": false,"linkPreview": { "url": "https://telegram.org/safety", "siteName": "Telegram", "title": "Telegram Safety Overview" },"replyToMessageId": null,"fetchedAt": "2026-11-04T11:30:00.000Z"}
How it works and limits
- Reads only the public web preview at
t.me/s/<channel>(plain HTML, no browser) and pages back with?before=<messageId>, about 20 posts per page. - Politeness: one request per second to t.me, with retries and back-off on HTTP 429 and 5xx. 50 posts per channel take about 3 requests.
- Only public channels with the web preview enabled are available. Private channels, invite links, groups, users, bots, and channels that disabled the preview return a free
errorrow and the run continues. - Counters are the rounded values Telegram displays (views "66.2K" = 66200; large subscriber counts such as "10.1M").
- With
keywords, up to 25 pages (about 500 posts) per channel are scanned to find matches. - Not covered: comments, private chats, exact (unrounded) counters, video or file downloads. Photo URLs point to Telegram's CDN and may stop working after some time.
- Service messages (such as "channel created") are skipped.
Pricing
Pay per result: $0.90 per 1,000 rows (result event). Platform usage is billed separately by Apify. Removed/free rows are not charged.
Channel info rows and error rows are free.
Legal
Not affiliated with Telegram. Uses the public Telegram channel web preview (t.me/s) only. Data licence/terms: https://telegram.org/tos
Posts belong to their channel owners. Use the data in line with Telegram's terms and applicable privacy and copyright law.
FAQ
Do I need a Telegram account, API ID or bot token? No. The Actor reads the same public preview page that anyone can open in a browser.
Why does a channel return an error row? The channel is private, does not exist, is a user, bot or group, or its owner disabled the web preview. Error rows are free.
Can I get posts older than a date or only recent ones?
Set maxPostsPerChannel high to go far back in history, or sinceDays to stop at a date. Paging is newest to oldest.
Why are view counts round numbers? Telegram shows rounded counters in the preview ("5.87M"). The Actor converts them to numbers but cannot recover the exact value.
Can I run it on a schedule to watch channels?
Yes. Combine sinceDays: 1 with a daily Apify schedule, or use keywords to receive only matching posts.