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.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
channels,maxItems,includeChannelInfoRow(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export 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 for | When | Price |
|---|---|---|
| Post returned | Charged 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
| Field | What it does | Type |
|---|---|---|
channels | Public 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 |
maxItems | Maximum 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 |
includeChannelInfoRow | When 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 |
notionConnector | Optional. 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 |
notionParentId | Optional. 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:
channelchannelDescriptionchannelTitlechannelUsernamedetailslinksCountmessageIdphotosCountpostUrlpostsReturnedrowTypesubscriberstextvideosCountdateviewsmediaTypeExport 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
Search Pinterest by keyword: pin title, description, image URL, destination link, pinner and board. No login. $1.60 per 1,000 pins.
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.
Mastodon Scraper
Scrape public Mastodon posts by hashtag, account or timeline: text, author, followers, engagement, media and tags. $1.50 per 1,000.
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.
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.
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.
Where this tool sits
- Categories
- Social Media Scrapers
- Platforms
- Telegram
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.
| Input | Channel usernames, @handles or t.me links |
| Output | One row per post, plus an optional summary row per channel |
| Ceiling | 10,000 posts per channel |
| Account needed | None, 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
}
| Field | Default | What it is |
|---|---|---|
channels | box starts at telegram, durov | One entry per channel. A bare username, an @handle or a full t.me link all work and resolve to the same thing. |
maxItems | 100 | Posts per channel, up to 10,000. Three channels at 100 is up to 300 post rows. |
includeChannelInfoRow | true | Writes one summary row per channel before its posts. Turn it off for a clean posts-only dataset. |
notionConnector | none | Optional. Write every post into your own Notion as well as the dataset. |
notionParentId | none | Optional. The Notion data source ID to write into. |
proxyConfiguration | off | Optional, 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"
}
| Field | What it is |
|---|---|
views and subscribers | Display text, not numbers. Telegram prints 1.15M and 9.56M, so that is what arrives. Parse them yourself if you need arithmetic. |
date | A real ISO timestamp, straight off the post. This one is exact rather than relative. |
text | null on a media-only post. Links inside the message keep their t.me form. |
mediaType | photo, video, roundvideo, voice, sticker, document or null. |
mediaUrl | The preview thumbnail, not the full-size file. |
link | The outbound link Telegram previewed under the post, when there is one. |
messageId | The 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.
| Row | How to spot it | Charged |
|---|---|---|
| A post | rowType: "post" | yes |
| A channel summary | rowType: "channel" | no |
| A diagnostic | ok: false and an errorCode | no |
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.
| Code | What it means |
|---|---|
BAD_INPUT | No usable channel was given. Use a username, an @handle or a t.me link. |
NOT_FOUND | The channel does not exist, is private, or has no public preview page. |
NO_RESULTS | The channel resolved but has no public messages. |
RATE_LIMITED | Telegram asked for a slower pace. Re-run with a smaller maxItems. |
SERVER_ERROR | Telegram answered with a server error. Usually passes on its own. |
BLOCKED | Telegram would not serve the preview page this time. |
NETWORK | Telegram 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
messageIdas 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
linkready 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.
viewsandsubscribersare strings.1.15Mis what Telegram prints and what you get.mediaUrlis 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
nullrather than an empty string.
🧭 Which messaging or social scraper do you need?
| If you want | Use |
|---|---|
| Posts from public Telegram channels | This one |
| Bluesky posts and profiles | Bluesky Scraper |
| Mastodon posts and accounts | Mastodon Scraper |
| Keyword search on X | Twitter Search Scraper |
| Reddit posts and comments | Reddit 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.