Telegram Channel Scraper avatar

Telegram Channel Scraper

Pricing

$1.00 / 1,000 post scrapeds

Go to Apify Store
Telegram Channel Scraper

Telegram Channel Scraper

Turn any public Telegram channel into clean, structured data. Every post with its full text, photos, videos, views, reactions, forwards and replies — the newest posts, a date range, or the whole archive. No Telegram account and no login. Export to CSV, Excel or JSON.

Pricing

$1.00 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Telegram Channel Scraper — Posts, Views & Reactions

Paste one or more public Telegram channels and get every post as a clean, structured row: the full text, the photos and videos attached to it, how many people saw it, every reaction with its count, whether it was forwarded or was a reply, and exactly when it was published. Collect just the newest posts, a date range, or the entire archive back to a channel's very first post. Nothing to install, no Telegram account, no login — paste, run, download.

What you can do with it

  • Build a full archive of a channel — every public post it has ever published, in one dataset you own.
  • Track competitors and industry channels — see what they post, how often, and which posts actually land.
  • Measure engagement — views, reaction counts and reaction mix per post, ready to average, rank or chart.
  • Feed a monitoring or research pipeline — schedule a daily run and keep a rolling record of what a market is saying.
  • Collect media at scale — photo and video links per post, with photo albums arriving as a single post carrying every image.
  • Filter to what matters — restrict to a date range, or to posts in a channel that mention one keyword.

What you get

One row per post. Abridged real example:

{
"channel": "durov",
"channelTitle": "Pavel Durov",
"channelId": -1006503122,
"subscriberCount": 11400000,
"subscriberCountIsExact": false,
"messageId": 538,
"date": "2026-08-04T15:20:04.000Z",
"text": "Last night, Apple briefly removed Telegram from the App Store because a single user had planted illegal pornographic content in a public group chat. …",
"textLength": 2151,
"isEdited": true,
"authorSignature": "Pavel Durov",
"viewCount": 862000,
"viewCountIsExact": false,
"viewCountPublished": "862K",
"reactionCount": 47860,
"reactionKinds": 4,
"reactions": [
{ "emoji": null, "customEmojiId": null, "isPaid": true, "count": 3750, "countIsExact": false },
{ "emoji": null, "customEmojiId": "5373223594484587136", "isPaid": false, "count": 25900, "countIsExact": false }
],
"isReply": false,
"replyToMessageId": null,
"isForwarded": false,
"mediaType": "text",
"isAlbum": false,
"photoCount": 0,
"videoCount": 0,
"hasUnviewableMedia": false,
"hashtags": [],
"mentions": [],
"isServiceMessage": false,
"matchedKeyword": null,
"scrapedAt": "2026-08-05T09:14:22.000Z"
}

Export as JSON, CSV or Excel, or pull the dataset straight into your own tools.

Input reference

Every setting below appears in the actor's form, labelled exactly as shown.

SettingTypeDefaultWhat it does
Telegram channelslist of stringsThe public channels to collect. A channel link or an @username, one per line. Required.
Posts per channelinteger100How many posts to take from each channel, newest first. Raise it to build a full archive; the actor keeps going back until a channel runs out of published history. Maximum 20,000.
Keyword filterstringemptyOnly keep posts in each channel that mention this word. Leave it empty for the full feed.
Posted afterdateemptyOnly keep posts published on or after this date.
Posted beforedateemptyOnly keep posts published on or before this date.
Newest posts firstbooleantrueWrite the newest post first. Turn it off for oldest-first.
Include channel noticesbooleanfalseInclude Telegram's own channel notices, such as "Channel created" or a pinned-post announcement.
Fast mode for deep archivesbooleantrueCollect large archives faster. Switched off automatically when a keyword or a "posted after" date is set.
Browse fromselectUnited StatesThe country the run browses from. A few channels are restricted in some countries, so this can change what a channel returns.
Parallel workersinteger16How much work runs at the same time. Maximum 32.

Output fields

