Telegram Channel Scraper: Posts, Views, Media and Links avatar

Telegram Channel Scraper: Posts, Views, Media and Links

Pricing

$5.00 / 1,000 posts

Go to Apify Store
Telegram Channel Scraper: Posts, Views, Media and Links

Telegram Channel Scraper: Posts, Views, Media and Links

Scrape posts from public Telegram channels by username or t.me link. Get text, date, views, media URLs, links, forwards and replies, filtered to an exact date range. No login needed.

Pricing

$5.00 / 1,000 posts

Rating

0.0

(0)

Developer

Om Ray

Om Ray

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

This actor saves posts from public Telegram channels. It reads the same public web preview anyone can open at https://t.me/s/<channel>, so it needs no Telegram account, no login and no phone number.

You give it a list of channels. For each one it saves posts newest first, going back page by page until it reaches your start date or your post limit.

Pricing

You pay $0.005 per saved post, which is $5 per 1,000 posts. Rows that explain a problem with a channel are free. Posts outside your date range are skipped and never charged. A few posts can't be shown on the web preview at all (Telegram says "Please open Telegram to view this post"). Those are saved with mediaType: "unsupported" so you can see they exist, and they are free too.

If you set a spending limit on the run, the actor stops cleanly when it gets there and keeps everything saved so far.

Input

FieldWhat it does
channelsUsernames or links. durov, @durov, t.me/durov and https://t.me/s/durov all work. A link to one post also works, and the actor reads the whole channel it belongs to.
fromDateOldest post to include. An ISO date such as 2026-10-01 or 2026-10-01T09:00:00Z, or a relative value such as 7 days, 2 weeks or 3 months.
toDateNewest post to include. Same formats.
maxPostsPerChannelStop a channel after this many paid posts. Default 100. Raise it for long date ranges.
maxItemsStop the whole run after this many paid posts across all channels. Default 1000.
maxRunSecondsStop after this many seconds and keep what was saved. Default 600.

All dates are in UTC. A date with no time means the start of that day for fromDate and the end of that day for toDate, so fromDate: 2024-12-01 with toDate: 2024-12-31 gives you all of December.

When you set toDate far in the past, the actor first jumps to posts near that date, so it skips loading every newer page. On a channel with about 80,000 posts, fetching one month from two years ago took 53 page loads and about 20 seconds.

Example input:

{
"channels": ["telegram", "durov"],
"maxPostsPerChannel": 20
}

Output

Each row is one post. This one is from a local run with the input above:

{
"rowType": "post",
"channel": "telegram",
"postId": 455,
"url": "https://t.me/telegram/455",
"date": "2026-08-26T19:11:05.000Z",
"text": "Welcome Messages. Group and channel owners can now add messages that appear when a new member joins.\n\nThese messages are only visible to the person who joins the chat.\n\nAugust Features\n1 • 2 • 3 • 4 • 5 • More",
"views": 1140000,
"author": null,
"edited": true,
"forwarded": false,
"forwardedFrom": null,
"forwardedFromUrl": null,
"replyToPostId": null,
"replyToUrl": null,
"mediaType": "video",
"mediaUrls": [
"https://cdn1.telesco.pe/file/566183f75b.mp4?token=ijr48MUlF07QPXZiVYe-xsg8_Al6VvVIgAn2MSLbB2G_BXedsizRE-DWgKPLrgwN4T8jFhr7Ypv5T9xvecWBxCfCCOtBpiKVazaY_uPVkyw4w_tvRM6RnsdfzAzDABNICborqC8f6aW2kwEC00pQwsWKggnohP-J_SKdcNht2PUV-uyxVp0CXUWR2o3KiKOcv-_gOaNbLZQ3cowr8kReR3OB33s5C2UUzeBxIGArE_ByMdYPFpRbVrvMr-Emc3kPdVLrq3KgwXnQnsGtL0iXWRinxs5VhnbbDJkRrJj3Sf0fjoo9p1Pd5OdFhUPv0cl7iVa5XrpfKQSCWsPZJEbT_Q"
],
"media": [
{
"type": "video",
"url": "https://cdn1.telesco.pe/file/566183f75b.mp4?token=ijr48MUlF07QPXZiVYe-xsg8_Al6VvVIgAn2MSLbB2G_BXedsizRE-DWgKPLrgwN4T8jFhr7Ypv5T9xvecWBxCfCCOtBpiKVazaY_uPVkyw4w_tvRM6RnsdfzAzDABNICborqC8f6aW2kwEC00pQwsWKggnohP-J_SKdcNht2PUV-uyxVp0CXUWR2o3KiKOcv-_gOaNbLZQ3cowr8kReR3OB33s5C2UUzeBxIGArE_ByMdYPFpRbVrvMr-Emc3kPdVLrq3KgwXnQnsGtL0iXWRinxs5VhnbbDJkRrJj3Sf0fjoo9p1Pd5OdFhUPv0cl7iVa5XrpfKQSCWsPZJEbT_Q",
"thumbnailUrl": "https://cdn1.telesco.pe/file/YF8hrdQzWmsJi_cTgdEYGcQytFcrgv114c4v4O4MrSZyGykMoT7FJDSzbSEfUXsU1A_3yQqJrKPDBAfsFqbt-flCd0xpxWDCzQVecpyCV45xzypNpD1jlqdEVwwfKfKLFtNMc-6e-K7L9-XUtBxtEPcfPj0gn8MQuAU_7G6vpjt-mW2Zc256pC5tdgdKJ_ASFw6TMNwKeB0LRk6PpC1kCiHbyMunOk5pyph2MwEIeLyCRFGRbScBFOdm01wbyHSNPx1iGvffQfSfOaHVJbVCFklniwBemXNRqI3mUrdkSySKwHUJxxrwcft4Bheb4EyExm25Iu000nNAybyoYSyBDw",
"name": null,
"size": null,
"duration": "0:10"
}
],
"links": [
"https://t.me/telegram/456",
"https://t.me/telegram/457",
"https://t.me/telegram/458",
"https://t.me/telegram/459",
"https://t.me/telegram/460"
],
"status": "ok",
"statusReason": null,
"input": "telegram"
}

