Telegram Media Downloader: Channel Photos & Videos avatar

Telegram Media Downloader: Channel Photos & Videos

Pricing

from $3.04 / 1,000 stored media files

Go to Apify Store
Telegram Media Downloader: Channel Photos & Videos

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

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

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:

FieldTypeDescription
channeltextChannel username
postId / postUrltext / linkTelegram message ID and canonical permalink
sourcetextWhether extracted from a channel feed or single post
kindtextFile kind: image, video, gif, or round-video
albumIndexnumberZero-based index within an album, or null for single-item posts
kvKey / kvUrltext / linkStorage key and direct Apify key-value store record URL
originalMediaUrllinkOriginal Telegram CDN media source URL
bytesnumberTotal file size in bytes
sha256textHexadecimal SHA-256 checksum
width / heightnumberPixel dimensions from ffprobe
duration_s / fpsnumberDuration in seconds and frame rate
codec / hasAudiotext / booleanVideo codec and audio track presence
texttextAccompanying post caption or message text
viewstextView count from the post preview (e.g. 44K, 1.5M)
postedAtdatePublication timestamp in ISO 8601 format
skippedtextReason if skipped (not-in-preview, too-big, etc.)
errortextError 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

  1. Download latest photos and videos from official Telegram channel
    {"channels": ["telegram"], "maxPostsPerChannel": 10, "kinds": "all"}
  2. Download photos only from Pavel Durov's channel
    {"channels": ["durov"], "maxPostsPerChannel": 5, "kinds": "images"}
  3. 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

  1. In the Apify Console. Open the actor page and click Start — the channels field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. 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"]}'
  3. 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

queryfoundstatuschannelpostIdpostUrlsourcekindalbumIndexkvKeykvUrloriginalMediaUrlbytessha256widthheightduration_sfpscodechasAudiotextviewspostedAtskippederrorscrapedAt
telegramtrueOK<size (bytes)><duration (s)>1970-01-01T00:00:00.000Z

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.