Telegram Channel Scraper โ Posts, Search & Monitoring
Pricing
from $1.00 / 1,000 results
Telegram Channel Scraper โ Posts, Search & Monitoring
Scrape public Telegram channels via the open t.me/s/ web preview โ posts, in-channel keyword search, channel info, and an incremental monitor mode that returns only new messages each run. No login, no bot token.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Pull posts from any public Telegram channel โ text, views, dates, forwards, links, and media โ as clean CSV/JSON. Then keep it fresh: monitor mode returns only the messages posted since your last run, so a scheduled task becomes a live feed instead of a re-scrape.
No login, no bot token, no phone number. Reads Telegram's public t.me/s/<channel> web preview.
What you can do
| Mode | What it does | Fields it uses |
|---|---|---|
| Channel posts | Messages from one or more public channels, newest-first. | channels, maxItems |
| Search | In-channel keyword search across each channel. | channels, searchQueries, maxItems |
| Channel info | Title, subscribers, description, post/photo/video counts. | channels |
| Monitor (incremental) | Only messages posted since the last run, per channel. State persists between runs. | channels, maxItems, monitorStoreName |
Example input
Latest 100 posts from two channels:
{"mode":"channel","channels":["telegram","https://t.me/durov"],"maxItems":100}
Track new posts on a schedule (each run returns only what's new):
{"mode":"monitor","channels":["durov","telegram"],"maxItems":50}
Watch crypto channels for announcement keywords:
{"mode":"search","channels":["binance","coingecko"],"searchQueries":["listing","partnership"],"maxItems":50}
@name, name, t.me/name, and https://t.me/s/name all work (case-insensitive).
Scheduled monitoring
To turn monitor mode into a live feed: in the Apify Console go to Schedules โ Create, set an interval (e.g. every 15 minutes), and point it at this Actor with mode: "monitor". Each run stores only the messages posted since the last one. Keep the same monitorStoreName across runs so the watermark persists, and give a different name to each separate monitor task. Pipe the dataset to a webhook/Slack/Sheet via Apify integrations to get alerts.
Output (per message)
{"type":"message","channel":"telegram","id":123,"url":"https://t.me/telegram/123","text":"โฆ","date":"2026-06-22T15:01:34+00:00","views":1200000,"author":null,"isForwarded":false,"forwardedFrom":null,"tags":["update"],"tagList":"update","mentions":[],"links":["https://โฆ"],"firstLink":"https://โฆ","media":[{"type":"photo","url":"https://โฆ"}],"mediaCount":1,"linkPreview":{"url":"โฆ","siteName":"โฆ","title":"โฆ","description":"โฆ"}}
tagList, firstLink, and mediaCount are flat mirrors of the array fields, so CSV/Excel exports are usable without unpacking JSON.
What this does โ and doesn't โ return
To keep expectations honest:
- โ Public channel content: text, date, view count, author signature, forwards, replies, hashtags, mentions, outbound links, media URLs, and link-preview cards. Plus in-channel search, channel info, and incremental monitoring.
- โ Public channels only โ those visible at
t.me/s/<channel>. Private channels, groups, and user accounts are not accessible (the Actor rejects invite links with a clear message). - โ No member lists, DMs, poll voters, or per-user reactions. Those require a logged-in account / bot token, which this Actor deliberately does not use. View counts are included; reaction counts are not exposed by the public preview.
- โ ๏ธ History depth depends on the public preview. The Actor pages backward via
?before=, but coverage is whatever Telegram serves to its web preview โ not guaranteed to reach a channel's very first post.
Notes
- Proxy is off by default. The preview pages are public; enable Apify Proxy (or set
requestDelayMsto ~300โ1000) only for large drains or many channels, to spread the per-IP rate limit. maxTotalItemscaps results (and charges) across the whole run, independent of the per-channelmaxItems.- One bad/private/typo'd channel is logged and skipped โ it won't abort the run or lose the other channels' data.
- How it works / longevity: this reads Telegram's public
t.me/s/HTML preview (no API). That preview has been stable for years, but it is an undocumented endpoint โ a Telegram markup change can require a parser update (you'll see a "no posts parsed / markup may have changed" warning), and if Telegram ever added JavaScript bot-protection to it, an HTTP-only scraper like this would need a browser-based rework. No reactions or poll-voter data is exposed by the preview.
Pricing
Pay per result โ you're charged once per message (or channel-info record) stored to the dataset. Cap any run with maxTotalItems.
