Telegram Channel Scraper avatar

Telegram Channel Scraper

Pricing

from $1.00 / 1,000 rows

Go to Apify Store
Telegram Channel Scraper

Telegram Channel Scraper

Scrapes posts from public Telegram channels with views, reactions, media and links, searches inside channels or finds channels by keyword, and adds exact subscriber counts.

Pricing

from $1.00 / 1,000 rows

Rating

0.0

(0)

Developer

Mina

Mina

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

What does Telegram Channel Scraper do?

Telegram Channel Scraper collects posts from public Telegram channels: the full text, date, views, reactions, paid Stars, photos, videos, files, polls, link previews, forwards and replies, plus each channel's exact subscriber count, title, description and photo. Paste channel links, single post links or a search inside a channel. You can also search all of Telegram by keyword, and every post you get back really contains your keyword.

Try it with the prefilled channel: open the Actor, click Start, and the first 20 posts arrive in a few seconds. Because it runs on the Apify platform, you also get API access, scheduled runs, integrations (Google Sheets, Make, Zapier, webhooks), run monitoring and automatic retries through Apify Proxy when Telegram is slow to answer.

Why scrape Telegram channels?

  • Media and news monitoring: follow news, politics or industry channels and get every new post as structured data.
  • Crypto and market research: track what signal, project and exchange channels post, and how many views and reactions each post earns.
  • Brand and keyword tracking: find every public channel that mentions your brand, product or hashtag, with posts that really contain it.
  • Audience research: compare channels by exact subscriber count, views per post and reactions.
  • Archiving and AI datasets: save a channel's history with text, links and media URLs for analysis or model training.

