Telegram Channel Scraper API: Messages, Views & Reactions avatar

Telegram Channel Scraper API: Messages, Views & Reactions

Pricing

from $0.43 / 1,000 messages

Go to Apify Store
Telegram Channel Scraper API: Messages, Views & Reactions

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

Saulius AutomatesIT

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

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. searchQuery uses 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 PyrogramThis Actor
NeedsTelegram account, phone number, api_id, api_hash, session filean Apify token
Riskthe account can be limited or bannednone to your Telegram account: it is not used
Runs onyour server, your IPApify, with proxies and retries
Private channels and groups you joinedyesno, public channels only
Pricefree$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

FieldWhat it doesDefault
channelsUsernames, @handles, t.me links or single post links, one per line
maxMessagesPerChannelNewest first; 0 = whole history (up to 100,000)100
dateFrom, dateTo2026-09-01 or relative (7 days, 24 hours)all time
searchQueryOnly messages matching a word, phrase or #hashtag
onlyNewMessagesReturn only messages newer than the last run's newestfalse
includeChannelInfoOne channel record per channeltrue
channelInfoOnlyOnly the channel records, no messagesfalse
concurrencyChannels read in parallel3

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:

EventPrice
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 ApifyClient
client = 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?"

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 error row 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.