Telegram Channel Posts: Messages, Views, Media avatar

Telegram Channel Posts: Messages, Views, Media

Pricing

from $0.90 / 1,000 post rows

Go to Apify Store
Telegram Channel Posts: Messages, Views, Media

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

Ailu Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Security

Limited permissions

Share

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 keywords and sinceDays on 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

FieldDefaultMeaning
channels["durov", "telegram"]Public channel usernames or links: durov, @durov, https://t.me/durov, https://t.me/s/durov.
maxPostsPerChannel50Posts returned per channel, newest first. About 20 posts per request.
sinceDays0Stop 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).
includeChannelInfotrueAdd one free rowType: "channel" row per channel (title, description, subscribers, photo, counters).
maxItems200Maximum 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

FieldTypeMeaning
idstring<channel>/<messageId>
rowTypestringpost (billable), channel (free), error (free)
channel, messageId, urlstring, integer, stringChannel username, message number, https://t.me/<channel>/<messageId>
datestringPublication time, ISO 8601 UTC
textstring or nullPlain text, line breaks kept, emoji kept, formatting removed
links, hashtagsstring[]Links in the text (deduplicated) and hashtags without #
views, reactionsTotal, paidStarsinteger or nullCounters as shown by Telegram ("5.87M" becomes 5870000)
authorstring or nullAuthor signature, when the channel signs posts
isEdited, isForwardedbooleanEdited mark, forwarded mark
forwardedFrom, forwardedFromUrlstring or nullOriginal chat name and link, when Telegram shows them
hasPhoto, hasVideo, hasDocument, hasPollbooleanMedia flags
photoUrlsstring[]Photo URLs on Telegram's CDN
linkPreviewobject or null{url, siteName, title, description}
pollobject or null{question, type, options: [{text, percent}]}
replyToMessageIdinteger or nullMessage this post replies to
fetchedAtstringISO 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 error row 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.

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.