Telegram Channel Posts Scraper
Pricing
from $1.25 / 1,000 posts
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Features
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
| Name | Type | Default | What it does |
|---|---|---|---|
channels | array | ["telegram"] | Public channels as usernames, @usernames, https://t.me/name or https://t.me/s/name links. Repeats are read once. |
mode | string | posts | posts for one row per post, channelInfo for one row per channel. |
maxPostsPerChannel | integer | 10 | Posts to save from each channel, newest first, from 1 to 10,000. |
since | string | none | Earliest post time, inclusive, as an ISO timestamp with a time zone (Z or +02:00). Collection stops once posts are older. |
until | string | none | Latest 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)
| Field | Meaning |
|---|---|
postId, url, date | Post number in the channel, its t.me link and its publication time (ISO, with offset). |
text | Post text with line breaks kept. |
views | Displayed views as an integer (a displayed "2.16M" becomes 2160000). |
edited | Whether the post was edited. |
forwardedFrom | Name and link of the original source for forwarded posts. |
replyTo | Link to the post this one replies to. |
mediaTypes | Media in the post: photo, video, document, audio, voice, poll, sticker, roundVideo, gif. |
thumbnailUrls | Preview images of the post's media. |
linkPreview | The shared link's URL, title, description and thumbnails. |
reactions | Each 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:
| Event | Price |
|---|---|
| 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.