Telegram Channel Scraper: Public Posts, Views & Reactions
Pricing
from $0.35 / 1,000 post or channel rows
Telegram Channel Scraper: Public Posts, Views & Reactions
Posts from public Telegram channels: text, date, views, reactions, media links, polls, link previews, replies and forwards, with channel title and subscriber count on every row. Date and keyword filters, new-posts-only monitoring. No login, no API key, no start fee.
Pricing
from $0.35 / 1,000 post or channel rows
Rating
0.0
(0)
Developer
Navista Multani
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 minutes ago
Last modified
Categories
Share
A Telegram channel scraper for public channels: get every post with its text, date, views, reactions and media links as clean rows, search channels by keyword, and monitor them for new posts. No Telegram account, phone number, bot token or API key.
Telegram public channel scraper: what you can use it for
- Scrape data from Telegram channels into a spreadsheet or database. Posts, views, reactions, links and media come out as columns, not screenshots.
- Track news, crypto and market channels. Run it hourly with "only new posts" on and send each new post to Slack, Google Sheets or your own app.
- Search Telegram channels by keyword. Find every post that mentions a coin, a brand or a hashtag across the channels you follow.
- Measure channels. Subscriber counts, post views and reactions over time, or a quick summary row per channel with its media counts.
- Feed an AI agent or research pipeline. Each row carries its channel's name, title and subscriber count, so it drops into an LLM context without joins.
Telegram channel data: sample output
A channel row and a post row from the same run (CDN links shortened):
{"type": "channel","id": "telegram:channel/telegram","source": "telegram","channel": "telegram","url": "https://t.me/telegram","channel_title": "Telegram News","channel_subscribers": 9240000,"channel_verified": true,"channel_description": "The official Telegram on Telegram. Much recursion. Very Telegram. Wow.","channel_avatar_url": "https://cdn1.telesco.pe/file/...jpg","photos_count": 16,"videos_count": 228,"files_count": null,"links_count": 378}
{"type": "post","id": "telegram:telegram/459","source": "telegram","channel": "telegram","channel_title": "Telegram News","channel_subscribers": 9240000,"channel_verified": true,"post_id": 459,"url": "https://t.me/telegram/459","posted_at": "2026-08-26T19:12:24Z","edited": false,"text": "Signed Gifts. You can now add your signature and a comment to gifts you buy via the gift marketplace. ...","links": ["https://t.me/telegram/455", "https://t.me/telegram/460"],"views": 1880000,"views_text": "1.88M","reactions": [],"reactions_total": 0,"media": [{"type": "video", "url": "https://cdn1.telesco.pe/file/...mp4?token=...", "thumbnail_url": "https://cdn1.telesco.pe/file/...", "duration": "0:12", "duration_seconds": 12, "title": null}],"poll": null,"link_preview": null,"forwarded": false,"forwarded_from": null,"reply_to_post_id": null}
Use the dataset's Posts or Channels view, or filter on type.
Telegram channel post views, reactions and media
One row per post ("type": "post"):
text(plain text, contact details removed),posted_at,edited,url,post_idviewsas a number andviews_textas Telegram shows it ("1.88M")reactionswith emoji, custom emoji ID, paid Star reactions and counts, plusreactions_totalmedia: photos, videos (link, thumbnail,durationandduration_seconds), round videos, documents, voice, audio, stickers, locationslinksin the post,link_preview(URL, site, title, description, image)poll(question, type, voters, options with percentages)reply_to_post_id,forwardedandforwarded_from(the source channel)- the channel's
channel_title,channel_subscribersandchannel_verifiedon every row id,sourceandchannelon every row;changein monitoring mode
Plus one summary row per channel ("type": "channel", on by default):
channel_title,channel_description,channel_subscribers,channel_verifiedchannel_avatar_url,photos_count,videos_count,files_count,links_count
Notes:
- Counts are as Telegram shows them, so large numbers are rounded ("157K" becomes 157000;
views_textkeeps the original). media.typeisphoto,video,round_video,document,voice,audio,sticker,location, orotherfor media the web preview cannot show. Video links carry a token and expire; download them soon after the run.forwarded_fromnames the source channel when a post was forwarded from a public channel; a post forwarded from a person shows"kind": "user_or_hidden"and no name.- In monitoring mode each post row has
"change": "new"and posts come oldest first.
Telegram keyword search
With keywords set, the Actor asks Telegram's in-channel search (the search box on
t.me/s/<channel>) for each keyword in each channel you list, merges the results and
keeps posts that contain a keyword as a whole word. Telegram returns only the newest 22
results per search; when you ask for more matches than that, the Actor reads the
channel's history below the oldest result, so you still get every match within your
limits.
Measured on 2026-10-27, same request, history-only method versus search:
| Channel and keyword | Matches | Pages read | Time |
|---|---|---|---|
| telegram, "Fragment" | 3 (all there are) | 22 → 1 | 19.5 s → 0.6 s |
| cointelegraph, "bitcoin" | 20 | 9 → 2 | 15.0 s → 2.5 s |
| durov, "TON" | 20 | 7 → 1 | 6.4 s → 0.9 s |
| cointelegraph, "bitcoin" | 50 | 30 → 24 | 43.2 s → 24.2 s |
Both methods returned the same posts in every case.
Telegram's search also matches other word forms ("fragments" for "Fragment"); those extra results are dropped by the whole-word check, so results match the keyword exactly as typed.
Telegram channel posts history and new-post monitoring
For history, set maxPostsPerChannel to 0 to read back to your date limit (up to 10,000
posts per channel per run), and use sinceDate or postedWithinDays to stop earlier.
For monitoring:
- Save your input as a task with
"onlyChanges": true(and astateNameif you run several tasks). - Add a schedule in Apify Console (Schedules, then Create), for example hourly.
- Connect the output: a webhook, an integration (Google Sheets, Slack, Make, Zapier, n8n), or read the dataset from the API.
The first run returns everything within your limits; later runs return only newer posts.
If a run hits your spending limit, the next run picks up where it stopped. Set minRows
if you want a run to fail (and alert you) when it finds fewer posts than expected.
Ready-made Telegram channel scraper examples
Open one, press Start, and change the channels to your own:
- Crypto news from Telegram channels
- Search Telegram channels by keyword
- Telegram channel stats: subscribers and media counts
How it compares
- No start fee and no minimum. You pay per row returned, so a scheduled check that finds nothing new costs nothing.
- Fast keyword search. Keywords use Telegram's own in-channel search, so a rare word in a long channel is found in one request instead of reading the whole history (measured above).
- Built-in monitoring. "Only new posts" remembers what each channel already delivered; no cursor bookkeeping on your side.
- Rows stand alone. Every post row carries the channel's name, title and subscriber count, so it drops into a spreadsheet or an AI agent's context without joins.
Pricing
From $0.50 per 1,000 posts ($0.0005 per post). The optional channel summary row is $0.0005 per channel. No start fee, no per-run fee. The same price on every Apify plan.
| Run | Rows | Cost |
|---|---|---|
| Last 100 posts of one channel, with its summary row | 100 posts + 1 channel | $0.0505 |
| "bitcoin" in 5 crypto channels, 20 matches each, no summary rows | 100 posts | $0.05 |
| 10 channels checked every hour for a month, about 30 new posts a day in total | about 900 posts + 10 channel rows (first run only) | about $0.46 a month |
Runs stop cleanly at your spending limit. In monitoring mode, posts not yet delivered stay pending for the next run.
Input examples and settings
The last 20 posts of two channels:
{"channels": ["telegram", "nytimes"],"maxPostsPerChannel": 20}
Keyword search across channels, last 30 days:
{"channels": ["cointelegraph", "durov", "binance_announcements"],"keywords": ["bitcoin", "TON", "#AI"],"postedWithinDays": 30,"maxPostsPerChannel": 50}
Channel details only (one row per channel, no posts):
{"channels": ["telegram", "nytimes", "durov"],"channelInfoOnly": true}
Monitoring, for a schedule:
{"channels": ["tass_agency", "bbcrussian"],"onlyChanges": true,"maxPostsPerChannel": 200,"stateName": "news-hourly"}
| Field | What it does |
|---|---|
channels | Usernames or links: telegram, @nytimes, t.me/cointelegraph, https://t.me/s/bbcrussian, or a post link. |
keywords | Keep posts containing any of these as a whole word, case-insensitive. |
postedWithinDays / sinceDate | Only recent posts. Reading stops at the first older post. |
afterPostId | Only posts with a higher ID than this. |
maxPostsPerChannel | Newest first; default 100, 0 for the whole history back to the date limit (up to 10,000). |
maxPosts | Cap across all channels. |
includeMedia | Photo, video and thumbnail links (on by default). |
includeChannelInfo | One summary row per channel (on by default). |
channelInfoOnly | Only the summary rows, no posts. |
onlyChanges | Monitoring mode: only posts newer than the last run delivered. |
stateName | Name for the monitoring state, to keep several schedules apart. |
minRows | Fail the run when fewer posts come back, so your alerts fire. |
FAQ
How do I scrape data from a Telegram channel?
Put the channel's username or link in channels and start the run. You get one row per
post, newest first (100 per channel by default), plus a summary row for the channel.
Export the dataset as JSON, CSV or Excel, or read it from the API.
Do I need a Telegram account, API key or bot? No. The Actor reads Telegram's public web preview, the pages anyone can open without logging in.
How do I get a Telegram channel's full posts history?
Set maxPostsPerChannel to 0. The run reads back to your date limit, up to 10,000 posts
per channel per run.
Can I get Telegram channel post views?
Yes. Every post row has views as a number and views_text as Telegram shows it. Large
counts are rounded by Telegram ("157K"), so exact numbers are not available.
Can I search Telegram by keyword?
Within the channels you list, yes: set keywords and the Actor uses Telegram's own
in-channel search. It does not discover new channels; you choose which channels to search.
How do I use this Telegram channel scraper from Python?
Install the Apify API client (pip install apify-client) and call the Actor:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("stippled_journey/telegram-channels").call(run_input={"channels": ["durov"], "keywords": ["TON"], "maxPostsPerChannel": 50})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["type"], row.get("posted_at"), row.get("views"), row.get("text"))
The same works from JavaScript, the Apify MCP server, or integrations such as Make, Zapier, n8n and LangChain.
Does it download photos and videos?
It returns media links (photos, videos, thumbnails) on Telegram's CDN, not the files.
Video links expire, so download them soon after the run. Turn includeMedia off for
smaller rows.
Which channels work?
Public channels with Telegram's web preview on (t.me/s/<channel> shows posts). Private
channels, invite links, groups and user profiles are not supported. Channels with the
preview off are listed in the run log and not charged.
Can it scrape a channel's members or subscriber list? No. It returns the subscriber count only. Member lists, comments and phone numbers are personal data and out of scope by design.
Are author names or contact details collected?
Author signatures are not collected. Email addresses and phone numbers in post text and
channel descriptions are replaced with [email removed] / [phone removed].
Data source and terms
The Actor reads Telegram's public web preview (t.me/s/<channel>) and its search, the
pages Telegram serves to anyone without logging in, 20 posts per request, politely paced.
Telegram's terms of service (telegram.org/tos, checked 2026-10-27) set rules for using
Telegram (no spam, scams, illegal content or copyright violation) and say nothing about
automated access; t.me has no robots.txt. You are responsible for how you use the data,
including copyright in the posts you collect.