Telegram Channel Scraper — Posts, Views & Reactions avatar

Telegram Channel Scraper — Posts, Views & Reactions

Pricing

from $1.50 / 1,000 post scrapeds

Go to Apify Store
Telegram Channel Scraper — Posts, Views & Reactions

Telegram Channel Scraper — Posts, Views & Reactions

Scrape public Telegram channels with pure HTTP — no login, bot token or proxy needed. Posts, views, reactions, media, hashtags, forwards and channel info. Minimal JSON output for AI agents, relative date filters, profile-only mode and historical backfill.

Pricing

from $1.50 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

XiaoZhi DataTools

XiaoZhi DataTools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Telegram Channel Scraper — Posts, Views, Reactions & Media (No Login)

Scrape public Telegram channels without a bot token, phone login, or API credentials. The Actor reads Telegram's public web preview (t.me/s/<channel>) over plain HTTP — no headless browser and no residential proxies needed.

Each run returns structured posts (text, views, reactions, media URLs, forwards, hashtags, link previews) plus optional per-channel profile info. A built-in monitor mode returns only posts that are new since the previous run, making it ideal for scheduled channel tracking.

Why this Actor

  • Zero credentials — no bot token, no phone number, no api_id/api_hash.
  • Pure HTTP, no browser — fast and cheap; the Telegram preview pages have very light rate limits, so datacenter IPs and even direct connections work.
  • Richer than the preview — reactions with counts, paid star reactions, photo/video/document URLs, link previews, hashtags, mentions, forwarded-from attribution, channel counters (subscribers / photos / videos / links).
  • Monitor mode — newPostsOnly keeps a persistent cursor per channel, so scheduled runs deliver only fresh posts (great with Apify Schedules + Webhooks).
  • Filters — date range, minimum views, keyword match, media-only.

Input

FieldTypeDefaultDescription
channelsstring[]["durov","telegram"]Channel usernames, @handles, or URLs (t.me/durov, https://t.me/s/durov). One per line.
postUrlsstring[]—Direct post URLs, e.g. https://t.me/durov/528, to fetch specific posts.
maxPostsPerChannelinteger50Max newest posts per channel (automatic ?before= pagination). Up to 5000.
startDate / endDatestring—YYYY-MM-DD bounds on post publish date. startDate also accepts relative expressions: 7 days, 2 weeks, 1 month, 24 hours, today, yesterday.
beforePostIdinteger—Start pagination from posts older than this post ID instead of the newest posts. Useful for historical backfill in chunks.
profileOnlybooleanfalseOnly return channel profile info (title, description, subscribers, counters) and skip post history. Fast and cheap for channel discovery.
outputFormatfull/minimalfullminimal: compact post records (id, url, date, text, views, media, link preview URL) — cheaper and easier to feed into AI agents.
minViewsinteger0Drop posts with fewer views.
textContainsstring—Case-insensitive keyword filter; separate alternatives with | (e.g. bitcoin|ETF).
mediaOnlybooleanfalseOnly posts with photos, videos or documents.
includeReactionsbooleantrueInclude reactions, reaction counts and paid stars.
includeChannelInfobooleantrueEmit a channel_info record per channel (title, description, subscribers, avatar, counters).
newPostsOnlybooleanfalseMonitor mode: only posts newer than the last run (cursor stored in a named key-value store).
requestConcurrencyinteger5Channels scraped in parallel.
proxyConfigurationobjectoffOptional Apify Proxy. Not needed for typical runs.

Output

Dataset items have recordType: "post" (or "channel_info"). Example post:

{
"recordType": "post",
"channelUsername": "durov",
"postId": 528,
"postUrl": "https://t.me/durov/528",
"publishedAt": "2026-06-15T18:58:13+00:00",
"postText": "The UK government wants to ban social media…",
"views": 18900000,
"repliesCount": 12400,
"reactions": [{"emojiId": "5265077361648368841", "count": 132000}],
"reactionsCount": 218766,
"paidStars": 14300,
"mediaType": "video",
"mediaUrls": ["https://cdn1.telesco.pe/file/….mp4?token=…"],
"linkPreview": {"url": "https://telegram.org/safety", "siteName": "Telegram",
"title": "Telegram Safety Overview", "description": "…"},
"links": ["https://telegram.org/safety"],
"hashtags": ["news"],
"mentions": ["durov"],
"forwardedFrom": {"url": "https://t.me/other", "name": "Other channel"},
"isPinned": false
}

Notes:

  • views/subscribers are parsed from Telegram's compact notation (18.9M → 18900000).
  • Media URLs are served by Telegram's CDN with time-limited tokens — download promptly if you need the files.
  • Reaction emojiIds are Telegram's internal custom-emoji identifiers.
  • Private channels, deleted channels, and channels without a public preview are skipped with a warning (no public t.me/s/ page exists for them).

Use cases

  • News & OSINT monitoring — track announcements across channels on a schedule.
  • Market research — engagement (views/reactions) per post, hashtag trends.
  • Content pipelines — feed channel posts into AI summarizers, newsletters, or RAG datasets (pair with newPostsOnly + Webhooks, or
    outputFormat: minimal
    for compact AI-ready records).
  • Lead discovery — mentions, links and forwarded-from attribution.
  • Channel discovery — profileOnly returns just the profile metadata (subscribers, counters) for many channels at minimal cost.

Cost

The Actor itself performs only lightweight HTTP requests. If you publish it with pay-per-event pricing, a natural model is pay per post scraped (e.g. via the apify-default-dataset-item charge event), with channel-info records free or cheap. No third-party API costs are incurred.

Limitations

  • Only public channels with a web preview (t.me/s/<name> resolves) can be scraped; private/invite-only channels are not accessible without login.
  • The preview shows the most recent history; very old posts may require many paginated requests.
  • Comments/replies content is not part of the preview page (only counts when shown).

Changelog

  • 0.5 — maxPostsPerChannel now truly keeps the newest posts (previously the oldest posts on the first page were kept when the limit was hit mid-page); endDate given as YYYY-MM-DD now covers the whole day (previously posts published later that day were wrongly excluded); postUrls for older posts now resolve via the single-post embed page (previously only posts on the latest preview page could be fetched); includeReactions: false now strips reactionsCount/paidStars too in postUrls mode, matching channel mode.
  • 0.4 — Previous release.