Telegram Channel Scraper: Whole Message History avatar

Telegram Channel Scraper: Whole Message History

Pricing

from $0.35 / 1,000 messages

Go to Apify Store
Telegram Channel Scraper: Whole Message History

Telegram Channel Scraper: Whole Message History

A public Telegram channel's messages back to its first post, with views and every reaction. $0.50 per 1,000 messages. Media links, polls and the subscriber count.

Pricing

from $0.35 / 1,000 messages

Rating

0.0

(0)

Developer

Luzi

Luzi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Get a public Telegram channel's messages, newest first, all the way back to its first post: the text, the date, views, every reaction (paid stars included), photos, videos, files, polls, link previews, forwards and replies, with the channel's title, description and subscriber count on every row. Paste usernames or t.me links. No Telegram account needed.

Tested daily. Latest checks: two channels read whole, 424 and 426 messages back to their oldest posts; 10,000 messages from five channels in 7 minutes.

What does this Actor do?

You give it public Telegram channels. For each one it reads the channel's messages from the newest back, about 20 at a time, and saves one row per message until it reaches your limit, your date, or the channel's first message.

Each message comes with:

  • its link, id, date and type (text, photo, video, album, document, audio, voice, sticker, round video, location, poll, or service when you ask for service messages), and whether it was edited
  • its text, as plain text and as HTML, with the links, hashtags and @mentions in it
  • its view count, each reaction with its count, the reactions' total and the paid stars
  • its photos and videos (links, thumbnails and lengths), files and audio (name and size or performer), its poll (question and each answer's share) and its link preview
  • where it was forwarded from, and the message it replies to
  • the author's signature, when the channel signs its posts
  • the channel's id, username, title, description (and the links in it), picture, verified badge and its counts of subscribers, photos, videos, files and links

Why use it?

  • The whole history, not just the latest. This Actor keeps going to a channel's very first message, or stops at your limit or your date.
  • Start anywhere. Paste a link to one post and the read starts there and goes back.
  • Every reaction, counted. Each emoji's count, plus the paid stars, not just a total.
  • The channel on every row. Subscribers and the channel's media counts sit beside each message, so one export compares channels.
  • Monitor a channel. Run it daily with Only messages newer than set to 1 day.
  • Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.

How to use it

  1. Paste one or more channels into Channels: durov, @durov, https://t.me/durov and https://t.me/s/durov all work. A post link such as https://t.me/durov/300 starts at that post.
  2. Optionally, set Only messages newer than and Max messages per channel.
  3. Click Start. When the run ends, open the Output tab to view the messages or download them.

Only public channels can be read. Invite links (t.me/+…, t.me/joinchat/…), private channels, groups, users and bots are not supported. Put one channel on each line of the list.

Run it with no input to see a sample: up to 500 messages each from two public channels, @durov and @telegram, charged as usual.

Input

FieldWhat it doesDefault
Channels (channels)The channels to read: usernames, channel links or post links. Required.—
Only messages newer than (onlyMessagesNewerThan)A date (YYYY-MM-DD, UTC) or a period (7 days, 2 weeks, 3 months, 1 year). Empty = the whole historyempty
Max messages per channel (maxMessagesPerChannel)Stop reading a channel after this many messages, from 1 to 50,000100
Include service messages (includeServiceMessages)Also save service messages such as "Channel created"off
Only new messages (onlyNewItems)Return only the messages an earlier run did not; see New items only belowoff

Example input:

{
"channels": ["https://t.me/durov", "telegram"],
"onlyMessagesNewerThan": "30 days",
"maxMessagesPerChannel": 1000
}

New items only

Turn on Only new messages (onlyNewItems) for a scheduled run, or a re-run of the same task. Each run then returns only the messages it has not returned before: it reads each channel back to a day before the last run that read it, and skips the messages an earlier run saved. Skipped messages are neither saved nor charged; each new message is charged as usual.

  • Runs with other settings, or from another task, keep their own list, so two schedules on one channel never skip each other's messages.
  • If a channel stops at Max messages per channel, the messages past that point are not returned later. Set the maximum above what one channel gets between runs.
  • The list lives in your Apify account, in a key-value store named telegram-channels-scraper-monitor. Delete it to start afresh.

Output

One row per message. An example, shortened:

{
"url": "https://t.me/example_channel/1234",
"message_id": 1234,
"type": "album",
"date": "2026-10-11T14:52:40+00:00",
"edited": false,
"text": "Two photos and a video from today.",
"views": 1040000,
"views_text": "1.04M",
"reactions": [
{ "emoji": null, "emoji_id": null, "paid": true, "count": 5720, "count_text": "5.72K" },
{ "emoji": "👍", "emoji_id": null, "paid": false, "count": 12300, "count_text": "12.3K" }
],
"reactions_total": 12300,
"paid_stars": 5720,
"photo_urls": ["https://cdn4.telesco.pe/file/…jpg", "https://cdn4.telesco.pe/file/…jpg"],
"video_urls": ["https://cdn4.telesco.pe/file/…mp4"],
"is_forwarded": false,
"channel_id": "1000000001",
"channel_username": "example_channel",
"channel_title": "Example Channel",
"channel_subscribers": 10300000,
"channel_photos": 102,
"channel_videos": 47,
"channel_links": 200
}
FieldWhat it is
urlThe message's link
message_idThe message's number in its channel
typetext, photo, video, album, document, audio, voice, sticker, round_video, location, poll or service
dateWhen it was posted (UTC)
editedtrue when it was edited
textIts text, or its caption; null when it has none
text_htmlThe same text with its formatting and links, as HTML
author_signatureThe author's name, when the channel signs its posts
viewsIts views, as a number (Telegram rounds large counts: 1.04M reads as 1040000)
views_textThe views as Telegram shows them
reactionsEach reaction: emoji (or emoji_id for a custom emoji), paid for paid stars, count and count_text
reactions_totalThe reactions added up, paid stars left out
paid_starsThe paid stars it received
linksThe links in its text
hashtags, mentionsThe #hashtags and @usernames in its text
mediaEach photo, video, file, audio, voice note, sticker or location: type, url, thumbnail_url, duration, title, details (a file's size or a song's performer) and link
photo_urls, video_urlsThe photo and video links on their own
pollIts poll: question, type and each answer's text and percent
link_previewThe preview of the link it shares: url, site_name, title, description and image_url
is_forwardedtrue when it was forwarded from elsewhere
forwarded_from_name, forwarded_from_urlWhere it was forwarded from, when Telegram shows it
reply_to_message_id, reply_to_urlThe message it replies to
reply_to_author, reply_to_textThat message's author and the start of its text
channel_idTelegram's id for the channel
channel_username, channel_urlThe channel's username and link
channel_title, channel_descriptionThe channel's name and description
channel_description_linksThe links in the channel's description
channel_verifiedtrue when the channel has the verified badge
channel_photo_urlThe channel's picture
channel_subscribersIts subscribers when it was read (rounded as Telegram shows it); channel_subscribers_text is the shown value
channel_photos, channel_videos, channel_files, channel_linksThe channel's counts of photos, videos, files and links; null when it shows none
source_linkThe channel this message was read from

Not included: comments under posts, the files themselves (only links to photos and videos, and the names of files), and the link of a video too large to play outside the Telegram app (it keeps its thumbnail and length).

How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

  • $0.50 per 1,000 messages ($0.0005 a message). Each message is charged once per run.
  • No start fee, and nothing per channel.

So 1,000 messages from each of 3 channels cost $1.50. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every message saved so far.

How long does a run take?

About 275 messages a minute from each channel, with up to five channels read at once: 2,000 messages from each of five channels took 7 minutes.

Good to know

  • Check your input first. A link that is not a Telegram channel or post link stops the run before anything is read, and the message names it.
  • One channel that cannot be read does not stop the run. A name that is a user, a bot, a group, a private channel or no one at all ends with a message, the others carry on, and the run's status lists the channels that could not be read. The run fails only when no channel could be read.
  • Counts are rounded. Telegram shows large views, reactions and subscriber counts rounded (10.3M); the number fields hold that rounded value and the _text fields what Telegram shows.
  • Counts move. Views and reactions are the numbers at the moment the message was read.
  • Media links expire. Photo and video links point at Telegram's servers and stop working after a while: download what you need soon after the run.
  • An album is one row. Several photos or videos sent together are one message with several entries in media.
  • Remove repeats by url. A daily run reads recent messages again, unless Only new messages is on.

More Actors from us

Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a longer run, start it with POST /v2/acts/…/runs and read its dataset):

