Telegram Channel Scraper – Posts, Search & Monitoring avatar

Telegram Channel Scraper – Posts, Search & Monitoring

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Telegram Channel Scraper – Posts, Search & Monitoring

Telegram Channel Scraper – Posts, Search & Monitoring

Scrape public Telegram channels via the open t.me/s/ web preview — posts, in-channel keyword search, channel info, and an incremental monitor mode that returns only new messages each run. No login, no bot token.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Bobby

Bobby

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Pull posts from any public Telegram channel — text, views, dates, forwards, links, and media — as clean CSV/JSON. Then keep it fresh: monitor mode returns only the messages posted since your last run, so a scheduled task becomes a live feed instead of a re-scrape.

No login, no bot token, no phone number. Reads Telegram's public t.me/s/<channel> web preview.

What you can do

ModeWhat it doesFields it uses
Channel postsMessages from one or more public channels, newest-first.channels, maxItems
SearchIn-channel keyword search across each channel.channels, searchQueries, maxItems
Channel infoTitle, subscribers, description, post/photo/video counts.channels
Monitor (incremental)Only messages posted since the last run, per channel. State persists between runs.channels, maxItems, monitorStoreName

Example input

Latest 100 posts from two channels:

{
"mode": "channel",
"channels": ["telegram", "https://t.me/durov"],
"maxItems": 100
}

Track new posts on a schedule (each run returns only what's new):

{
"mode": "monitor",
"channels": ["durov", "telegram"],
"maxItems": 50
}

Watch crypto channels for announcement keywords:

{
"mode": "search",
"channels": ["binance", "coingecko"],
"searchQueries": ["listing", "partnership"],
"maxItems": 50
}

@name, name, t.me/name, and https://t.me/s/name all work (case-insensitive).

Scheduled monitoring

To turn monitor mode into a live feed: in the Apify Console go to Schedules → Create, set an interval (e.g. every 15 minutes), and point it at this Actor with mode: "monitor". Each run stores only the messages posted since the last one. Keep the same monitorStoreName across runs so the watermark persists, and give a different name to each separate monitor task. Pipe the dataset to a webhook/Slack/Sheet via Apify integrations to get alerts.

Output (per message)

{
"type": "message",
"channel": "telegram",
"id": 123,
"url": "https://t.me/telegram/123",
"text": "…",
"date": "2026-06-22T15:01:34+00:00",
"views": 1200000,
"author": null,
"isForwarded": false,
"forwardedFrom": null,
"tags": ["update"],
"tagList": "update",
"mentions": [],
"links": ["https://…"],
"firstLink": "https://…",
"media": [{ "type": "photo", "url": "https://…" }],
"mediaCount": 1,
"linkPreview": { "url": "…", "siteName": "…", "title": "…", "description": "…" }
}

tagList, firstLink, and mediaCount are flat mirrors of the array fields, so CSV/Excel exports are usable without unpacking JSON.

What this does — and doesn't — return

To keep expectations honest:

  • Public channel content: text, date, view count, author signature, forwards, replies, hashtags, mentions, outbound links, media URLs, and link-preview cards. Plus in-channel search, channel info, and incremental monitoring.
  • Public channels only — those visible at t.me/s/<channel>. Private channels, groups, and user accounts are not accessible (the Actor rejects invite links with a clear message).
  • No member lists, DMs, poll voters, or per-user reactions. Those require a logged-in account / bot token, which this Actor deliberately does not use. View counts are included; reaction counts are not exposed by the public preview.
  • ⚠️ History depth depends on the public preview. The Actor pages backward via ?before=, but coverage is whatever Telegram serves to its web preview — not guaranteed to reach a channel's very first post.

Notes

  • Proxy is off by default. The preview pages are public; enable Apify Proxy (or set requestDelayMs to ~300–1000) only for large drains or many channels, to spread the per-IP rate limit.
  • maxTotalItems caps results (and charges) across the whole run, independent of the per-channel maxItems.
  • One bad/private/typo'd channel is logged and skipped — it won't abort the run or lose the other channels' data.
  • How it works / longevity: this reads Telegram's public t.me/s/ HTML preview (no API). That preview has been stable for years, but it is an undocumented endpoint — a Telegram markup change can require a parser update (you'll see a "no posts parsed / markup may have changed" warning), and if Telegram ever added JavaScript bot-protection to it, an HTTP-only scraper like this would need a browser-based rework. No reactions or poll-voter data is exposed by the preview.

Pricing

Pay per result — you're charged once per message (or channel-info record) stored to the dataset. Cap any run with maxTotalItems.