Telegram Media Downloader avatar

Telegram Media Downloader

Pricing

Pay per event

Go to Apify Store
Telegram Media Downloader

Telegram Media Downloader

Extract public Telegram channel/post media URLs, metadata, timestamps, views, and optional KVS downloads without login.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

8 days ago

Last modified

Categories

Share

Extract media URLs, message metadata, and optional downloadable files from public Telegram channels and public Telegram posts.

Telegram Media Downloader is an Apify Actor for researchers, analysts, journalists, OSINT teams, and developers who need repeatable public Telegram media collection without maintaining custom parsers.

It works with public t.me/s/<channel> archive pages and public t.me/<channel>/<messageId> post URLs. It does not log in, bypass private channels, or attempt to access Telegram content that is not publicly visible on the web.

What does Telegram Media Downloader do?

This Actor reads public Telegram web HTML and saves one dataset item per message.

It extracts:

  • Channel handle and title
  • Message ID and canonical Telegram URL
  • Message text
  • Publish timestamp
  • View count when Telegram exposes it
  • Media type list
  • Source media URLs
  • Detailed media objects
  • Optional key-value-store download references
  • Skip reasons for unsupported or private pages

Who is it for?

OSINT and trust-and-safety analysts

Archive public Telegram evidence with message URLs, timestamps, text, and attached media references.

Journalists and researchers

Collect public channel posts and media for reproducible research datasets.

Brand monitoring teams

Track public impersonation, scam, or announcement channels and export the media evidence.

Developers and data engineers

Use Apify datasets, API clients, webhooks, and integrations to pipe Telegram message media into downstream workflows.

Why use this Telegram media extractor?

  • HTTP-first and lightweight: no browser needed for public Telegram HTML.
  • Public-only by design: no account credentials, cookies, or login bypass.
  • Export-friendly: every message becomes a stable dataset row.
  • Media-aware: photos, videos, documents, audio, and unknown CDN files are grouped per message.
  • Optional downloads: persist media during the same run when you need Apify storage copies.
  • Automation-ready: works with Apify API, schedules, webhooks, and integrations.

Supported Telegram URLs

Use public Telegram links such as:

https://t.me/s/telegram
https://t.me/telegram/429

The Actor accepts multiple start URLs in one run.

Unsupported Telegram URLs

The Actor intentionally skips:

  • Private channels
  • Invite-only group links
  • Login-only pages
  • Deleted posts
  • Pages blocked by Telegram access controls
  • Telegram account session/cookie workflows

This keeps the Actor compliant with public-web extraction and avoids access-control bypass.

Input options

FieldTypeDescription
startUrlsarrayPublic Telegram archive or post URLs.
maxMessagesintegerMaximum message rows to save.
downloadFilesbooleanSave media files to key-value store when enabled.
mediaTypesarrayKeep selected media types.
minDatestringOptional ISO earliest publish date.
maxDatestringOptional ISO latest publish date.

Example input

{
"startUrls": [
{ "url": "https://t.me/s/telegram" }
],
"maxMessages": 100,
"downloadFiles": false,
"mediaTypes": ["photo", "video", "document", "audio"]
}

Output data

Each dataset item represents one public Telegram message.

FieldDescription
channelHandleTelegram public channel handle.
channelTitleDisplay name when available.
messageIdNumeric Telegram message ID.
messageUrlCanonical message URL.
sourceUrlInput URL that produced the row.
textMessage text.
publishedAtMessage publish timestamp.
viewsPublic view count when present.
mediaTypesUnique media types found on the message.
mediaCountNumber of media objects saved in the row.
mediaUrlsDirect source/CDN URLs detected in the public HTML.
mediaDetailed media objects with type, URL, extension, thumbnail, and KVS references.
downloadedWhether at least one file was downloaded to KVS.
skippedReasonWhy a source produced no public message.
scrapedAtExtraction timestamp.

Example output item

{
"channelHandle": "telegram",
"channelTitle": "Telegram News",
"messageId": 429,
"messageUrl": "https://t.me/telegram/429",
"text": "Member Tags...",
"publishedAt": "2026-03-02T17:33:34+00:00",
"views": 1570000,
"mediaTypes": ["video"],
"mediaCount": 1,
"mediaUrls": ["https://cdn1.telesco.pe/file/example.mp4?..."],
"downloaded": false
}

