Telegram Channel Scraper & Monitor — Posts, Views, No Login
Pricing
Pay per usage
Telegram Channel Scraper & Monitor — Posts, Views, No Login
Scrape public Telegram channel posts without login, bot token or API key. One clean row per post: text, views, reactions, links, hashtags, forwards and detected language, with Persian and Arabic text normalized. Monitor mode returns only new posts. Export JSON, CSV or Excel.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Reza Baghestani
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Telegram Channel Reader
Read public Telegram channels as clean, agent-ready data. You give it channel usernames or t.me links. It returns one row per post with:
- the original text and a normalized version
- detected language, with a confidence score
- links, hashtags and mentions
- views and reactions
- media type, poll questions and options
- forward source and reply target
- duplicate detection across the channels in a run
Monitoring mode returns only the posts that are new since your last run.
Built for AI agents and for people who track news across languages. Text handling is tuned for Russian, Ukrainian, Arabic, Persian, Turkish and English, and language detection covers 176 languages.
What you get
- Agent-ready rows. Every post row has the same flat set of fields, with
nullwhere something does not apply. - Clean text.
text_normalizedhas invisible characters and right-to-left control marks removed. Persian and Arabic letter variants (ي/ی, ك/ک) and digits (۱۲۳ / ١٢٣ → 123) are unified, and Persian half-spaces (ZWNJ) are kept where they belong. The originaltextis always kept as well. - Language detection per post, with a confidence score.
- Monitoring mode (
onlyNew): a checkpoint is kept per channel, so the next run returns only newer posts. - Clear failures. A missing, private or empty channel returns one
errorrow with a reason and is never charged.
Media files are not downloaded. The media_type field tells you what each post contains.
Input
| Field | Default | What it does |
|---|---|---|
channels | required | Usernames or links: durov, @durov, https://t.me/durov, https://t.me/s/durov, https://t.me/durov/123 |
maxMessagesPerChannel | 50 | Newest posts to return per channel (1–5000) |
onlyNew | false | Return only posts newer than the previous run with the same stateName |
stateName | default | Name of the checkpoint set, so separate monitors don't interfere |
newerThan | – | Skip older posts: 2026-10-01, an ISO date-time, or 3 days / 12 hours |
proxyConfiguration | off | Optional proxy for fetching t.me |
Example input
{"channels": ["durov", "https://t.me/bbcpersian", "@meduzalive"],"maxMessagesPerChannel": 20,"onlyNew": true,"stateName": "morning-brief"}
Output
Every row has a row_type:
row_type | Meaning | Charged |
|---|---|---|
message | One post | free during early access |
error | Bad input, unavailable or empty channel, fetch failure | no |
notice | Expected outcome, e.g. no_new_messages in monitoring mode | no |
Posts come out oldest first within each channel.
Example message row (real output, text shortened)
{"row_type": "message","channel": "durov","channel_title": "Pavel Durov","message_id": 548,"url": "https://t.me/durov/548","date": "2026-09-11T16:04:02+00:00","text": "🤝 Telegram has become the sponsor of Codeforces — the largest competitive programming platform in the world. …","text_normalized": "🤝 Telegram has become the sponsor of Codeforces — the largest competitive programming platform in the world. …","language": "en","language_confidence": 0.9822,"translation": null,"translation_language": null,"views": 2120000,"reactions": [{"emoji": "paid_star", "count": 21400}, {"emoji": "custom:5399847211989246390", "count": 32500}],"reactions_total": 72300,"media_type": null,"media_count": 0,"links": ["https://codeforces.com/blog/entry/156620"],"hashtags": [],"mentions": [],"forwarded_from_name": null,"forwarded_from_channel": null,"forwarded_from_url": null,"forwarded_from_author": null,"reply_to_message_id": null,"link_preview_url": "https://codeforces.com/blog/entry/156620","link_preview_title": "Telegram Returns as Title Sponsor of Codeforces!","poll_question": null,"poll_options": [],"poll_voters": null,"author_signature": "Pavel Durov","edited": false,"is_service": false,"duplicate_of": null,"scraped_at": "2026-10-07T12:25:49+00:00"}
translation and translation_language are reserved for the planned translation add-on and are always null for now.
Example error row
{"row_type": "error","channel": "thischanneldoesnotexist_zz9q","input": "thischanneldoesnotexist_zz9q","error_code": "channel_unavailable","error_message": "@thischanneldoesnotexist_zz9q has no public web preview: it does not exist, is private, is a user or bot rather than a channel, or has the preview turned off.","scraped_at": "2026-10-07T12:25:49+00:00"}
Error codes: invalid_input, invalid_channel, channel_unavailable, channel_empty, fetch_failed. Notice codes: no_new_messages, translation_unavailable.
Pricing
Free during early access: you only pay Apify's usual platform usage for your own runs. Pay-per-event pricing (per returned post) may be introduced later. Error and notice rows will always be free.
Limits, stated plainly
- Public channels with a web preview only. The data comes from
https://t.me/s/<channel>, the same page anyone sees without logging in. Private channels, groups, users, bots and channels whose owners turned off the preview returnchannel_unavailable. - Views are rounded the way Telegram shows them (
18.9M→ 18900000). Telegram's web preview does not show forward counts, so there is no such field. - An album is one row (
media_type: "album",media_count= number of items), identified by its first message id. - In monitoring mode, if more than
maxMessagesPerChannelnew posts arrived since the last run, only the newest ones are returned. Raise the limit or run more often. - No translation yet. Posts come back in their original language. Translation is planned as an add-on once it is reliable on fresh news.
Privacy
Only content that channels publish openly is read. No logins, no member lists, no private groups, and nothing beyond what the public channel page shows.