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
Bobby
Maintained by CommunityActor 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.