Telegram Media Scraper - Photo & Video URLs
Pricing
$0.80 / 1,000 per media file returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
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}
| field | what it is |
|---|---|
mediaType | photo, video, voice or document |
fileUrl | The direct CDN URL — download it straight away |
hasDirectUrl | Read this before a bulk download. See below |
thumbnailUrl | Video preview image, always present for a video |
durationSeconds | Video length as a number. durationText keeps Telegram's own "0:29" |
width | Photo display width where Telegram publishes it |
mediaIndexInPost | Position within its post, so an album keeps its order |
postId · postUrl · datetime · views | The 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
| input | default | what 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 |
maxMediaItems | 500 | Cap across all channels on files delivered — and charged |
maxMediaPerChannel | 0 | Per-channel cap, for an even sample across many channels |
maxPagesPerChannel | 0 | Telegram 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 |
onlyWithDirectUrl | false | Deliver only immediately-downloadable files |
maxConcurrency | 5 | Channels 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.