Telegram Channel Scraper API: Messages, Views & Reactions
Pricing
from $0.43 / 1,000 messages
Telegram Channel Scraper API: Messages, Views & Reactions
Scrape any public Telegram channel without login or API key: message text, date, views, reactions, photo and video links, polls, replies, forwards, exact subscriber count. Telegram channel API to export Telegram data; Telegram monitor mode returns only new messages. MCP. $0.50 per 1,000 messages.
Pricing
from $0.43 / 1,000 messages
Rating
0.0
(0)
Developer
Saulius AutomatesIT
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Scrape any public Telegram channel without a Telegram account, API key or phone number. This Actor reads Telegram's own public web preview (t.me/s/<channel>) and returns every message as clean JSON, CSV or Excel.
Give it channel usernames (durov), @handles or t.me links. For each message you get:
- Text with line breaks kept, plus the links, hashtags and @mentions in it.
- Date (ISO, UTC), the post link, the author signature and whether it was edited.
- Views and reactions (each emoji with its count, plus a total).
- Media: photo links, video links with thumbnail and duration, albums, files, polls with percentages, voice notes, link previews.
- Context: what it replies to and where it was forwarded from.
Add the channel record and you also get the channel title, description, verified badge, exact subscriber count (not the rounded "10.5M") and its photo, video, file and link counts.
Why use it
- $0.50 per 1,000 messages. The best-known Telegram scrapers on the Store charge $1 to $5 per 1,000 messages. Paid Apify plans get the usual discounts on top.
- No login, no ban risk. Nothing runs on your Telegram account, so there is no session to lose and no phone number to verify.
- Only new messages. Turn on
onlyNewMessages, schedule the run hourly or daily, and each run returns just what was posted since the last one. You pay only for new messages. - Date windows and keyword search.
dateFrom: "7 days"stops paging as soon as it reaches older posts, so short windows are fast and cheap.searchQueryuses Telegram's own in-channel search. - Channels that cannot be read are free. Private channels, users, bots and unknown names are listed in the run summary and never charged.
What it's used for
- News and market monitoring: crypto, trading signals, breaking news and OSINT channels into Google Sheets, Slack or your database on a schedule.
- Brand and competitor tracking: search channels for your brand or product name and catch mentions as they happen.
- Research and datasets: full channel histories with views and reactions for analysis, sentiment or AI training data.
- Influencer and channel vetting: exact subscribers, views per post and engagement before you buy a placement.
- AI agents and RAG: feed an agent the latest posts from a set of channels and let it summarise them.
Telegram API (Telethon, Pyrogram) vs this Actor
The usual Python route to channel messages is Telethon or Pyrogram on Telegram's client API (MTProto). It works, but it runs as your Telegram account: you register an app at my.telegram.org for an api_id and api_hash, log in with a phone number and a code, keep the session file safe, and accept that heavy scraping can get the account limited. The Bot API does not help here: a bot only sees channels it was added to.
| Telethon or Pyrogram | This Actor | |
|---|---|---|
| Needs | Telegram account, phone number, api_id, api_hash, session file | an Apify token |
| Risk | the account can be limited or banned | none to your Telegram account: it is not used |
| Runs on | your server, your IP | Apify, with proxies and retries |
| Private channels and groups you joined | yes | no, public channels only |
| Price | free | $0.50 per 1,000 messages |
Use Telethon for private chats you are a member of. Use this Actor for public channels when you want no account, no phone and no ban risk, on a schedule.
Input
| Field | What it does | Default |
|---|---|---|
channels | Usernames, @handles, t.me links or single post links, one per line | |
maxMessagesPerChannel | Newest first; 0 = whole history (up to 100,000) | 100 |
dateFrom, dateTo | 2026-09-01 or relative (7 days, 24 hours) | all time |
searchQuery | Only messages matching a word, phrase or #hashtag | |
onlyNewMessages | Return only messages newer than the last run's newest | false |
includeChannelInfo | One channel record per channel | true |
channelInfoOnly | Only the channel records, no messages | false |
concurrency | Channels read in parallel | 3 |
Example:
{"channels": ["durov", "https://t.me/telegram", "@tginfo"],"dateFrom": "30 days","maxMessagesPerChannel": 1000}
Output
One item per message:
{"type": "message","channel": "durov","channelTitle": "Pavel Durov","messageId": 548,"url": "https://t.me/durov/548","date": "2026-09-11T16:04:02+00:00","edited": false,"author": "Pavel Durov","text": "🤝 Telegram has become the sponsor of Codeforces, the largest competitive programming platform in the world...","views": 1950000,"viewsText": "1.95M","reactions": [{ "emoji": "telegram-stars", "count": 21100 }, { "emoji": "custom:5399847211989246390", "count": 31000 }],"reactionsTotal": 48510,"mediaType": "text","photos": [],"videos": [],"linkPreview": { "url": "https://codeforces.com/blog/entry/156620", "siteName": "Codeforces", "title": "Telegram Returns as Title Sponsor of Codeforces!" },"links": ["https://codeforces.com/blog/entry/156620"],"hashtags": [],"mentions": [],"forwardedFrom": null,"replyTo": null,"scrapedAt": "2026-10-03T13:32:48.223Z"}
And one channel record per channel (type: "channel"):
{"type": "channel","title": "Pavel Durov","username": "durov","verified": true,"description": "Founder of Telegram.","subscribers": 10530052,"subscribersText": "10.5M","photoCount": 102,"videoCount": 46,"linkCount": 200,"kind": "channel","url": "https://t.me/durov"}
mediaType is one of text, photo, video, album, document, poll, voice, sticker, round_video or unsupported. Views above 1,000 are rounded by Telegram (viewsText has the original, for example 1.95M); reactions shown as custom:<id> are custom emoji. The run summary (messages per channel, channels without a public preview, failures) is saved as OUTPUT in the run's key-value store.
Pricing
Pay per result, no subscription:
| Event | Price |
|---|---|
| Message | $0.0005 per message ($0.50 per 1,000) |
Channel record (only with includeChannelInfo) | $0.001 per channel |
| Actor start | $0.00005 per run |
Channels without a public preview and filters that match nothing are free. Set Maximum cost per run in the run options and the run stops cleanly when it is reached.
Tutorial: Python, schedules and AI agents
You need an Apify API token (Apify Console > Settings > API & Integrations). Apify's free plan includes $5 of monthly credit, about 10,000 messages.
1. Python: the last 30 days of a channel
$pip install apify-client
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("sauliusautomatesit/telegram-channel-scraper").call(run_input={"channels": ["durov", "telegram"],"dateFrom": "30 days","maxMessagesPerChannel": 0,"includeChannelInfo": False,})posts = list(client.dataset(run.default_dataset_id).iterate_items())top = sorted(posts, key=lambda p: p["views"] or 0, reverse=True)[:10]for p in top:print(p["views"], p["url"], (p["text"] or "")[:80])
run.default_dataset_id is for apify-client 3.x; on 2.x write run["defaultDatasetId"]. Pass max_total_charge_usd=1 to .call() to cap a run at $1.
JavaScript (Node.js), after npm install apify-client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('sauliusautomatesit/telegram-channel-scraper').call({channels: ['durov', 'telegram'],maxMessagesPerChannel: 20,includeChannelInfo: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((m) => console.log(m.date, m.views, m.url, (m.text || '').slice(0, 80)));
2. Hourly monitoring with only new messages
Save an input like this as a Task and give it an hourly or daily schedule. Each run returns only posts published since the previous run; connect the Task to Slack, Google Sheets or a webhook in the Integrations tab.
{"channels": ["channel_one", "channel_two", "channel_three"],"onlyNewMessages": true,"maxMessagesPerChannel": 500,"includeChannelInfo": false}
The last message seen per channel is kept in a key-value store named telegram-channel-scraper-state in your account (or telegram-channel-scraper-state-<Actor id> if another tool already uses that name). Delete a key there to start a channel over.
3. AI agents: one MCP URL, one tool
This URL gives any MCP client exactly one tool, this Actor:
https://mcp.apify.com/?tools=sauliusautomatesit/telegram-channel-scraper
Claude Code:
$claude mcp add --transport http telegram-channels "https://mcp.apify.com/?tools=sauliusautomatesit/telegram-channel-scraper"
Cursor, Claude Desktop, VS Code and other clients that take JSON:
{"mcpServers": {"telegram-channels": {"url": "https://mcp.apify.com/?tools=sauliusautomatesit/telegram-channel-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Then ask: "What did @durov and @telegram post this week, and which post got the most views?"
Related Actors
- Reddit Search Scraper: the same keyword monitoring across Reddit posts, no login.
- YouTube Transcript Scraper: YouTube videos and whole channels as text, for cross-platform monitoring and RAG.
- Google Trends API: Google search interest for the topics your channels track.
- Threads Search API: public Threads posts by keyword, for the same social listening.
- WeChat Article Search: WeChat Official Account articles by keyword, for China coverage.
Limits and notes
- Only public channels with Telegram's web preview switched on can be read. Private channels and groups, invite links (
t.me/+...), users and bots are skipped and listed in the summary. - If nothing can be read (only private channels, a typo in the input, or Telegram unreachable), the run still finishes normally, costs only the start fee, and the dataset holds one
errorrow per channel saying why. - Comments under posts (the discussion group) are not included.
- Photo and video links point to Telegram's CDN and expire after some hours; download the files soon after the run if you need them.
- Video links are present for videos Telegram plays in the web preview; very large videos show only the thumbnail.
- Not affiliated with Telegram.
FAQ
Do I need a Telegram API key, api_id or phone number? No. The Actor reads Telegram's public web preview, so no account, api_id, api_hash, bot token or phone login is involved.
Can my Telegram account get banned? No account is used, so there is nothing to ban.
Can I search a channel for a keyword? Yes: searchQuery uses Telegram's own in-channel search, for a word, phrase or #hashtag.
How do I export a whole channel to CSV? Set maxMessagesPerChannel to 0 (whole history, up to 100,000 messages) and download the dataset as CSV or Excel when the run ends.