Telegram Channel Scraper: Posts, Views & Reactions avatar

Telegram Channel Scraper: Posts, Views & Reactions

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Telegram Channel Scraper: Posts, Views & Reactions

Telegram Channel Scraper: Posts, Views & Reactions

Scrape posts and metadata from any public Telegram channel: text, publish date, view count, media, reactions, forwards, links and subscriber stats. Export to JSON, CSV or Excel. No login or API key.

Pricing

from $6.80 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

8 days ago

Last modified

Share

Telegram Channel Scraper

Telegram Channel Scraper

Here is one real result, with every field a post record returns:

{
"thumbnail": "https://cdn1.telesco.pe/file/vMsNFMSndJw-Nb8U-JA0gVKYgiJMQBNhllnhk0vB0Ht ... [URL trimmed for brevity; the real field returns the full signed URL]",
"type": "post",
"channel": "telegram",
"channelTitle": "Telegram News",
"id": 453,
"url": "https://t.me/telegram/453",
"text": "350 Million GIFs. The GIF panel now contains over 350 million GIFs in 36 languages. Your Telegram GIF searche ... [text trimmed for brevity; the real field returns the full post text]",
"author": "Telegram News",
"datetime": "2026-07-19T17:58:17+00:00",
"views": 1180000,
"viewsLabel": "1.18M",
"mediaType": "video",
"mediaUrl": "https://cdn1.telesco.pe/file/e07208aa9b.mp4?token=AxV7Ou6RhKX2RJn6mBOqqZ ... [signed URL trimmed for brevity]",
"mediaThumbnail": "https://cdn1.telesco.pe/file/vMsNFMSndJw-Nb8U-JA0gVKYgiJMQBNhllnhk0vB0Ht ... [URL trimmed for brevity]",
"mediaUrls": ["https://cdn1.telesco.pe/file/e07208aa9b.mp4?token=... [trimmed]"],
"videoDuration": "0:09",
"documentTitle": null,
"forwardedFrom": null,
"forwardedFromUrl": null,
"replyToUrl": null,
"isForwarded": false,
"linkPreview": null,
"links": ["https://t.me/telegram/450", "https://t.me/telegram/451", "... [trimmed]"],
"hashtags": null,
"reactions": null,
"totalReactions": null,
"observedAt": "2026-08-10T14:33:08.021Z",
"error": null
}

The thumbnail, text, media URLs and links values above are trimmed to keep this example readable; the actor returns the full text, signed CDN URLs and complete arrays. All other values are the exact record from a live run.

The most complete Telegram channel scraper available. It returns a channel-metadata record (subscribers, verified status, media counts) plus one record per post with the text, author, views, media (photo, video, document with direct CDN URLs), link previews, reactions and forwarding details, and it lets you scrape many public channels in one run with an optional keyword filter.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor reads one or more public Telegram channels from their web preview (t.me/s/<channel>), and writes to the run's dataset one channel-metadata record per channel (subscribers, description, verified status, photo/video/link counts) followed by one record per post, newest first. Each post record carries the text, author, timestamp, view count, any attached media with direct CDN URLs, link previews, outbound links, hashtags, reactions and forwarding details. An optional searchQuery keeps only posts that match the given text. Missing source values are returned as null rather than invented.

Only public channels are accessible. Private and invite-only channels cannot be read.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the channel metadata plus the 10 most recent posts of the official Telegram channel.

{
"channels": ["telegram"],
"maxPosts": 10
}

Enter channels as a username (durov), an @username, or a full t.me link. Leave searchQuery empty to collect the most recent posts.

Input reference

FieldTypeRequiredDefaultDescription
channelsstring[]yes["telegram"]Public channels to scrape. Each as a username (for example durov), an @username, or a full t.me link. Private and invite-only channels cannot be accessed.
maxPostsintegerno10Maximum posts to collect from each channel, newest first. Range 1 to 1000000.
searchQuerystringno(empty)Only return posts matching this text within the given channels. Empty collects the most recent posts.

Output reference

The dataset contains two record kinds, distinguished by type: one channel record per channel, then post records. Types: string, integer, boolean, string[], object, or null when the source value is absent.

