Telegram Channel Posts Scraper avatar

Telegram Channel Posts Scraper

Pricing

from $1.25 / 1,000 posts

Go to Apify Store
Telegram Channel Posts Scraper

Telegram Channel Posts Scraper

Export public Telegram channel posts and channel information from anonymous web previews. Keyword search is not offered.

Pricing

from $1.25 / 1,000 posts

Rating

0.0

(0)

Developer

Philip Kirkbride

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Categories

Features

Limited permissions

Share

Export posts from public Telegram channels into a spreadsheet-ready dataset: post text, date, views, reactions, media types, link previews, forwards and replies, one row per post. Or switch to channel mode for each channel's title, description, subscriber count, photo and verified badge.

Give it channel usernames, @usernames or t.me links. No Telegram account, phone number, login or API credentials are needed, and it reads only what any visitor can see on a channel's public t.me page.

What sets it apart: an exact date window (since / until, both inclusive) so you can pull one week or one month of a channel without paging through everything; reactions as structured data (emoji, custom emoji id, paid flag, count); views and subscribers as integers instead of "2.1M" text; and a flat price per row with nothing to configure.

Use cases

  • Media and news monitoring: collect every post a set of news, crypto or brand channels published yesterday, on a daily schedule.
  • Research and archiving: export a channel's public history for a period to study topics, posting rhythm and reach.
  • Engagement analysis: compare views and reactions across posts, channels or weeks.
  • Link and source tracking: list the outside articles channels share (linkPreview) and which channels they forward from (forwardedFrom).
  • Channel directories: gather titles, descriptions, subscriber counts and verified badges for a list of channels.

Quick start

The Console form is prefilled with the official Telegram News channel and 10 posts. Run it as is, or paste your own channels:

{"channels": ["https://t.me/s/telegram", "@durov"], "mode": "posts", "maxPostsPerChannel": 10}

An empty input ({}) also works: it collects the 10 most recent posts from the Telegram News channel.

Posts from one month only:

{"channels": ["telegram"], "maxPostsPerChannel": 1000, "since": "2026-10-01T00:00:00Z", "until": "2026-10-31T23:59:59Z"}

Channel profiles instead of posts:

{"channels": ["telegram", "durov"], "mode": "channelInfo"}

Input

NameTypeDefaultWhat it does
channelsarray["telegram"]Public channels as usernames, @usernames, https://t.me/name or https://t.me/s/name links. Repeats are read once.
modestringpostsposts for one row per post, channelInfo for one row per channel.
maxPostsPerChannelinteger10Posts to save from each channel, newest first, from 1 to 10,000.
sincestringnoneEarliest post time, inclusive, as an ISO timestamp with a time zone (Z or +02:00). Collection stops once posts are older.
untilstringnoneLatest post time, inclusive, in the same format.

A timestamp without a time zone, an unknown mode or a malformed channel name stops the run at once with a message naming the value.

Output

Every row has rowType (post or channel), channel and a url on t.me.

Post rows (mode: posts)

FieldMeaning
postId, url, datePost number in the channel, its t.me link and its publication time (ISO, with offset).
textPost text with line breaks kept.
viewsDisplayed views as an integer (a displayed "2.16M" becomes 2160000).
editedWhether the post was edited.
forwardedFromName and link of the original source for forwarded posts.
replyToLink to the post this one replies to.
mediaTypesMedia in the post: photo, video, document, audio, voice, poll, sticker, roundVideo, gif.
thumbnailUrlsPreview images of the post's media.
linkPreviewThe shared link's URL, title, description and thumbnails.
reactionsEach reaction's emoji (or emojiId for custom emoji), paid flag and count.

Channel rows (mode: channelInfo) carry title, description, subscribers (integer), photoUrl and verified.

Missing values are null or empty lists. Service messages (pinned, joined and similar) are skipped.

Output example

One post row from the Telegram News channel (example values):

{"rowType": "post", "channel": "telegram", "postId": 460, "url": "https://t.me/telegram/460", "date": "2026-08-26T19:12:34+00:00", "text": "For all the info from today's update and a look back at 13 years of Telegram features — check out our blog:\nhttps://telegram.org/blog/welcome-messages-buttons-TG-13\n\nAugust Features\n1 • 2 • 3 • 4 • 5 • More", "views": 2160000, "edited": false, "forwardedFrom": null, "replyTo": null, "mediaTypes": [], "thumbnailUrls": [], "linkPreview": {"url": "https://telegram.org/blog/welcome-messages-buttons-TG-13", "title": "Welcome Messages, Buttons in Messages and Signed Gifts", "description": "Introducing Welcome Messages to greet new members of groups or channels, Buttons in Messages to make any text interactive, Inline Documents in Messages and much more.", "thumbnailUrls": ["https://cdn4.telesco.pe/file/R0fw2EwzTeE5Worf5xx9M0sL0tJ_eNXApN0jnlMPLjjNPGThrIobblWMBOS4omLICGgUlzVB2fdrUwhJn6qzMb06ozBiU2mNGoFyQ3DWB3qz7cc7B2cez13JYn8thp8RAjeWPvgwT39zoOwB4fPvXF63kIHRq3msanA0wDx3rxCDYsLACHzy_3debt5hJ_Cpgz-bWC-cvHk2F_Ktm9h1Tecs5gEeFIMm5mIz62xNba4pptaYsXIr-Dw8ux0OlaXFDxVCnzi_w2uUmV7EURnVplv5EZLfJ5M_8Be0wSWnDwtMI3zrH2tKY8kyJyTc_rAFHQDyGZGF7-CePB0md8RX5Q.jpg"]}, "reactions": []}

Pricing

Pay per row delivered:

EventPrice
Post or channel row$1.25 per 1,000 rows ($0.00125 each)
Run start$0.005

The run-start event is charged per GB of memory, rounded up; the default 512 MB run is one start event. Platform usage is included.

Worked examples: 1,000 posts ≈ $1.26 (1,000 × $0.00125 + $0.005). The default 10-post run costs about $0.02. Profiles for 50 channels cost about $0.07.

Scheduling and monitoring

For a daily feed, schedule a task with your channels and a maxPostsPerChannel that covers a day of your busiest channel, then keep only the postIds you have not stored yet (each channel numbers its posts in order, so new posts have higher ids). For a fixed period, set since and until instead. The Actor does not remember earlier runs, so each run returns the newest posts again.

FAQ

How far back can it go? As far back as the channel's public t.me page lets anyone scroll, up to 10,000 posts per channel per run.

How long does a run take? A few hundred posts usually take well under a minute. The default run timeout is 5 minutes; for thousands of posts or many channels, raise the timeout in the run options. A run that reaches its timeout keeps the posts it saved and names the unfinished channels in its status.

Can it search Telegram by keyword? No. Give it the channels; filter the text field afterwards.

Are views exact? Views and subscribers are expanded from the rounded counts Telegram displays (for example 2.16M), so treat them as close estimates.

Which formats can I export? JSON, CSV, Excel or XML from the dataset, or read the rows through the Apify API and integrations.

What happens with a wrong channel name? A channel that does not exist or has no public page is named in the run status. If other channels returned posts, the run still succeeds with them; if nothing was saved, the run fails with the reason. An empty history or an empty date window succeeds with zero rows.

Limits

  • Public channels only: no private channels, groups, chats, member lists, comments or deleted posts.
  • Media files are not downloaded; you get the media types and thumbnail links. Thumbnail links can expire after some time.
  • Albums and some media kinds may have incomplete details.
  • The Actor collects post text as published; it does not identify people or look up contact details.