FieldTypeDescription
channelstringThe channel's @username, without the @.
channelTitlestringThe channel's display name.
channelIdnumberTelegram's own numeric id for the channel. One channel can answer on more than one name, so this is the reliable way to group rows.
channelUrlstringPublic link to the channel.
subscriberCountnumber | nullSubscribers at the moment of collection.
subscriberCountIsExactboolean | nullfalse when Telegram published the figure in rounded form.
messageIdnumberThe post's own number inside the channel.
urlstringPublic link to the post.
datestring | nullWhen the post was published, in UTC.
textstring | nullThe post body, in full. null when the post is media-only.
textHtmlstring | nullThe same body with its original formatting and links.
textLengthnumber | nullCharacters in text.
isEditedbooleanWhether the post was edited after publishing.
authorSignaturestring | nullThe signature on the post, when the channel signs its posts.
viewCountnumber | nullViews at the moment of collection. null when the channel does not publish views.
viewCountIsExactboolean | nullfalse when the figure was published in rounded form.
viewCountPublishedstring | nullExactly what Telegram displayed, e.g. "862K".
reactionCountnumber | nullAll reactions added together. null when the channel publishes no reactions at all.
reactionKindsnumber | nullHow many different reactions the post received.
reactionsarray | nullOne entry per reaction: emoji, customEmojiId, isPaid, count, countIsExact.
isReplybooleanWhether the post replies to another post.
replyToMessageIdnumber | nullThe post it replies to.
replyToobject | nullThe quoted post: its number, link, author and text.
isForwardedbooleanWhether the post was forwarded from somewhere else.
forwardedFromobject | nullWhere it came from: name, link and @username.
linkPreviewobject | nullThe preview card attached to the post: link, site, title, description and image.
mediaTypestringtext, photo, video, album, round_video, sticker, audio, voice or file.
isAlbumbooleanWhether the post is a photo album.
photos / photoCountarray / numberDirect image links, one per image in the post.
videos / videoCountarray / numberVideo links with poster frame and duration in seconds.
documentsarrayFiles, audio and voice notes: title, performer or size, and kind.
stickersarraySticker image links.
hasUnviewableMediabooleantrue when the post carries media Telegram does not make viewable outside its own apps.
outboundLinksarrayEvery link the author put in the post.
hashtagsarrayHashtags used in the post, without the #.
mentionsarray@usernames mentioned in the post.
isServiceMessagebooleantrue for Telegram's own channel notices.
matchedKeywordstring | nullThe keyword that selected this post, when a keyword was used.
scrapedAtstringWhen this row was collected, in UTC.

Pricing

You pay per result, not for time.

What you pay forPrice
Every post collected$1.00 per 1,000 posts

Nothing else is billed. A channel that turns out to be unavailable produces no rows, so it costs nothing.

Worked example. You want the latest 500 posts from 10 competitor channels. That is up to 5,000 posts, so up to $5.00 for the run. Set Posts per channel to 50 for a daily check on the same 10 channels and each run is at most 500 posts — $0.50 a day.

Set a maximum spend on the run and the actor stops cleanly when it is reached, keeping everything already collected.

Limits & what this actor cannot do

  • Only public Telegram channels are covered. Private channels, invite-only groups and one-to-one chats are not publicly viewable, and are reported as unavailable rather than returned empty.
  • Groups are not channels. A public group's messages are not published for reading, so a group handle is reported as unavailable rather than returned empty.
  • View, reaction and subscriber counts are a snapshot at the moment of collection and keep changing afterwards.
  • Telegram publishes very large counts in rounded form, so the biggest numbers are approximate. Every row says which of its numbers were rounded, so you never have to guess.
  • Absent is not zero. Some channels publish no view counts and some publish no reactions at all. Those fields arrive as null, which means "Telegram never published this" — not "this post got none".
  • The keyword filter returns at most 22 posts per channel per keyword, and that is a limit of Telegram's own keyword matching, not of this actor. It matches whole words, so a partial word finds nothing. For broad keyword work, run the keyword across many channels instead of digging deep into one. A keyword identical to the channel's own name cannot be used as a filter there, and that channel is reported as skipped rather than returned unfiltered.
  • Files, audio and voice notes arrive with their title and kind but no downloadable link — Telegram does not publish one. Photos and videos do have direct links.
  • Some posts carry media Telegram does not make viewable outside its own apps. Those posts are returned with their text and marked with hasUnviewableMedia.
  • Some channels are restricted in some countries, so the same channel can return a different result depending on the country the run browses from.
  • Speed depends on the size of the job and on Telegram's own response times; no fixed throughput is promised.
  • Telegram's terms govern automated access. You are responsible for using the data lawfully, in line with the source site's terms, and for handling any personal data in line with applicable privacy law.

FAQ

Do I need a Telegram account? No. Nothing is connected to any account of yours.

Does it need my phone number or a login? No. There is nothing to sign in to and nothing to authorise. You paste channel names and press start.

Can I schedule it? Yes. Schedule it on Apify to run hourly, daily or weekly, and each run writes a fresh dataset you can export or send onward.

Is the data complete? It is complete for what Telegram publishes publicly. For an ordinary public channel the actor goes all the way back to the first post. It cannot return anything from private channels, invite-only groups or deleted posts, and posts that were edited show their current text rather than the original.

How do I get the whole history of a channel? Raise Posts per channel. The actor stops on its own when a channel runs out of published history and tells you so in the log, so setting a number larger than the channel is safe.

Why do some posts have null views or reactions? Because that channel does not publish them. A null is deliberate: it means the number was never made public, which is a different fact from a genuine zero.

Can I get the comments underneath a post? Not with this actor — it returns the channel's own posts. Comment threads are a separate job.

What happens if I paste a channel that does not exist? It is reported as unavailable, with the reason, and the rest of the run continues. You are never charged for it.