FieldTypeApplies toDescription
typestringbothchannel for the metadata record, post for a post.
channelstringbothChannel username as scraped.
channelTitlestringbothDisplay title of the channel.
idintegerbothPost ID for posts; null on the channel record.
urlstringbothCanonical t.me URL of the channel or post.
thumbnailstringbothChannel avatar or post thumbnail URL, or null.
descriptionstringchannelChannel description text.
subscribersintegerchannelSubscriber count as a number.
subscribersLabelstringchannelSubscriber count as shown, for example 9.86M.
photosCountintegerchannelNumber of photos in the channel.
videosCountintegerchannelNumber of videos in the channel.
linksCountintegerchannelNumber of links in the channel.
isVerifiedbooleanchanneltrue when the channel is verified.
textstringpostFull post text.
authorstringpostPost author or signature.
datetimestringpostPost timestamp (ISO 8601).
viewsintegerpostView count as a number.
viewsLabelstringpostView count as shown, for example 1.18M.
mediaTypestringpostAttached media type: photo, video, document, or null.
mediaUrlstringpostDirect CDN URL of the primary media, or null.
mediaThumbnailstringpostMedia thumbnail URL, or null.
mediaUrlsstring[]postAll media URLs on the post, or null.
videoDurationstringpostVideo length as M:SS, or null.
documentTitlestringpostAttached document title, or null.
forwardedFromstringpostOriginal channel name when the post is forwarded, or null.
forwardedFromUrlstringpostOriginal channel URL when forwarded, or null.
replyToUrlstringpostURL of the post this one replies to, or null.
isForwardedbooleanposttrue when the post is a forward.
linkPreviewobjectpostLink preview card (url, siteName, title, description, thumbnail), or null.
linksstring[]postOutbound links found in the post, or null.
hashtagsstring[]postHashtags in the post, or null.
reactionsobjectpostEmoji reactions with counts, or null.
totalReactionsintegerpostTotal reaction count, or null.
observedAtstringbothISO 8601 timestamp of when the record was collected.
errorstringbothnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

The channel-metadata record from the same live run (input {"channels": ["telegram"], "maxPosts": 10}):

{
"thumbnail": "https://cdn1.telesco.pe/file/duy0s_bkW1-f9R8cqXfI7Cy__6SJviapxuBmERrT9RPKef5KA ... [URL trimmed for brevity]",
"type": "channel",
"channel": "telegram",
"channelTitle": "Telegram News",
"id": null,
"url": "https://t.me/telegram",
"description": "The official Telegram on Telegram. Much recursion. Very Telegram. Wow.",
"subscribers": 9860000,
"subscribersLabel": "9.86M",
"photosCount": 14,
"videosCount": 225,
"linksCount": 372,
"isVerified": true,
"observedAt": "2026-08-10T14:33:07.927Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~telegram-channel-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"channels":["telegram"],"maxPosts":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~telegram-channel-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"channels":["durov","telegram"],"searchQuery":"update","maxPosts":100}'

Apify CLI:

apify call scrapers_lat/telegram-channel-scraper \
--input '{"channels":["https://t.me/telegram"],"maxPosts":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per record returned (result event), including the channel-metadata record. See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 posts per channel per run. Upgrade for higher maxPosts.

FAQ and troubleshooting

A channel returned no posts. Why? The channel is private or invite-only (not accessible), the username was wrong, or your searchQuery filtered everything out. Only public channels with a t.me/s/ preview can be read.

Can I read private or invite-only channels? No. This actor reads only public channels. Private and invite-only channels cannot be accessed.

Why is reactions or mediaUrl null? Not every post has reactions or attached media. When there is none, those fields are null rather than invented.

Are the media URLs downloadable? The CDN URLs are signed by Telegram and time-limited. Download them promptly; they can expire.

Can I collect posts from several channels at once? Yes. Add each channel to channels. maxPosts applies per channel.

Is this an official Telegram tool? No. This actor is independent and has no affiliation with Telegram. It reads only data that is publicly available on t.me.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Telegram. Accesses only publicly available channel data on t.me.