Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Telegram Channel Scraper icon

Telegram Channel Scraper

Scrape public Telegram channels with no bot token and no API key. Get post text, date, views, author, media links and subscriber count. $1.50 per 1,000.

5 from 1 review on Apify 176 runs on Apify $0.0015 per post ($1.5 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust channels, maxItems, includeChannelInfoRow (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0015 per post = $1.5 per 1,000

You are charged forWhenPrice
Post returnedCharged per channel post returned.$0.0015

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-13, and they are what you are actually charged.

Inputs

FieldWhat it doesType
channelsPublic Telegram channels to scrape. Each entry can be a username (durov), an @handle (@durov), or a full link (https://t.me/durov). Only public channels with a web preview at t.me/s/{name} work, private channels and groups do not.array
maxItemsMaximum number of posts to collect for each channel. The actor pages back through older posts (about 16-20 per page) until it reaches this number or runs out of messages.integer
includeChannelInfoRowWhen on, the actor pushes one summary row per channel (title, subscribers, counts) before its posts. Channel title and subscriber count are also attached to every post row regardless of this setting.boolean
notionConnectorOptional. Write each post as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless.string
notionParentIdOptional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead.string

What you get

A structured dataset — each result includes fields like:

channelchannelDescriptionchannelTitlechannelUsernamedetailslinksCountmessageIdphotosCountpostUrlpostsReturnedrowTypesubscriberstextvideosCountdateviewsmediaType

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

21 ready-to-run use cases

Memecoin Telegram Channels: Pull Contract Calls

Raw post text from Solana call channels, timestamped, so contract addresses and pump alerts arrive as written. Parsing the addresses is your job.

Telegram Whale Alert Channels Exported to JSON

On-chain alert channels as clean JSON rows with post text and time. Feed it to your own bot; the actor does no parsing of the transfers itself.

Crypto Airdrop Telegram Channels in One Merged Feed

Posts from several airdrop and alpha channels merged and timestamped, so a drop that lands at 3am is in the same table as everything else.

Telegram Data Leak Channels: Scan Posts for Your Domain

Message text from public leak and stealer-log channels, so you can grep it for your domains and brand. Only channels with a public web preview.

Telegram Scam Channels: Watch for Your Brand and Domain

Fraud and marketplace channels turned into searchable text, to catch impersonation early. Public channels only - private ones stay out of reach.

Ukraine Telegram Channels: Timestamped Post Archive

War and geopolitics channels with post text, exact times and media thumbnails, so a claim can be pinned to the minute it was published.

Telegram OSINT Tools: Map Forward Networks From Seeds

Each post carries a link field holding the forwarded-from URL when there is one, which is what you follow to map amplifier networks by hand.

Telegram Dataset: Build a Multilingual Text Corpus

Bulk message text from low-resource-language channels, one row per post with its date. Raw text, no cleaning or deduplication done for you.

Telegram News Channels as JSON Docs for a RAG Feed

Curated news channels come back as timestamped JSON ready to chunk and embed. Media-only posts have a null text field - skip those when indexing.

Telegram Channel Analytics: Benchmark Rivals on Views

Recent posts with view counts and dates across several channels, enough to compare posting cadence and reach. Reaction counts are not returned.

Telegram Advertising Cost: Check Real Views First

Recent post views and subscriber count for any public channel, so you can sanity-check a quoted ad rate against reach the channel really gets.

Telegram Betting Tips Channels, Timestamped for Review

Every pick with the minute it was posted, which is what you need to check a tipster's claimed record against the odds at the time.

Telegram Deals Channel Aggregator - Many Into One Feed

Latest deal posts from many channels in one table, with the post text and any outbound link. Codes stay inside the text for you to pull out.

Telegram Channel Statistics: Post Views and Text

Per-post view counts and full text from announcement channels, for reading how a launch landed. It does not return reaction emojis or their counts.

Telegram NFT Channels: Project Announcements in One Feed

Official posts from NFT and Web3 project channels, merged and dated, so mints and governance notes across a portfolio sit in one place.

Download Telegram Channel Media: Get the Preview Links

Every media post gets a type and an image URL. Read this first: that URL is Telegram's preview thumbnail, not the original photo or video file.

Telegram Channels by Country: One Regional News Feed

A country's main news channels merged into one timestamped table. Posts arrive in whatever language they were written in, untranslated.

Telegram Job Channels: Postings and Apply Links

Recent hiring posts from remote-work channels, with whatever link the post carried. Ads are free text, so there are no structured salary fields.

Crypto Signal Telegram Channels, Scraped for Backtests

Several call channels at once, every post with its timestamp and view count, so you can grade a caller against what the market actually did.

Telegram Channel Subscriber Count for a List of Channels

Title and subscriber count per channel, without pulling the posts. The count is the display string Telegram shows, so 11.1M arrives as text.

Telegram Channel History: Page Back Through the Backlog

Hundreds of older posts from one public channel into a single dataset. It walks backwards through the web preview, so no login and no API key.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Pinterest Search Scraper iconSocial Media Scrapers

Pinterest Search Scraper

Search Pinterest by keyword: pin title, description, image URL, destination link, pinner and board. No login. $1.60 per 1,000 pins.

20 use cases

Bluesky Scraper iconSocial Media Scrapers

Bluesky Scraper

Scrape Bluesky posts and profiles by handle, no login. Archive keyword search needs your own app password. $2.00 per 1,000 posts.

5 use cases

Mastodon Scraper iconSocial Media Scrapers

Mastodon Scraper

Scrape public Mastodon posts by hashtag, account or timeline: text, author, followers, engagement, media and tags. $1.50 per 1,000.

2 use cases

Lemmy Scraper iconSocial Media Scrapers

Lemmy Scraper

Scrape public Lemmy posts from any instance: title, body, author, score, votes, comments and permalink. Pick the host. $1.50 per 1,000 posts.

2 use cases

Reddit Text Cleaner — TTS-Ready Narration iconSocial Media Scrapers

Reddit Text Cleaner — TTS-Ready Narration

Turn raw Reddit posts into clean TTS narration. Strips markdown, links and edit stamps, splits into sentences. No AI key. $0.20 per 1,000 texts.

2 use cases

TikTok Comments Scraper iconSocial Media Scrapers

TikTok Comments Scraper

Scrape TikTok comments from any public video: text, likes, reply count, author and timestamp. No login. $0.25 per 1,000 comments.

1 use cases

See all Social Media Scrapers →

Telegram Channel Scraper: posts, views and media flags from any public channel

Name a public Telegram channel and get its posts back as rows: the message text, the exact timestamp, the view count, whether media is attached and which kind, plus a direct link to the post. It pages backwards through the history until it has the number you asked for.

Public channels only, the ones with a web preview page. Private channels, invite links and groups have no public page to read, so none of them work here.

InputChannel usernames, @handles or t.me links
OutputOne row per post, plus an optional summary row per channel
Ceiling10,000 posts per channel
Account neededNone, and no bot token
Price$1.50 per 1,000 posts, flat on every plan

📣 What Telegram Channel Scraper does

It reads a channel's public preview page and walks back through it, roughly 16 to 20 messages at a time, until it hits your limit or reaches the first message ever posted. Posts are deduped by message id inside a run.

Each post row carries the channel title and subscriber count alongside the message, so a multi channel run stays sortable without joining anything. With the summary row switched on you also get one row per channel with the description and the photo, video and link totals.

A channel that is private, deleted or has no public preview reports itself and does not stop the others.

📥 What you give it

{
  "channels": ["telegram", "@durov", "https://t.me/durov"],
  "maxItems": 100,
  "includeChannelInfoRow": true
}
FieldDefaultWhat it is
channelsbox starts at telegram, durovOne entry per channel. A bare username, an @handle or a full t.me link all work and resolve to the same thing.
maxItems100Posts per channel, up to 10,000. Three channels at 100 is up to 300 post rows.
includeChannelInfoRowtrueWrites one summary row per channel before its posts. Turn it off for a clean posts-only dataset.
notionConnectornoneOptional. Write every post into your own Notion as well as the dataset.
notionParentIdnoneOptional. The Notion data source ID to write into.
proxyConfigurationoffOptional, and off by default because a normal run does not need it.

Invite links do not work. A t.me/+abc123 or t.me/joinchat/abc123 link points at a private channel, and those have no public page. Use the public t.me/<name> form.

📤 What you get back

A real post row from a recent run, with the message text cut short and its emoji removed:

{
  "ok": true,
  "rowType": "post",
  "channel": "telegram",
  "messageId": 460,
  "postUrl": "https://t.me/telegram/460",
  "text": "For all the info from today's update and a look back at 13 years of Telegram features ... check out our blog:\nhttps://telegram.org/blog/welcome-messages-buttons-TG-13",
  "date": "2026-08-26T19:12:34.000Z",
  "views": "1.15M",
  "author": "Telegram News",
  "hasMedia": false,
  "mediaType": null,
  "mediaUrl": null,
  "link": "https://telegram.org/blog/welcome-messages-buttons-TG-13",
  "channelTitle": "Telegram News",
  "subscribers": "9.56M"
}
FieldWhat it is
views and subscribersDisplay text, not numbers. Telegram prints 1.15M and 9.56M, so that is what arrives. Parse them yourself if you need arithmetic.
dateA real ISO timestamp, straight off the post. This one is exact rather than relative.
textnull on a media-only post. Links inside the message keep their t.me form.
mediaTypephoto, video, roundvideo, voice, sticker, document or null.
mediaUrlThe preview thumbnail, not the full-size file.
linkThe outbound link Telegram previewed under the post, when there is one.
messageIdThe channel's own message number. Stable, so use it as your dedupe key across runs.

The summary row uses rowType: "channel" and carries channelTitle, channelUsername, channelDescription, subscribers, photosCount, videosCount, linksCount and postsReturned.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A postrowType: "post"yes
A channel summaryrowType: "channel"no
A diagnosticok: false and an errorCodeno

Filter on rowType. The summary row shares the dataset with posts and renders mostly blank in the default table view, which is what a "why is there an empty line" question usually turns out to be.

CodeWhat it means
BAD_INPUTNo usable channel was given. Use a username, an @handle or a t.me link.
NOT_FOUNDThe channel does not exist, is private, or has no public preview page.
NO_RESULTSThe channel resolved but has no public messages.
RATE_LIMITEDTelegram asked for a slower pace. Re-run with a smaller maxItems.
SERVER_ERRORTelegram answered with a server error. Usually passes on its own.
BLOCKEDTelegram would not serve the preview page this time.
NETWORKTelegram could not be reached.

One bad channel never stops the others, and a diagnostic row never fails the run.

▶️ How to run it

1. Open Telegram Channel Scraper and click Try for free. 2. Put one channel per line into Channels. A username like durov is enough. 3. Set Max posts per channel. Start around 20 to see the output shape. 4. Leave Emit a channel info row on if you want the subscriber and media totals, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$1.50 per 1,000 posts, which is $0.0015 each. Flat on every Apify plan, no volume tiers.

Posts are what you pay for. Channel summary rows and diagnostic rows are free, duplicates within a run are dropped before they reach you, and a channel that turns out to be private or empty costs you nothing.

💡 What people use it for

  • Archiving a channel's history once, then topping it up weekly with messageId as the dedupe key.
  • Watching announcement channels for a product or a token and pulling the text into an alert.
  • Measuring which posts in a channel actually travelled, using the view counts next to the dates.
  • Collecting the outbound links a channel shares, which sit in link ready to follow.

🚧 What it does not do

  • Public channels only. No private channels, no invite links, no groups, no direct messages.
  • No reactions and no comments. The preview page does not publish them, so there is nothing to

read.

  • views and subscribers are strings. 1.15M is what Telegram prints and what you get.
  • mediaUrl is a thumbnail. Full-size photos, videos and documents are not downloaded.
  • No forwarding chain. You get the post as the channel shows it, not where it was forwarded from.
  • No search. You name channels, not keywords. Filter the rows afterwards.
  • A very old channel takes many pages. Pulling thousands of posts means many requests, so give a

large run enough time.

  • Media-only posts have no text, which shows as null rather than an empty string.

🧭 Which messaging or social scraper do you need?

If you wantUse
Posts from public Telegram channelsThis one
Bluesky posts and profilesBluesky Scraper
Mastodon posts and accountsMastodon Scraper
Keyword search on XTwitter Search Scraper
Reddit posts and commentsReddit Scraper

❓ Questions people ask

Do I need a bot token or an API key? No. Nothing to register and nothing to log in to.

Can I read a private channel I am a member of? No. This reads the public preview page, and a private channel has none.

Why are views a string like 1.15M? Because that is exactly what Telegram publishes on the page. Rounding it there is their decision, not something the actor can undo.

How far back can it go? To the first message, if you raise maxItems enough. It stops early when the channel runs out.

Can I schedule it? Yes. A daily run with a small maxItems keeps a channel current, and messageId makes deduping straightforward.

Is scraping Telegram channels legal? These are public channels with public web pages. Posts can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the exact channel entry you used. The errorCode on the diagnostic row usually names the problem on its own.