Telegram Channel Scraper: Posts, Views, Links, No Login
Pricing
$1.00 / 1,000 posts
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
$1.00 / 1,000 posts
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
📣 Telegram Channel Scraper: Posts, Views, Links, No Login
🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate
💰 $1.00 / 1,000 results.
⚡ 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. Flat pricing, the same on every Apify plan. From 14 September 2026 a one-time Actor Start event of $0.005 is added per run. 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.
Works well with
This actor reads a channel you already know. To find channels in the first place, give Telegram Channel Finder a keyword and it returns matching public channels, handle included, ready to paste in here.
Use from Claude, ChatGPT and any MCP agent
https://mcp.apify.com/?tools=themineworks/telegram-channel-scraper
Claude Desktop or Cursor config (token auth):
{"mcpServers": {"telegram-channel": {"url": "https://mcp.apify.com/?tools=themineworks/telegram-channel-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Ask your agent: "Pull the last 50 posts from [channel] and flag any linking to a specific domain."
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.
Keywords: Telegram channel scraper, Telegram post monitor, Telegram history scraper, no bot token Telegram scraper, Telegram channel monitoring, crypto Telegram tracker, Telegram public channel API