POST https://api.apify.com/v2/acts/luzivanlt~telegram-channels-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>

With the sample input as its JSON body:

{
"channels": ["https://t.me/durov", "telegram"],
"maxMessagesPerChannel": 500,
"includeServiceMessages": false
}

Its inputs, in the order of the input form:

InputWhat it takesDefault
channels (Channels)Public Telegram channels to read: a username (durov or @durov), a channel link (https://t.me/durov, t.me/s/durov or telegram.me/durov) or a link to one of its posts (https://t.me/durov/300), which starts the read at that post and goes back from there.—
onlyMessagesNewerThan (Only messages newer than)Keep only messages from this date on: a date (YYYY-MM-DD, UTC) or a period, e.g. "7 days", "2 weeks", "3 months" or "1 year".—
maxMessagesPerChannel (Max messages per channel)Stop reading a channel after this many messages, newest first, from 1 to 50,000.100
includeServiceMessages (Include service messages)Also save the channel's service messages, such as "Channel created" or a new channel photo.false
onlyNewItems (Only new messages)Turn this on for a scheduled run, or a re-run of the same task: each run then returns only the messages it has not returned before, reading each channel back to a day before the last run that read it.—

Apify's MCP server, https://mcp.apify.com, lists it as luzivanlt/telegram-channels-scraper. To give an AI agent this Actor as a tool, add the server to the agent's MCP config:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=luzivanlt/telegram-channels-scraper"
}
}
}

The client signs in with OAuth, or add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.

Charged per message delivered; the sample input above costs at most $0.50.

FAQ

Do I need a Telegram account? No. The Actor reads what anyone can see in a public channel.

Can it read private channels or groups? No, only public channels.

Can it read the comments under a post? Not yet: this Actor reads the channel's own messages.

Can I search Telegram by keyword? Not yet: this Actor reads the channels you give it.