Telegram Channel Scraper: Posts, Views, Links, No Login
Pricing
Pay per usage
Telegram Channel Scraper: Posts, Views, Links, No Login
Scrape public Telegram channel posts with text, view counts, outbound links and timestamps. Walks full channel history over plain HTTP. No Bot API token, no phone number, no login. Pay per post delivered.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
๐ฃ Telegram Channel Scraper: Posts, Views, Links, No Login
โก Pure HTTP. No Bot API token, no phone number, no MTProto session, no login.
๐ธ You are only charged for a post that actually lands in your dataset. Missing or private channels are never billed.
Overview
Telegram Channel Scraper reads posts from any public Telegram channel and returns them as clean structured rows: post text, view count, outbound links, media flag, timestamp and a direct permalink. Give it a username, an @handle, or a t.me link.
It walks real channel history, not just the latest screen. Pagination follows Telegram's own cursor backwards through the archive, so you can pull hundreds of posts per channel in one run.
โ No login or API token ยท โ Full history, not just recent posts ยท โ View counts parsed to numbers ยท โ MCP-ready for AI agents
What you don't need
Most Telegram tooling asks for a Bot API token or, worse, your phone number and an MTProto session. Both approaches tie scraping to an identity that can be rate-limited or banned, and a bot can only read channels it has been added to.
This actor uses none of that. Telegram publishes every public channel as a server-rendered page at t.me/s/{channel}, and that page carries the real post text, view counts and timestamps. We read what Telegram already serves publicly, so there is no account to get restricted.
Input
{"channels": ["durov", "@telegram", "https://t.me/durov"],"maxPostsPerChannel": 100}
| Field | What it takes |
|---|---|
channels | Public channels. Bare username, @username, or any t.me link, all normalised for you. |
maxPostsPerChannel | Hard cap per channel. History is walked 20 posts at a time, so this is your main cost and runtime control. |
Scope, stated plainly: this reads public channels only. Private channels, groups and direct messages require an authenticated session and are out of scope by design. If a channel is private or does not exist, the run reports it and moves on rather than failing.
Output
{"channel": "durov","channel_title": "Pavel Durov","subscribers": "11.2M subscribers","post_id": "540","post_url": "https://t.me/durov/540","text": "๐บ๐ฟ The 2026 International Olympiad in Informatics starts today in Tashkent...","views_label": "1.14M","views": 1140000,"has_media": true,"posted_at": "2026-08-10T09:29:58+00:00","scraped_at": "2026-08-13T12:04:51.220Z"}
| Field | Description |
|---|---|
๐ฃ channel | Channel username |
๐ท๏ธ channel_title | Channel display title |
๐ฅ subscribers | Subscriber count as Telegram displays it |
๐ข post_id | Post number within the channel, stable for deduplication |
๐ post_url | Direct public permalink |
๐ฌ text | Post text, formatting stripped |
๐๏ธ views_label | Views exactly as shown, e.g. 1.14M |
๐ views | The same figure parsed to a sortable integer, e.g. 1140000 |
๐ผ๏ธ has_media | Whether the post carries photo, video, document, voice or sticker |
๐ links | Outbound links found in the post |
๐
posted_at | ISO timestamp of publication |
๐ scraped_at | ISO timestamp of capture |
Why two view fields. Telegram renders views as 1.14M, which is what a human reads but useless for sorting or thresholds. We return the original label and a parsed integer so you can filter on views > 100000 without writing your own parser.
Common use cases
Brand and reputation monitoring. Watch channels where your product, token or company gets discussed, and catch a post while it is still spreading rather than after it trends.
Crypto and market signals. Announcement channels move fast and are frequently the first public source. View counts give you a reach signal alongside the text.
Competitive and campaign tracking. Follow a competitor's announcement channel on a schedule and diff what changed.
Compliance and moderation research. Collect public posts from channels you are required to monitor, with permalinks for evidence.
AI agents and RAG. Feed structured channel history into a summariser or an agent that answers "what did this channel say about X?"
Pricing
| Event | Price | You pay when |
|---|---|---|
| Post delivered | $0.001 | A post lands in your dataset |
$1.00 per 1,000 posts. Channels that are private, missing or empty cost nothing, which matters on a scheduled watchlist where most channels are quiet on a given day.
Run it on a schedule
Channel monitoring is this actor's natural mode.
- Run once with the input you want repeated, then click Save as a task.
- In the Apify Console go to Schedules โ Create new.
- Pick a frequency and attach the saved task.
- Wire the dataset to Sheets, Slack or a webhook from the Integrations tab.
Deduplicate on post_id across runs so a repeated schedule never reprocesses the same post.
FAQ
Do I need a Telegram account, bot token or phone number? No. None of the three. The actor reads Telegram's public channel preview.
Can it read private channels or groups? No. Those need an authenticated session. This actor is deliberately limited to public channels.
How far back can it go? It walks backwards using Telegram's own cursor until it reaches your cap or the start of the available preview history. Very old posts in long-running channels may not all be exposed publicly.
Why did a channel return fewer posts than I asked for? Either the channel has fewer public posts than your cap, or it has gaps from deleted posts. The run reports what it actually found rather than padding.
Are view counts exact?
They are exactly what Telegram publishes, which is rounded for large numbers (1.14M). We return that label plus a parsed integer of the same value.
Use from Claude, ChatGPT and any MCP agent
https://mcp.apify.com/?tools=themineworks/telegram-channel-scraper
Or call it programmatically:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/telegram-channel-scraper').call({channels: ['durov', 'telegram'],maxPostsPerChannel: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Questions, or need a field we don't return yet? Reach out through the Apify profile.