Telegram Media Scraper - Photo & Video URLs avatar

Telegram Media Scraper - Photo & Video URLs

Pricing

$0.80 / 1,000 per media file returneds

Go to Apify Store
Telegram Media Scraper - Photo & Video URLs

Telegram Media Scraper - Photo & Video URLs

From $0.80 per 1,000 media files, no start fee. Every photo and video in a public Telegram channel as its own row: direct CDN file URL, thumbnail, video duration in seconds, post id, date and view count. Filter by media type or date, and pay only for files delivered. No login.

Pricing

$0.80 / 1,000 per media file returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Telegram Media Scraper — Photo & Video URLs

Every photo and video in a public Telegram channel as its own row, with a direct CDN file URL, a thumbnail, the video's duration in seconds, and the post it came from.

No login. No phone number. No API key. No Telegram account of any kind.


What one row looks like

{
"channel": "varlamov",
"channelTitle": "Илья Варламов",
"subscribers": 237000,
"postId": 10175,
"postUrl": "https://t.me/varlamov/10175",
"datetime": "2026-09-13T14:20:15+00:00",
"views": 283000,
"mediaIndexInPost": 0,
"mediaType": "video",
"fileUrl": "https://cdn4.telesco.pe/file/69c5229dcb.mp4?token=fapL8sIW…",
"thumbnailUrl": "https://cdn4.telesco.pe/file/Jw5aBpVWHcCgb1ZUt9ygXm5…",
"hasDirectUrl": true,
"durationSeconds": 29,
"durationText": "0:29",
"width": null
}
fieldwhat it is
mediaTypephoto, video, voice or document
fileUrlThe direct CDN URL — download it straight away
hasDirectUrlRead this before a bulk download. See below
thumbnailUrlVideo preview image, always present for a video
durationSecondsVideo length as a number. durationText keeps Telegram's own "0:29"
widthPhoto display width where Telegram publishes it
mediaIndexInPostPosition within its post, so an album keeps its order
postId · postUrl · datetime · viewsThe post the file came from

Not every video has a direct file URL

Some videos are served as a thumbnail plus a player link, with no inline file to download. Measured on a real 3-channel run: 38 of 40 items carried a direct URL, and the other 2 did not.

Those rows are still delivered — they have the thumbnail, duration, post and view count — but hasDirectUrl is false and fileUrl is null. An extractor that pretended otherwise would hand you a download list with silent holes in it. Set onlyWithDirectUrl: true to deliver — and pay for — only rows you can fetch immediately.

One row per file, not per post

A post can carry an album of a dozen photos. Here each one is its own row with its own URL, so the output feeds a downloader directly instead of needing an array unpacked first.

Durations and file URLs are read per post block, never by scanning the whole page and pairing results up by position. On a real channel those counts differ — one page carried 3 video durations but only 2 inline video tags — and a page-wide pairing would silently attach one video's duration to a different video's file.

Input

inputdefaultwhat it does
channels["telegram"]Handles or links — all t.me forms work
mediaTypes["photo","video"]Also voice and document, parsed when a channel has them
maxMediaItems500Cap across all channels on files delivered — and charged
maxMediaPerChannel0Per-channel cap, for an even sample across many channels
maxPagesPerChannel0Telegram serves 20 posts per page; a safety stop for long channels
sinceDate · untilDate—ISO dates. Paging stops once a page is entirely older than sinceDate
onlyWithDirectUrlfalseDeliver only immediately-downloadable files
maxConcurrency5Channels read at once — raising it cuts run time and run cost

Pricing

Pay per event: $0.0008 per media file returned, and no run-start fee.

500 files cost $0.40. The closest media Actor in this category charges $0.01 per post — on a channel carrying roughly one media file per post, that is about $6.25 for the same 500 files.

Files excluded by your type or date filters are never delivered and never charged, and a run that finds nothing costs nothing.

Public channels only

This reads t.me/s/<channel>, the preview Telegram serves to anyone with a browser. If a channel has no public preview — private, or preview disabled by its owner — the run says so and charges nothing for it. Groups, direct messages and member lists are not accessible this way and are not attempted.

A page that isn't HTTP 200 is retried three times on three separate proxy sessions before the channel is reported as unreachable — a transport hiccup is never treated as the end of a channel, because that is how a scraper ships a third of a history and bills you for it as though it were complete.

Source

t.me/s/<channel> is Telegram's own public web preview, served to any visitor. The host publishes no robots.txt at all. Media in a public channel is published by the channel owner to be seen publicly; copyright in it stays with whoever owns it, and what you may do with a downloaded file is your responsibility, not a permission this Actor grants.