Every row has the same fields:

FieldMeaning
rowTypepost for a post, status for a free row explaining a problem with a channel.
channelChannel username as Telegram shows it.
postIdPost number inside the channel.
urlLink to the post. On status rows, the channel link.
datePublish time, ISO 8601 in UTC.
textPost text with line breaks kept. Empty when the post has no text.
viewsView count as a whole number. Telegram rounds big counts, so 1.2K becomes 1200.
authorAuthor signature, if the channel signs posts.
editedtrue when Telegram marks the post as edited.
forwardedtrue when the post was forwarded.
forwardedFromOriginal channel or person, when Telegram shows the name. Telegram hides it for some sources.
forwardedFromUrlLink to the original post, when it came from a public channel.
replyToPostId, replyToUrlThe post this one replies to.
mediaTypephoto, video, round_video, document, audio, voice, sticker, location, poll, mixed for albums with more than one type, unsupported for posts the preview can't show, or null for text only.
mediaUrlsOne link per attachment: the photo, video file, sticker or voice note. When Telegram shows only a preview image (a video too big to embed, a document thumbnail, a map), it is that image or map link.
mediaOne object per attachment with type, url, thumbnailUrl, name (file name or poll question), size and duration.
linksLinks in the post text, plus the link preview URL.
status, statusReasonok and null for posts. On status rows, a short code and a plain explanation.
inputThe channel entry as you typed it.

When a channel gives no posts

The actor never ends with a silent empty dataset. If a channel can't be read, you get one free status row for it and the run moves on to the next channel.

statusWhat happened
not-foundNo public channel has this username.
preview-disabledThe channel exists, but its owner turned off the web preview.
preview-unavailableTelegram lists a preview but redirected us away. This usually means the channel is blocked in the country the request came from.
group, bot, userThe username belongs to a group, a bot or a person. Only channels are read.
invalid-inputThe entry is not a username or a public link, for example a private invite link.
no-posts, no-posts-in-rangeThe channel has no posts, or none in your date range. The reason says how far back it checked.
partial, errorTelegram kept failing after several retries. partial means some posts were saved first.
duplicateThe same channel appears twice in your list. Its posts are saved once.
skippedThe run hit your spending limit, maxItems or maxRunSeconds before reading this channel.

Run summary

The OUTPUT record in the key-value store has one entry per channel with its title, subscriber count, description, photo, the counters Telegram shows (photos, videos, files, links), how many posts were saved, the newest and oldest saved dates, how many pages were loaded and why it stopped. The channel details are fetched once per channel and are free.

Limits

  • Only public channels with a username work. Private channels, invite links, groups and direct chats are out of scope. The actor does not collect member lists, phone numbers or anything that needs a login.
  • The web preview shows what a logged-out visitor sees. Comments, reaction lists and the full names of some forward sources are not on it.
  • Telegram's CDN links for photos and videos contain a token that expires. Download media soon after the run if you need the files.
  • View counts come rounded from Telegram, so they are accurate to about three significant figures.
  • Date filtering assumes post numbers rise with time, which is how Telegram numbers posts.
  • Pages load one at a time to stay clear of Telegram's rate limits. Each page holds about 20 posts, and a run loads a few pages per second.

If something breaks or looks wrong, open an issue on the Issues tab and it gets fixed fast, and if this actor helped you, an honest review on the Store helps other people find it.