Telegram Channel Scraper avatar

Telegram Channel Scraper

Pricing

from $2.50 / 1,000 post returneds

Go to Apify Store
Telegram Channel Scraper

Telegram Channel Scraper

Scrape posts from public Telegram channels by keyword, with views, reactions and reposts deduplicated. No login, no API key, no Telethon.

Pricing

from $2.50 / 1,000 post returneds

Rating

0.0

(0)

Developer

Stanislav Shupilkin

Stanislav Shupilkin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Scrape any public Telegram channel by keyword — no login, no phone number, no API key. Point this Actor at one or more public channels and it returns their posts as clean structured rows: text, views, reactions, media, post date and a direct t.me link. Add a keyword and it uses Telegram's own built-in per-channel search to return only matching posts, scored by relevance.

It reads Telegram's public web preview (https://t.me/s/<channel>) — the same page Telegram serves to a logged-out browser. No Telegram account, no Telethon, no MTProto, no headless browser. Channel names in, structured posts out.

What you can do with it

  • Keyword monitoring — track a brand, ticker, product or topic across dozens of channels and get back only the posts that mention it, newest and most relevant first.
  • Lead and signal generation — scrape channels where people post offers, jobs or "looking for X", then filter by views and reactions to keep only the posts that got traction.
  • Content and trend research — pull a channel's recent posts with engagement numbers attached and feed them straight into your own analysis, LLM or spreadsheet.
  • OSINT and news monitoring — collect public channel output at scale without an account tied to your phone number, with reposts collapsed so you read each story once.
  • Dataset building — export thousands of posts as JSON, CSV or Excel to train, benchmark or archive.

Output fields

One dataset row is one post. Every row carries:

FieldTypeWhat it is
channelstringChannel username the post came from
message_idintegerTelegram message id
urlstringDirect t.me/<channel>/<message_id> link
datestringWhen it was posted, ISO 8601 UTC
textstringThe post text, HTML stripped and unescaped
viewsintegerView count as a number (1.38M1380000), or null if hidden
reactionsintegerTotal reactions across every emoji, including paid star reactions
reactions_by_emojiobjectPer-emoji breakdown, e.g. {"❤": 231, "🔥": 88, "⭐": 4}
mediaarrayMedia on the post: type (voice, round_video, video, document), url, duration_sec, title
is_repostbooleantrue on a post detected as a near-identical repost of another
duplicate_ofstringOn a repost, the t.me link of the original it copies
relevance_scorenumberKeyword relevance (BM25) when a search query is set, otherwise null

Example output

{
"channel": "telegram",
"message_id": 441,
"url": "https://t.me/telegram/441",
"date": "2026-05-14T16:08:31+00:00",
"text": "Bot-to-Bot Communication is here — bots can now talk to each other.",
"views": 1380000,
"reactions": 342,
"reactions_by_emoji": { "❤": 231, "🔥": 88, "⭐": 23 },
"media": [],
"is_repost": false,
"duplicate_of": null,
"relevance_score": null
}

How to scrape a Telegram channel

  1. Paste one or more public channels into Telegram channels@durov, t.me/durov and https://t.me/durov all point at the same channel and all work.
  2. Optionally type a keyword search to scrape only posts that match it, using Telegram's own in-channel search.
  3. Optionally set a date range, a minimum view count, or a minimum number of reactions under Filters.
  4. Run it. Rows stream into the dataset, then near-identical reposts are collapsed at the end.

Input options

FieldWhat it doesDefault
channelsPublic channels to scrape (@name, t.me/name or a full link)required
queryKeyword — scrape only matching posts via Telegram's per-channel searchnone
since / untilOnly posts inside this date range (YYYY-MM-DD)no limit
minViewsDrop posts below this view count (posts hiding views are dropped)none
minReactionsDrop posts below this total reaction countnone
maxPostsPerChannelHow many recent (or matching) posts to scan per channel100
maxResultsHard cap on unique posts across all channelsno cap
dedupeRepostsCollapse near-identical reposts into one originaltrue

Pricing: pay per event

You are charged for results, not for runtime:

EventPrice
channel-searched — one channel fetched and scanned$0.001
post-returned — one unique post returned$0.0025

Scanning three channels and getting 200 unique posts back costs 3 × $0.001 + 200 × $0.0025 = $0.503. Reposts are free — you pay once for the original, whether the repost is collapsed away or kept as a flagged row. A dead or private channel, a search that returns nothing, and posts removed by your filters are not charged.

If you set a maximum spend on the run, the Actor stops as soon as your limit is reached and finishes successfully with everything collected up to that point — you keep the partial dataset and pay nothing extra.

How it works

  • It reads the public web preview, https://t.me/s/<channel> — the same page a logged-out browser gets. No account, no phone number, no Telegram API, no headless browser. That is why only public channels are reachable.
  • Keyword search is Telegram's own. When you set a query, the Actor uses the channel's built-in ?q= search and pages through its results, so you get exactly what Telegram's own search would show — not a client-side text match on a handful of recent posts.
  • Reposts are detected by text, not by luck. Posts are shingled and compared (MinHash-style Jaccard) so copy-paste reposts across channels cluster together; the earliest post (or the most-viewed on a date tie) is kept as the original and the rest are collapsed or flagged.
  • Relevance is ranked with BM25 over the run's own posts when a query is set — a cheap, CPU-only score, no LLM and no embeddings — so the most on-topic posts come first.
  • Reactions are parsed in full, including custom and paid star reactions, into a total and a per-emoji breakdown.

Limits worth knowing before you run it

  • Public channels only. Private channels, groups and DMs are not reachable without a Telegram account, and this Actor deliberately uses none.
  • A channel that is missing, private or briefly unreachable is skipped, not fatal. The run logs a warning, moves on and finishes successfully with whatever it did collect — and you are not charged for it.
  • Only what the preview shows. The web preview carries text, views, reactions, post date and media links. Comment threads, the full subscriber list and members are not part of it.
  • Media links on Telegram's CDN are signed and expire, so download any media URLs during the same run.
  • Reposts are matched on text. A repost that only shares an image or a forwarded media file, with different or no caption, is not treated as a text duplicate.

Keywords: telegram channel scraper, telegram scraper, telegram keyword search, scrape telegram posts, telegram channel export, telegram no login, telegram data scraper, telegram reactions, telegram views.