Telegram Channel Scraper & Monitor — Posts, Views, No Login avatar

Telegram Channel Scraper & Monitor — Posts, Views, No Login

Pricing

Pay per usage

Go to Apify Store
Telegram Channel Scraper & Monitor — Posts, Views, No Login

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

Reza Baghestani

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

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 null where something does not apply.
  • Clean text. text_normalized has 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 original text is 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 error row with a reason and is never charged.

Media files are not downloaded. The media_type field tells you what each post contains.

Input

FieldDefaultWhat it does
channelsrequiredUsernames or links: durov, @durov, https://t.me/durov, https://t.me/s/durov, https://t.me/durov/123
maxMessagesPerChannel50Newest posts to return per channel (1–5000)
onlyNewfalseReturn only posts newer than the previous run with the same stateName
stateNamedefaultName 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
proxyConfigurationoffOptional 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_typeMeaningCharged
messageOne postfree during early access
errorBad input, unavailable or empty channel, fetch failureno
noticeExpected outcome, e.g. no_new_messages in monitoring modeno

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 return channel_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 maxMessagesPerChannel new 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.