How much does it cost to download Telegram media?

This Actor uses pay-per-event pricing.

You are charged a small run start event and a per-message item event. Final live pricing is shown on the Apify Store pricing tab and may include tiered discounts.

For cost control:

  • Start with downloadFiles=false if URLs are enough.
  • Keep maxMessages modest during testing.
  • Enable downloads only when you need stored file copies.
  • Use date filters to avoid collecting older posts you do not need.

How to run the Actor

  1. Open the Actor on Apify.
  2. Paste public Telegram channel archive or post URLs.
  3. Set maxMessages.
  4. Choose media types.
  5. Decide whether to download files to key-value store.
  6. Start the run.
  7. Export results from the dataset as JSON, CSV, Excel, XML, RSS, or HTML.

Tips for best results

  • Prefer https://t.me/s/<channel> for channel archive collection.
  • Use single post URLs when you only need one message.
  • Keep media downloads off for discovery runs.
  • Re-run on schedules for public channels that post frequently.
  • Store the messageUrl in downstream systems so evidence remains traceable.

Integrations

Use Telegram Media Downloader with:

  • Apify datasets for CSV/Excel exports
  • Google Sheets exports
  • Webhooks for monitoring workflows
  • Make and Zapier automations
  • Data warehouses via Apify API
  • Slack/Discord alerts for new public media evidence

API usage: Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/telegram-media-downloader').call({
startUrls: [{ url: 'https://t.me/s/telegram' }],
maxMessages: 100,
downloadFiles: false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

API usage: Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/telegram-media-downloader').call(run_input={
'startUrls': [{'url': 'https://t.me/s/telegram'}],
'maxMessages': 100,
'downloadFiles': False,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0])

API usage: cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~telegram-media-downloader/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"startUrls":[{"url":"https://t.me/s/telegram"}],"maxMessages":100}'

MCP usage

Use the Apify MCP server with:

https://mcp.apify.com/?tools=automation-lab/telegram-media-downloader

Add it to Claude Code:

$claude mcp add apify-telegram-media https://mcp.apify.com/?tools=automation-lab/telegram-media-downloader

Claude Desktop JSON config example:

{
"mcpServers": {
"apify-telegram-media": {
"url": "https://mcp.apify.com/?tools=automation-lab/telegram-media-downloader"
}
}
}

Example prompts:

  • "Run Telegram Media Downloader for this public channel and summarize posts with videos."
  • "Extract public Telegram media URLs from this message and return CSV-ready rows."
  • "Monitor this public Telegram archive weekly and alert me when new documents appear."

Public-only legality note

This Actor is designed for public Telegram pages that anyone can access in a browser without logging in.

You are responsible for using the extracted data lawfully, respecting copyright, privacy, and platform rules, and avoiding collection of private or restricted content.

FAQ

Can this Actor access private Telegram channels?

No. It only extracts content visible on public Telegram web pages without login.

Should I enable file downloads?

Enable downloadFiles when you need durable Apify storage copies. Keep it off when CDN URLs and metadata are enough.

Troubleshooting: no rows returned

Check that the URL is public and uses t.me.

If the channel requires joining, logging in, an invite link, or an app-only flow, the Actor cannot access it.

Troubleshooting: media URL expired

Telegram CDN URLs can be temporary.

If you need durable copies, enable downloadFiles so the Actor stores media files in the run key-value store during extraction.

Related Automation Lab actors:

Changelog

0.1

Initial public Telegram channel/post media extraction with optional KVS downloads.

Limits

The Actor reads public Telegram web pages and paginates public channel archives. It does not use the Telegram API and does not authenticate.

Data quality notes

Telegram can change public HTML markup. If a message has unusual media markup, the Actor still saves text and metadata when available and leaves media arrays empty if no public URL is found.

Privacy and compliance

Do not use this Actor to collect or redistribute private content. Keep datasets only as long as needed for your workflow.

Support

If a public Telegram URL does not work, share the public URL, run ID, and expected result so the extractor can be adjusted to Telegram's current markup.