How to scrape Telegram channels

  1. Find a public channel in Telegram and copy its link, such as https://t.me/durov. A plain @durov works too.
  2. Paste it into Telegram links, one link per line.
  3. Optionally, paste a link to a single post (https://t.me/durov/548) or a search inside a channel. To get a search link, open the channel at https://t.me/s/durov, type in its search box, and copy the address bar.
  4. Set Max posts per link and, if you only want recent posts, Only posts newer than (a date or an age such as 7 days).
  5. Click Start, then download the results when the run finishes.

To find channels you don't know yet, type words into Find channels by keyword instead. The Actor looks up public channels about each keyword and saves only their posts that contain every word of it.

Input

Everything is set on the Input tab. In JSON, the input looks like this:

{
"startUrls": [
"https://t.me/s/durov",
"https://t.me/telegram/441",
"https://t.me/s/tginfo?q=bot"
],
"maxPostsPerChannel": 100,
"newerThan": "30 days",
"includeChannelInfo": true,
"keywords": ["bitcoin etf"],
"maxChannelsPerKeyword": 5
}
FieldWhat it does
startUrlsChannel links (t.me/name, t.me/s/name, @name), single post links (t.me/name/123) or in-channel search links (t.me/s/name?q=word).
maxPostsPerChannelStops after this many posts per link, newest first. Default: 100. Set 0 to save only channel profiles.
newerThanSkips posts older than a date (2026-09-01) or an age (7 days, 12 hours, 2 weeks).
includeChannelInfoAdds one profile row per channel with its exact subscriber count. Default: on.
keywordsOptional. Finds public channels about each keyword and saves their posts that contain it.
maxChannelsPerKeywordHow many channels to search for each keyword, from 1 to 10. Default: 5.
proxyConfigurationOptional; leave it empty. Telegram answers the Actor directly, and if it is ever refused, the Actor retries through Apify datacenter and then residential proxies by itself.

Output

Each post and each channel profile becomes one row. Here is a real post, with its long media links shortened:

{
"type": "post",
"channel": "durov",
"channelTitle": "Pavel Durov",
"postId": 537,
"url": "https://t.me/durov/537",
"date": "2026-08-03T07:19:56+00:00",
"isEdited": false,
"text": "🧠 The 2026 International Olympiad in Artificial Intelligence starts today.\n\nAs a token of support for those who will reinvent our civilization, we'll issue 🏆 240 exclusive Intelligence Cups to the winners. …",
"links": [],
"views": 3610000,
"reactions": [
{ "emoji": null, "customEmojiId": "5399847211989246390", "count": 39400 },
{ "emoji": null, "customEmojiId": "5936157098181135162", "count": 11200 }
],
"paidStars": 15500,
"media": [
{ "type": "photo", "url": "https://cdn4.telesco.pe/file/OITBwTjjdBxK…jpg" }
],
"linkPreview": null,
"poll": null,
"forwardedFrom": null,
"replyTo": null,
"author": "Pavel Durov",
"matchedKeyword": null,
"sourceUrl": "https://t.me/s/durov",
"scrapedAt": "2026-10-01T18:11:30.442713+00:00"
}

And the channel's profile row:

{
"type": "channel",
"channel": "durov",
"title": "Pavel Durov",
"description": "Founder of Telegram.",
"subscribers": 10557247,
"isVerified": true,
"photoUrl": "https://cdn4.telesco.pe/file/Wy6pjko8IMI…jpg",
"url": "https://t.me/durov",
"scrapedAt": "2026-10-01T18:11:29.958551+00:00"
}

The Output tab has two views, Posts and Channel profiles. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Data fields

Post rows (type is post):

FieldDescription
channelThe channel's username.
channelTitleThe channel's display name.
postIdThe post's number in the channel.
urlLink to the post.
dateWhen it was posted (UTC, ISO 8601).
isEditedtrue when the post was edited after posting.
textThe full post text, with line breaks and emoji.
linksWeb addresses linked from the text.
viewsView count. Telegram rounds counts above 1,000 (for example 1.87M becomes 1870000).
reactionsEach reaction with its emoji (or customEmojiId for custom emoji) and count.
paidStarsTelegram Stars paid as reactions.
mediaPhotos, videos, animations, files, audio and stickers: type, url, plus thumbnailUrl and durationSec for videos, title and size for files, and title and performer for audio.
linkPreviewThe preview card of a shared link: url, siteName, title, description, imageUrl.
pollA poll's question, type and options with their vote percent.
forwardedFromThe original channel or author of a forwarded post: name and url.
replyToLink to the post this one replies to.
authorThe author signature, on channels that sign posts.
matchedKeywordThe keyword or in-channel search the post matched.
sourceUrlThe link the post was found through.
scrapedAtWhen the row was saved.

Channel rows (type is channel): channel, title, description, subscribers (exact), isVerified, photoUrl, url and scrapedAt.

How much does it cost to scrape Telegram?

Telegram Channel Scraper uses pay-per-event pricing, so you pay only for results:

  • $1.00 per 1,000 rows: each post or channel profile saved is one row.
  • $0.01 per keyword search that returns posts. Keyword searches that find nothing are free.
  • A tiny fee per run start.

For example, the latest 100 posts of 10 channels plus their profiles (1,010 rows) cost about $1.01. Apify's free plan includes $5 of monthly credit, enough for roughly 5,000 posts. Links that return nothing are never saved as rows, so you are not charged for them. If you set a maximum cost for a run, the Actor stops as soon as it is reached.

Tips for scraping Telegram

  • Use newerThan for monitoring. Schedule a daily run with 1 day to get only new posts from your channels.
  • Profiles only: set maxPostsPerChannel to 0 to check the subscriber counts of a long list of channels quickly and cheaply.
  • Search inside a channel when you need older posts on one topic: Telegram's search finds matches anywhere in the channel's history. It returns up to about 20 of the newest matches per search, so use several searches for more.
  • Hashtags work in in-channel searches: https://t.me/s/durov?q=%23Telegram.
  • Keyword search is slower than pasting links, because each keyword first has to find channels. Paste channel links whenever you know them.
  • Each post is saved only once per run, even when several links lead to it.

FAQ, disclaimers and support

Which channels can be scraped? Public channels that show their posts on the web at t.me/s/<name>. Most public channels do. Private channels, invite links, groups, bots and personal accounts cannot be read. A channel that hides its web preview still gets its profile row, but its posts can only be read in the Telegram app.

Why are view counts rounded? Telegram itself only shows rounded counts above 1,000, such as 1.87M. The Actor turns them into numbers.

What happens to links that return nothing? They are not saved as rows, so you are not charged for them. Each one is listed with its reason in the FAILED_INPUTS record of the run's key-value store, and the run's status message gives the counts. A run fails only when every input failed because Telegram could not be reached.

Are media links permanent? Photo and video links point to Telegram's content servers and may stop working after a while. Download the files soon after the run if you need to keep them.

Is it legal to scrape Telegram? This Actor collects only posts and profiles that channels publish openly on the web. It does not read private chats, groups or comments. Posts can still contain personal data, so you are responsible for making sure your use complies with Telegram's Terms of Service and with data protection laws such as the GDPR. If in doubt, ask a lawyer.

Found a problem or need a custom solution? Open an issue on the Issues tab and we will look into it. Custom scrapers and data feeds are available on request.