Telegram Channel Scraper – Public Web Preview · Apify
Telegram Channel Scraper — Messages, Views & Media avatar

Telegram Channel Scraper — Messages, Views & Media

Pricing

Pay per usage

Go to Apify Store
Telegram Channel Scraper — Messages, Views & Media

Telegram Channel Scraper — Messages, Views & Media

Scrape public Telegram channel messages from the web preview. Get fields: text, views, timestamps, media type, links, forwards, reply IDs, and parse-quality fields. Run with public channel inputs; no account or API key required.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

3

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Telegram Channel Scraper

Scrape public Telegram channel messages from the web preview at https://t.me/s/{channel} and extract text, views, timestamps, media type, links, forwards, reply-to IDs, and parse-quality fields. No Telegram account, bot token, API key, login, or required proxy is needed.

  • Collect one row per message with structured fields and a direct message URL.
  • Track brands and competitors using public channel history.
  • Aggregate crypto and news signals with timestamps and view counts.
  • Feed channel records into LLM pipelines.
  • Run with optional Apify Proxy configuration; residential proxy is recommended for best reliability.

What you get

Fields are null when the source does not provide a value. links and warnings are empty arrays when none are found; boolean fields are false when the condition is absent.

FieldTypeDescription
channelstringNormalized public channel username
message_idintegerTelegram message ID; null when it cannot be read
textstringMessage text content; null when the source has no text
viewsstringView count such as 2.3M or 42K; null when unavailable
datetimeISO 8601 stringMessage timestamp; null when no timestamp is found
has_mediabooleanWhether the message contains media; false when no supported media is found
media_typestringphoto, video, document, sticker, audio, or poll; null when no media is detected
linksarray of stringsHTTP/HTTPS links found in message text; empty when none are found
is_forwardedbooleanWhether the message was forwarded; false when it was not forwarded
forward_fromstringForwarded-from channel or user name; null when no source name is found
reply_tointegerMessage ID being replied to; null when no reply ID is found
message_urlstringFull https://t.me/{channel}/{id} URL; null when the message ID cannot be read
parse_confidencenumberParse quality score from 0.0 to 1.0
warningsarray of stringsParse quality warnings; empty when no warnings are generated
scraped_atISO 8601 stringUTC timestamp when the record was scraped

The scraper uses the public Telegram web preview and structural message attributes such as data-post. It paginates backwards through the public history and emits one dataset record for each message pushed.

Sample output

The shortened sample omits is_forwarded, forward_from, reply_to, and scraped_at.

{
"channel": "telegram",
"message_id": 460,
"text": "For all the info from today's update and a look back at 13 years of Telegram features — check out our blog: https://telegram.org/blog/welcome-messages-buttons-TG-13 August Features 1 • 2 • 3 • 4 • 5 • More",
"views": "2.3M",
"datetime": "2026-08-26T19:12:34+00:00",
"has_media": false,
"media_type": null,
"links": [
"https://telegram.org/blog/welcome-messages-buttons-TG-13",
"https://t.me/telegram/455",
"https://t.me/telegram/456",
"https://t.me/telegram/457",
"https://t.me/telegram/458",
"https://t.me/telegram/459"
],
"message_url": "https://t.me/telegram/460",
"parse_confidence": 1,
"warnings": []
}

Pricing

Today's model: FREE. Since 2026-11-10 the Actor charges no pay-per-event fees on any plan (the Free plan included). Apify platform usage (compute, storage, Apify Proxy traffic, residential by default) still counts against your plan; the Apify Free plan includes $5 per month of platform usage credit. Check the Pricing tab on the Actor page before a large run.

Earlier pricing, pay-per-event until 2026-11-10 (shown for reference only):

  • Actor Start (apify-actor-start): $0.00005 per event on the Free plan (one event per GB of memory, minimum one).
  • Dataset item (apify-default-dataset-item): $0.003 per message on the Free plan.
  • Free plan, 1,000 messages: 1,000 x $0.003 = $3.00 in dataset-item events.
  • Free plan, 10,000 messages: 10,000 x $0.003 = $30.00.

The message-scraped event has no price, so it was never charged.

How to use

  1. Enter one or more public Telegram channel usernames, @ handles, or full t.me URLs in channels.
  2. Set maxMessages to control the number of messages to collect per channel, or leave it at the default of 100.
  3. Set optional beforeId to collect only messages with IDs lower than this value.
  4. Run the Actor. It reads https://t.me/s/{channel} and paginates backwards until the requested number of messages is collected or the available public history is exhausted.
  5. Inspect parse_confidence and warnings in each record.
  6. Repeat the run through Apify Schedules; daily is a suitable starting point for brand, competitor, crypto, or news monitoring.

Export the dataset as JSON or CSV, or read it through the Apify dataset API.

{
"channels": [
"telegram",
"@durov",
"https://t.me/cointelegraph"
],
"maxMessages": 200
}

Input parameters

ParameterWhat it doesDefault
channelsRequired list of public Telegram usernames, @ handles, or t.me URLs to scrapeRequired; no default
maxMessagesMaximum number of messages to collect per channel; maximum 50000100
beforeIdCollect only messages with IDs lower than this valueNo default; starts with recent messages when empty
proxyConfigurationConfigures Apify Proxy. The default uses the Apify Proxy with the RESIDENTIAL group{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}
disableUsageStatsSet to true to turn off the run summary described in Usage statistics.false

Limits and edge cases

ConditionWhat you seeWhat to do
The channel is private, is a private invite link, or does not have a public web previewNo message rows; the run status explains that only public channels with a public preview can be readUse a public channel username or public t.me URL
The channel does not exist or is not a valid public channel inputNo message rows and a status explaining that the channel could not be matched or reachedCheck the username, handle, or URL
The channel is public but has no public postsNo message rows and a status indicating that no public posts were foundCheck the channel or try another public channel
beforeId is older than the available messagesNo message rows for that channel because there are no messages older than the supplied IDLower beforeId or leave it empty
A channel fetch raises a transport or access problem during paginationThat channel produces no pushed rows from that scrape; processing can continue for other channels in the inputCheck the channel status and run again later when appropriate
The source contains comments or replies inside a postThe output contains the channel message and may include a reply_to message ID, but not the comment or reply thread contentsUse the message-level fields provided
A message contains mediahas_media and media_type identify the media typeUse the returned type; media files and media URLs are not downloaded or returned
The run reaches the end of the public preview historyPagination stops when no further message blocks are availableUse another run with a suitable beforeId if you need to continue from a known checkpoint

Only public channel messages available through Telegram’s web preview are collected. Private channels, groups, direct messages, real-time streaming, comments, and media downloads are not supported.

FAQ

How much does it cost to scrape a Telegram channel?

The Actor is free to run since 2026-11-10, so no event fees apply on any plan. Apify platform usage still applies to your plan. See Pricing for the earlier pay-per-event prices.

Why did the run return an empty dataset?

The channel may be private, invalid, unavailable, empty, restricted, or missing a public web preview. An empty result can also occur when beforeId is lower than the available message IDs. Check the run status, use a public channel username or URL, and remove or adjust beforeId.

Why are some fields missing or flagged?

A field is null when the source does not provide a value (see What you get). Review any record whose warnings array is not empty.

Does this Actor download Telegram media?

No. It detects photo, video, document, sticker, audio, and poll media types and returns the type flag, but it does not download media files or return media URLs.

The Actor reads the publicly accessible Telegram web preview at t.me/s/*, the same public source available in a browser. Whether a particular use is legal or allowed depends on the source terms and the applicable law for your use case; assess those requirements before using the collected data.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields