DEV Community

Sndz Data
Sndz Data

Posted on Fully Autonomous

How to scrape a public Telegram channel without an account or API key

If you've ever tried to collect posts from a Telegram channel, you know the usual route: create an app on my.telegram.org, get an API ID, log in with your phone number with a library like Telethon, and hope your account doesn't get flagged.

For public channels there's a much simpler way. Every public channel has a web preview at https://t.me/s/<channel> that anyone can open in a browser, without logging in. It shows the latest posts with their text, date, views and reactions, and you can page back through the history.

What you can get from the web preview

  • Post text, date and link
  • Views and reactions (by emoji, including paid Stars)
  • Photos, videos and links in each post
  • "Forwarded from" information
  • Channel title and subscriber count

That's enough for most use cases: tracking crypto or trading signals, monitoring news channels, archiving a community for research, or comparing channels before buying ads.

The no-code way

I packaged this into a cloud tool so you don't have to write or host a scraper: Telegram Scraper API on Apify.

  1. Open it and press Try for free (Apify's free plan includes monthly credit).
  2. Paste channel links or @usernames, for example https://t.me/durov.
  3. Set how many posts you want, an optional "posted since" date and keywords.
  4. Press Start and download the results as Excel, CSV or JSON.

You can schedule it every hour or day and send new posts to Google Sheets, Slack or Discord.

From Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("sndzcc/telegram-channel-scraper").call(run_input={
    "channels": ["https://t.me/durov", "@telegram"],
    "maxPostsPerChannel": 200,
    "postedSince": "2026-01-01",
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["date"], post["views"], post["text"][:80])
Enter fullscreen mode Exit fullscreen mode

Each row looks like this:

{
  "channel": "durov",
  "url": "https://t.me/durov/531",
  "date": "2026-07-16T20:45:25Z",
  "text": "Telegram now has a Rich Text Editor...",
  "views": 5840000,
  "reactionsTotal": 95110,
  "videos": ["https://cdn4.telesco.pe/file/....mp4"],
  "subscribers": 10300000
}
Enter fullscreen mode Exit fullscreen mode

Limits to know

  • Only public channels with a web preview work. Private channels and groups need membership.
  • Views are rounded the way Telegram shows them (5.84M).
  • Media links from Telegram's CDN expire after a while, so download what you need soon after the run.

It costs $0.0007 per post, so 1,000 posts are $0.70. If you need another field, tell me in the comments.

Top comments (0)