Telegram Media Downloader: Channel Photos & Videos
Pricing
from $3.04 / 1,000 stored media files
Telegram Media Downloader: Channel Photos & Videos
Download photos, videos, GIFs and albums from a public Telegram channel or a Telegram post link, without login. Save Telegram channel videos to key-value storage, probed with ffprobe and hashed with SHA-256. Bulk download Telegram channel media by API, or run a channel media backup from n8n.
Pricing
from $3.04 / 1,000 stored media files
Rating
0.0
(0)
Developer
Adriana Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Download photos, videos, GIFs, and albums from public Telegram channels or individual post URLs directly into your run's key-value store. Every media file is hashed with SHA-256 while streaming, and videos and GIFs are probed with ffprobe for duration, resolution, frame rate, codec, and audio presence. Logged out, no Telegram account or bot token needed.
Who it's for
- AI & ML researchers compiling high-resolution image and video training sets from public Telegram channels with cryptographically verifiable checksums.
- Media monitors & OSINT analysts archiving media from news, broadcast, and community channels without installing Telegram client apps or managing session tokens.
- Automation workflows (n8n, Make, Zapier) requiring durable, direct MP4 and JPEG storage URLs rather than ephemeral CDN links.
Why this one
- Flexible channel and post input: Accepts usernames (
telegram,durov), full channel URLs (t.me/s/channel,t.me/channel), and single post permalinks (t.me/channel/123). - Complete media support: Downloads channel photos, MP4 videos, animated GIFs, round video notes, and multi-item albums in original post sequence.
- Direct streaming with SHA-256: Media files are piped directly to storage while calculating SHA-256 hashes on the fly to conserve memory.
- Deep ffprobe inspection: Automatically extracts container resolution, duration, frame rate, video codec, and audio presence from stored media.
- Smart skipping: Posts with undownloadable documents (
not-in-preview) or oversized media (too-big) emit structured skip records at zero charge. - Fair billing: Pay only for successfully downloaded files and storage volume. Skips, misses, duplicates, and errors are strictly free.
What you get
Each downloaded media file produces one flat dataset row:
| Field | Type | Description |
|---|---|---|
channel | text | Channel username |
postId / postUrl | text / link | Telegram message ID and canonical permalink |
source | text | Whether extracted from a channel feed or single post |
kind | text | File kind: image, video, gif, or round-video |
albumIndex | number | Zero-based index within an album, or null for single-item posts |
kvKey / kvUrl | text / link | Storage key and direct Apify key-value store record URL |
originalMediaUrl | link | Original Telegram CDN media source URL |
bytes | number | Total file size in bytes |
sha256 | text | Hexadecimal SHA-256 checksum |
width / height | number | Pixel dimensions from ffprobe |
duration_s / fps | number | Duration in seconds and frame rate |
codec / hasAudio | text / boolean | Video codec and audio track presence |
text | text | Accompanying post caption or message text |
views | text | View count from the post preview (e.g. 44K, 1.5M) |
postedAt | date | Publication timestamp in ISO 8601 format |
skipped | text | Reason if skipped (not-in-preview, too-big, etc.) |
error | text | Error message if download failed (unbilled) |
Scope and limits
- Public channels only: Private invite-only channels, closed group chats, and direct messages require client login and are not supported.
- Document files in preview: Telegram's web preview does not expose direct download endpoints for arbitrary documents or audio files; these posts are flagged as
skipped: "not-in-preview"at zero charge. - Oversized videos: Videos exceeding Telegram's web preview limit show "Media is too big" and are marked as
skipped: "too-big"with no charge. - Per-file limit: Configure
maxMb(default 100 MB) to prevent unexpectedly massive files from exhausting your storage budget.
Pricing
- Stored media file: $4 per 1,000 files
- Media download bandwidth (MB): $5 per 1,000 files
Plus a $0.005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
Billing is charged per stored file (file event) plus per megabyte stored (megabyte event). Skips, misses, duplicate files, and failed downloads are never billed.
Example runs
- Download latest photos and videos from official Telegram channel
{"channels": ["telegram"], "maxPostsPerChannel": 10, "kinds": "all"}
- Download photos only from Pavel Durov's channel
{"channels": ["durov"], "maxPostsPerChannel": 5, "kinds": "images"}
- Download media from a specific post URL
{"posts": ["https://t.me/telegram/441"], "kinds": "all"}
Use-case variant candidate: new media in a channel (since + delta) | webfinity/telegram-channel-content-media-scraper-v2 (1,007 users @ 468 runs per active user) and tri_angle/telegram-scraper (4,446 users @ 2,172 runs per active user) show heavy scheduled recurring runs for new channel media
How to use
- In the Apify Console. Open the actor page and click Start — the
channelsfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~telegram-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"channels":["telegram"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Input
{"channels": ["telegram"]}
Public channel usernames (e.g. durov or telegram), t.me/
Sample output
| query | found | status | channel | postId | postUrl | source | kind | albumIndex | kvKey | kvUrl | originalMediaUrl | bytes | sha256 | width | height | duration_s | fps | codec | hasAudio | text | views | postedAt | skipped | error | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| telegram | true | OK | <size (bytes)> | <duration (s)> | 1970-01-01T00:00:00.000Z |
Related actors
- Telegram Channel Scraper: Subscriber Count, Bio & Stats: channel subscriber count, bio and stats without downloading any media.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~telegram-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"channels":["telegram"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~telegram-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"channels":["telegram"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~telegram-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"channels":["{{channel or post}}"]}, mapping the row's channel or post into the channels array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Telegram Video Downloader: Channel Photos & Videos" — the agent will find and run this actor.