Telegram Channel Scraper — Posts, Views, Reactions & Monitor
Pricing
from $0.99 / 1,000 telegram posts
Telegram Channel Scraper — Posts, Views, Reactions & Monitor
Scrape public Telegram channels into JSON: posts, views, reactions, media, forwards, and channel profiles. No login. Incremental monitor for scheduled runs. A Telegram API alternative for Python, Node.js, and MCP.
Pricing
from $0.99 / 1,000 telegram posts
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Telegram Channel Scraper — Public Posts, Views & Monitor
Unofficial tool for publicly accessible Telegram web preview data. Telegram and related trademarks belong to their respective owners. Not affiliated with, sponsored by, or endorsed by Telegram FZ-LLC. Provided for informational use only; users must comply with applicable terms and laws. Public channels with web preview only — no private chats, members, or phone numbers.
| Social listening | Product launches |
|---|---|
| Telegram Channel Scraper ◄── you are here | Bluesky Scraper |
| Public posts, views, reactions, profiles, keyword filter, monitor | Posts, profiles, search, threads, graph, monitor |
Telegram scraper for Apify — extract public channel posts, views, reactions, media URLs, forwards, link previews, and channel profiles from the public web preview, with no login, phone number, or bot token. Use it as a Telegram API alternative from Python, Node.js, or MCP.
Monitor mode stores per-channel watermarks in a named key-value store and returns only posts newer than the last run — built for hourly/daily schedules, brand listening, and competitor tracking.
When to use this Actor
- Archive public channel posts (news, crypto, government, brand, OSINT)
- Pull view counts, reaction tallies, and media CDN URLs without an MTProto session
- Resolve channel profiles (title, bio, subscriber count, verified)
- Keyword / hashtag filter across a list of channels you already follow
- Scheduled incremental monitoring of new posts (optional webhook / bot alerts)
When not to use
- Private groups, invite links (
t.me/+,joinchat), ort.me/c/…numeric chats - Member lists, phone numbers, last-seen, or adding users
- Channels that disabled the public web preview
- Comments from a linked discussion group (not exposed on the public preview)
Key features
- No login — HTTP parse of the public preview (
t.me/s/{channel}+ embed), not a shared user session - 4 modes — posts, profiles, keyword search inside given channels, incremental monitor
- Full public post contract — text + HTML, views (
1.59M→ integer), reactions when present, photos/videos, documents, polls, forwards, replies, link previews, hashtags, mentions - Multi-channel input — usernames,
@handles,t.me/t.me/sURLs, or a single post URL - Date bounds — ISO dates or relative lookback (
7 days,2 weeks) - Stable pagination —
rel=prev+?before=with per-channel caps - Monitor watermarks —
lastPostIdin a named KV store; optional baseline-only first run - Preview-disabled channels — one
errorrow, the rest of the run continues - RateGate — client RPS budget + 429/403 backoff; proxy optional
Input
| Parameter | Description |
|---|---|
mode | posts, profiles, search, monitor |
startUrls | t.me / t.me/s URLs or a single post URL |
channels | Usernames or @handles |
searchQuery / searchQueries | Keyword filter (required for search) |
sinceDate / untilDate | ISO or relative lookback |
maxItems | Dataset row cap (0 = unlimited) |
maxPostsPerChannel | Per-channel cap |
includeChannelInfo | Copy profile fields onto every post (default true) |
includeReactions | Parse reaction tallies when the preview includes them |
onlyWithMedia / messageTypes | Optional filters |
monitorStoreName | Named KV store for watermarks |
monitorBaselineOnly | First run: set watermark, push nothing |
webhookUrl / telegramToken / telegramChatId | Monitor alerts |
concurrency / maxRequestsPerSecond | Throughput (keep modest) |
proxyConfiguration | Optional; enable if you see HTTP 403 |
Channel archive:
{"mode": "posts","channels": ["telegram", "durov"],"maxItems": 100,"includeChannelInfo": true,"includeReactions": true,"proxyConfiguration": {"useApifyProxy": true}}
Keyword search inside channels:
{"mode": "search","channels": ["telegram"],"searchQuery": "polls","maxItems": 50,"sinceDate": "7 days"}
Monitor (schedule after a baseline run):
{"mode": "monitor","channels": ["telegram"],"monitorStoreName": "telegram-monitor-brand-x","monitorBaselineOnly": true,"maxItems": 200}
After the baseline run, set monitorBaselineOnly to false (or omit it) so later runs push only new posts. Use a distinct monitorStoreName per schedule.
Output
One dataset row per post (or one profile / error row). Channel fields are copied onto each post so you do not need a join.
| Field | Description |
|---|---|
type | post, profile, or error |
channelUsername / channelTitle / channelSubscriberCount | Channel identity |
postId / url / date | Message identity |
text / textHtml | Body |
views | Integer view count |
reactions / totalReactions | Tallies when the preview exposes them |
mediaType / photos / videos | Media CDN URLs (time-limited) |
linkPreview / forwardedFrom / replyToUrl | Graph |
hashtags / mentions / urls | Extracted entities |
error | preview_disabled, not_found, private_invite, … |
monitorTarget | Present on monitor rows |
{"type": "post","channelUsername": "examplechannel","channelTitle": "Example Channel","channelVerified": true,"channelSubscriberCount": 125000,"postId": 123,"url": "https://t.me/examplechannel/123","date": "2025-01-15T12:00:00Z","text": "This is an example channel post.","views": 1590000,"mediaType": "photo","photos": [{ "url": "https://cdn4.telesco.pe/file/example.jpg" }],"reactions": [{ "emoji": "⭐", "isPaid": true, "count": 12 }],"totalReactions": 12,"hashtags": ["#example"]}
Export JSON, JSONL, CSV, Excel, or XML from the default dataset.
Use cases
- Brand / OSINT listening — schedule monitor on public announcement channels
- Crypto / news research — archive posts with views and reaction totals
- Content pipelines / RAG — structured post text + source URLs for search indexes
- Competitor tracking — profile subscriber counts plus new posts only
- MCP / agents — call the Actor from an AI assistant without writing a Telethon client
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/telegram-channel-scraper').call({mode: 'posts',channels: ['telegram'],maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/telegram-channel-scraper").call(run_input={"mode": "posts", "channels": ["telegram"], "maxItems": 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("type"), item.get("channelUsername"), item.get("views"), item.get("text"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~telegram-channel-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"posts","channels":["telegram"],"maxItems":20}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/telegram-channel-scraper.
Example prompts:
- "Run Telegram Channel Scraper posts for telegram max 20 and return text, views, and reactions"
- "Search the telegram channel for posts about polls in the last 7 days"
- "Chain Telegram Channel Scraper then Bluesky Scraper for cross-network brand listening"
Suite next step
For public social search and incremental author feeds, use Bluesky Scraper.
FAQ
Do I need a phone number, bot token, or API id?
No. The Actor reads the public web preview. Private data is out of scope.
Why are reactions missing on some channels?
The public preview does not always include reaction HTML. The Actor returns them when present and omits a fake MTProto contract.
Do media URLs last forever?
CDN links from the preview are time-limited. Re-run the Actor when you need a fresh URL. Original file download is not part of this Actor.
What happens if a channel disabled preview?
You get one type: error row with error: preview_disabled. Other channels in the same run continue.
Can I scrape group members?
No. Member lists are not on the public preview and are not collected.
Related Actors
| Actor | Role |
|---|---|
| Telegram Channel Scraper ◄── you are here | Public Telegram posts, profiles, search, monitor |
| Bluesky Scraper | Bluesky / AT Protocol public data |
| Product Hunt Scraper | Product launches, reviews, comments |