Telegram Channel Scraper: Posts, Views and Media, No Login
Pricing
from $0.97 / 1,000 post scrapeds
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
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
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.94Mbecomes2940000). - 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
- Under Channels, add public channels one per line: the name (
durov),@durov, or the linkhttps://t.me/durov. - Optionally pick Posted on or after in the date picker, or choose a relative date such as 30 days.
- Leave Max posts per channel at 1,000 (or change it) and click Start.
- 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.
| Posts | Maths | Cost |
|---|---|---|
| 100 | $0.002 + 100 x $0.001 | about $0.10 |
| 1,000 | $0.002 + 1,000 x $0.001 | about $1.00 |
| 10,000 | $0.002 + 10,000 x $0.001 | about $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
| Field | What it does |
|---|---|
channels | Public channels: a name (durov), @durov, or a link (https://t.me/durov). One per line, or separated by commas. |
maxPostsPerChannel | How many recent posts per channel, newest first (default 1,000). |
maxPosts | Optional hard cap across all channels. |
dateFrom / dateTo | Keep 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. |
maxPagesPerChannel | Advanced safety stop. It grows automatically to fit Max posts per channel, so you never need to change it. |
proxyConfiguration | Advanced. 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
maxPagesPerChannelto 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
dateFromfor 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
dateFromset 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:
| Message | What 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 posts | Only 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 link | Channel names use letters, numbers and underscores only. Paste the channel's t.me link instead. |
| @... has no posts in the chosen dates | Widen 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
- Google Ads Transparency Scraper: every ad an advertiser runs on Google.
- Facebook Ad Library Scraper: ads from Meta's public Ad Library.
- LinkedIn Ad Library Scraper: ads from LinkedIn's public Ad Library.
- Website Contact Finder: emails, phones and socials from the websites a channel links to.
- App Store Reviews Scraper and Google Play Reviews Scraper: what users say about any app.