Nino Ventures · 2026-10-31

How to scrape Telegram channel posts without the API or a phone number

Telegram has an official API, but to use it you need a phone number, an app ID from my.telegram.org, and a client library that logs in as a user. For reading public channels that's overkill. Every public channel also has a web preview at https://t.me/s/<channel> that anyone can open in a browser, no account needed. It shows the same posts, view counts and reactions.

This guide shows what you can get from that preview, how to page back through history, and how to turn it into a feed of new posts.

How the web preview works

Open t.me/s/durov and you get the 20 most recent posts. Add ?before=300 and you get the 20 posts before post 300. That's the whole pagination model: post IDs are sequential per channel, so you walk back 20 at a time until you hit the date or count you want.

Each post has its text, an ISO timestamp, a view count ("24.4M", which you'll want as a number), reactions, links, link previews, photos and video URLs, replies and forwards. The channel header has the title, description and subscriber count.

Not every channel has it. Some owners turn the preview off, and private channels, groups and bots never have one. When we tried 22 well-known names, 20 worked. Reuters and CNN redirected to a "join" page instead.

Scraping it without writing the parser

The Telegram Channel Scraper + New Posts Monitor on Apify handles paging, parsing and number conversion. $0.60 per 1,000 posts, nothing for channels that have no preview.

{
  "channels": ["cointelegraph", "binance_announcements", "https://t.me/thehackernews"],
  "maxPostsPerChannel": 200,
  "postedWithinDays": 14
}

Our test on 31 October 2026: 20 channels, 150 posts each where available, 2,767 posts in 52 seconds. Every post had a date and view count, 99% had text, 90% had at least one link, and 57% had reactions.

A row (trimmed):

{
  "channel": "binance_announcements",
  "postId": 9103,
  "date": "2026-10-31T14:30:09+00:00",
  "text": "Security Incident | Recovery Update #3: 90% of Stolen Assets Replenished; Proof of Reserves Snapshot Provided (2026-10-31) ...",
  "views": 24100,
  "links": ["https://www.binance.com/en/support/announcement/detail/1fdf1f61559c401da0435895ffcccb62?utm_source=EnglishTelegram&utm_medium=GlobalCommunity&utm_campaign=AnnouncementBot"],
  "channelSubscribers": 3250000,
  "url": "https://t.me/binance_announcements/9103"
}

Filtering by keyword

Telegram has an in-channel search (?q=bitcoin), but on the web it only returns the latest 20 or so matches. For anything deeper, read the posts and filter them yourself. The actor's Keep only posts containing option does that: posts without a match are dropped and not charged. Matching is case-insensitive and starts at a word boundary, so eth catches "Ethereum" but not "together".

A feed of new posts

Turn on Only new posts since last run and schedule it hourly. The first run saves the latest post ID for each channel. After that, each run returns only newer posts. If nothing new was posted, the run takes a few seconds and costs nothing. Send the output to Slack, a sheet, or a webhook through Apify's integrations or n8n.

Typical uses: crypto teams watching exchange announcement channels for listings, journalists tracking news channels in other languages, and marketers checking which competitor posts get the most views per subscriber.

Things the preview won't give you

Public posts can still contain personal data. If you store them, make sure you have a reason to under GDPR or whatever law applies to you.

More guides