Telegram Channel Scraper - Public Posts, No Login avatar

Telegram Channel Scraper - Public Posts, No Login

Pricing

$1.50 / 1,000 post returneds

Go to Apify Store
Telegram Channel Scraper - Public Posts, No Login

Telegram Channel Scraper - Public Posts, No Login

Reading a Telegram channel from code normally costs you a bot token or a phone number. Neither is used here. Telegram mirrors every public channel as a plain web page, and this reads it for post text, date, views, author, media, links and subscriber count. $1.50 per 1,000 posts.

Pricing

$1.50 / 1,000 post returneds

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

3 days ago

Last modified

Share

Telegram Channel Scraper

Reading a Telegram channel from code normally costs you a bot token, or a phone number wired into an MTProto client. Neither appears anywhere in this actor.

Telegram publishes a plain web version of every public channel at t.me/s/<name>. This reads that page and works backwards through the history, newest post first, until it hits your maxItems or reaches the channel's very first message.

Input

{
"channels": ["durov", "@telegram", "https://t.me/tginfo"],
"maxItems": 500,
"includeChannelInfoRow": true
}
FieldDefaultNotes
channelsUsername, @handle or t.me link. All three forms work.
maxItems100Posts per channel, up to 10,000.
includeChannelInfoRowtrueEmits one summary row per channel before its posts.
proxyConfigurationoffOptional. The preview is a public endpoint with no anti-bot, so leave it off unless a high-volume run hits IP rate limits.
notionConnector / notionParentIdOptional delivery into Notion via an Apify MCP connector.

What you get per post

{
"ok": true,
"rowType": "post",
"channel": "durov",
"messageId": 505,
"postUrl": "https://t.me/durov/505",
"text": "TON is #1 in annual staking rewards…",
"date": "2026-05-08T17:41:53.000Z",
"views": "3.76M",
"author": "Pavel Durov",
"hasMedia": true,
"mediaType": "photo",
"mediaUrl": "https://cdn4.telesco.pe/file/…",
"link": null,
"channelTitle": "Pavel Durov",
"subscribers": "11.1M"
}

mediaType is one of photo, video, roundvideo, voice, sticker, document, or null. link is the forwarded-from link or the link-preview target, when the post has one.

The channel info row, when enabled, carries channelTitle, channelUsername, channelDescription, subscribers, photosCount, videosCount, linksCount and postsReturned. The channel title and subscriber count are stapled onto every post row as well, so you can skip the info row and still have them.

Limits worth knowing

  • Public channels only. Private channels, groups, and channels with the web preview switched off return a NOT_FOUND row. There's no way around that without an account, and this actor doesn't use one.
  • views is a display string, not a number. Telegram renders 3.76M, so that's what you get. Parse it yourself if you need arithmetic.
  • The preview shows what it shows. text is null on media-only posts, views is null on small or old channels, author is null on the many channels that don't sign posts, and link is null unless the post is a forward or has a link preview.
  • mediaUrl is a thumbnail, not the original file. For photos and video covers it's the preview image Telegram serves; voice and document posts have no URL at all.
  • Paging goes backwards through roughly 16 to 20 posts per request until it reaches maxItems or the channel's first message. A big channel at maxItems: 10000 is a long run.
  • Posts are deduplicated by message id, so you're never billed twice for one message.

Billing

$1.50 per 1,000 posts ($0.0015 each), with no run-start fee. Flat on every plan.

Only post rows are charged. The channel info row is free, so the title, description and subscriber count cost you nothing. Diagnostic rows — BAD_INPUT, NOT_FOUND, NO_RESULTS, network errors — are free too, which means pointing it at a private channel or a dead handle costs nothing at all.

When something comes back empty

  • NOT_FOUND or NO_RESULTS — the channel is private, deleted, a group, or has its web preview disabled. Check that t.me/s/<name> opens in a browser.
  • BAD_INPUT — no usable channel in the list.
  • RATE_LIMITED on a big run — lower maxItems or turn the proxy on to spread requests across addresses.