Telegram Channel Scraper: Posts, Views and Media, No Login avatar

Telegram Channel Scraper: Posts, Views and Media, No Login

Pricing

from $0.97 / 1,000 post scrapeds

Go to Apify Store
Telegram Channel Scraper: Posts, Views and Media, No Login

Telegram Channel Scraper: Posts, Views and Media, No Login

Export any public Telegram channel: post text, dates, view counts, links, forwards and media. Reads the public web preview, so there is no login, no phone number, no API key and no account to get banned.

Pricing

from $0.97 / 1,000 post scrapeds

Rating

5.0

(1)

Developer

Oski

Oski

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Telegram Channel Scraper

Pull any public Telegram channel's posts into clean structured data: text, post date, view count, outbound links, forwards, replies, link previews and media. No login, no phone number, no API token, no Telegram account. On a live run it pulled Pavel Durov's channel with view counts up to 15.6 million per post, and 1,000 posts cost about $1.

What you can use it for

  • Marketing agencies tracking what competitor and industry channels post, and which posts get the most views.
  • Researchers and journalists archiving a channel's history within a date window for analysis.
  • Crypto and finance teams monitoring announcement channels on a schedule and catching new posts fast.
  • Brand and trust teams watching channels that mention or forward their links.
  • Builders feeding channel text into search indexes, alerts or AI summaries.

Why this one

Most Telegram scrapers log in with a real account. Those accounts get banned, and the scraper goes down with them. This one reads the same public web preview (t.me/s/<channel>) a logged-out browser sees, so there is no account to ban. The main failure mode is rate limiting, and it rotates proxy IPs to handle that.

  • Real view counts and dates, parsed to numbers (2.94M becomes 2940000).
  • Media, forwards, replies, links and polls detected and labelled.
  • Dead or private handles are named in the run log, not silently skipped.

How to use it

  1. Under Channels, add public channels one per line: the name (durov), @durov, or the link https://t.me/durov.
  2. Optionally pick Posted on or after in the date picker, or choose a relative date such as 30 days.
  3. Leave Max posts per channel at 1,000 (or change it) and click Start.
  4. When it finishes, open the Output tab and download as CSV, Excel or JSON.

While it runs, the status line at the top of the run page shows progress (for example "Channel 1 of 3: @durov. 200 posts so far."). When it finishes, the same line says what was found and explains anything that was skipped, so you never have to read the log.

How much does it cost?

You pay a $0.002 start fee per run, then $0.001 per post returned. You only pay for posts you actually get: a dead handle or a channel with fewer posts than your cap costs nothing extra.

PostsMathsCost
100$0.002 + 100 x $0.001about $0.10
1,000$0.002 + 1,000 x $0.001about $1.00
10,000$0.002 + 10,000 x $0.001about $10.00

A typical 1,000-post pull of a busy channel costs about $1. To keep a run inside a budget, set Max posts in total.

Input

FieldWhat it does
channelsPublic channels: a name (durov), @durov, or a link (https://t.me/durov). One per line, or separated by commas.
maxPostsPerChannelHow many recent posts per channel, newest first (default 1,000).
maxPostsOptional hard cap across all channels.
dateFrom / dateToKeep posts in a date window. Use the date pickers, or relative dates such as 30 days; typed dates like 2026-09-01 or 01/09/2026 work too. Paging stops once older posts are reached.
maxPagesPerChannelAdvanced safety stop. It grows automatically to fit Max posts per channel, so you never need to change it.
proxyConfigurationAdvanced. Residential by default; rotates IPs when Telegram rate-limits.

A realistic job, up to 1,000 posts from each of two channels since the start of the year:

{
"channels": ["durov", "@telegram"],
"maxPostsPerChannel": 1000,
"dateFrom": "2026-01-01"
}

Output

One record per post:

{
"channel": "durov",
"post_id": "durov/528",
"message_number": 528,
"url": "https://t.me/durov/528",
"date": "2026-06-15T18:58:13+00:00",
"text": "The UK government wants to ban social media...",
"views": 15600000,
"outbound_links": ["https://example.com"],
"media_types": ["video"],
"photos": null,
"video_thumbs": ["https://cdn.../thumb.jpg"],
"forwarded_from": null,
"forwarded_from_url": null,
"is_forward": false,
"reply_to_url": null,
"link_preview": null,
"channel_subscribers": 11800000,
"channel_title": "Pavel Durov",
"scraped_at": "2026-07-08T19:30:00+00:00"
}

media_types can contain photo, video, document, poll and sticker. link_preview holds the url, title, description and site name when the post shows a preview card.

Tips for bigger runs

  • Raise the page cap with the post cap. Each page is about 20 posts, so the default 60 pages covers about 1,200 posts. For 5,000 posts from one channel, set maxPagesPerChannel to 250 or more.
  • Add channels to go wide. One run can cover many channels, each up to its own cap, all under one start fee.
  • Use dateFrom for history jobs. Paging stops as soon as it passes your start date, so you never pay for posts you filtered out.
  • Keep the residential proxy on for big runs. On a rate limit the actor switches IP and carries on.
  • For monitoring, schedule small runs instead of one huge one. A daily run with dateFrom set to yesterday returns only the latest posts.

Scheduling and integrations

Schedule the actor in Apify (hourly, daily or weekly) to monitor channels, then send each run's results to Google Sheets, a webhook, Make or Zapier using Apify's integrations. You can also call it from your own code:

curl -X POST "https://api.apify.com/v2/acts/oski~telegram-channel-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"channels": ["durov"], "maxPostsPerChannel": 1000}'

If something looks wrong

The status line at the end of every run explains anything that was skipped or came back empty. The common messages:

MessageWhat to do
Input problem: ...Something in the input needs changing, and the message says what. The run stopped before anything was charged.
@... was not found, is private, or has no public postsOnly public channels with a web preview can be read. Check the name on t.me; private channels and groups are not possible.
"..." is not a Telegram channel name or linkChannel names use letters, numbers and underscores only. Paste the channel's t.me link instead.
@... has no posts in the chosen datesWiden the date range or clear it.
Telegram slowed us down on @...Telegram rate-limited the run. Run it again later; posts already collected are kept.

Still stuck? Open an issue on the actor page with the run link and it gets looked at quickly.

FAQ

Is it legal to scrape Telegram channels? The actor only reads the public preview that Telegram shows to anyone without logging in. You are responsible for how you use the data, including respecting privacy law such as GDPR.

Do I need a Telegram account, phone number or API key? No. That is the point: there is no account, so there is nothing to get banned.

Can it read private channels or group chats? No. Only public channels with a web preview are accessible. Private channels, groups and secret chats are not.

Why did I get fewer posts than I asked for? The channel may have fewer posts, your date window may be narrow, or the page cap was reached first (raise maxPagesPerChannel). Channels that do not exist or have no public preview are named in the run log.

How fresh is the data? Live. Each run reads the channel at the moment it runs, including current view counts.

What if it breaks? Open an issue on the actor page and it gets looked at quickly.

Other scrapers from Oski