Telegram Channel Messages Scraper — Views, Media & OSINT avatar

Telegram Channel Messages Scraper — Views, Media & OSINT

Pricing

from $5,000.00 / 1,000 1,000 messages extracteds

Go to Apify Store
Telegram Channel Messages Scraper — Views, Media & OSINT

Telegram Channel Messages Scraper — Views, Media & OSINT

Scrape public Telegram channels with no API key: messages, view counts, reactions, media URLs and channel analytics. Messaging data for OSINT, crypto signal tracking and brand monitoring. An optional Telethon mode adds groups and member lists with your own credentials.

Pricing

from $5,000.00 / 1,000 1,000 messages extracteds

Rating

0.0

(0)

Developer

Sami

Sami

Maintained by Community

Actor stats

1

Bookmarked

59

Total users

6

Monthly active users

10 days ago

Last modified

Share

Telegram Channel & Group Scraper

Extract messages, reactions, media metadata, and member data from any public Telegram channel or group. No login required for basic scraping.

What is Telegram Channel & Group Scraper?

This Apify Actor scrapes public Telegram channels and groups, extracting messages with full metadata including view counts, reactions (emoji + counts), media URLs, forwarded message info, hashtags, mentions, and channel statistics.

It supports two scraping modes:

  • Web Preview (default): Zero-friction, no credentials needed. Uses Telegram's public t.me/s/ endpoint.
  • Telethon API: Full access with your Telegram API credentials — complete message history (10,000+), member lists, and more.

Telegram API alternative — no login required

Looking for a Telegram scraper that works without API credentials? This Actor's default mode (Web Preview) requires zero setup — no API key, no phone number, no login. Just paste channel URLs and get structured data.

For power users who need full message history (10,000+) and member lists, the Telethon API mode provides complete access with your own Telegram API credentials.

Features at a glance

FeatureThis Actor
No login neededYes (Web Preview mode)
Reactions dataYes
Media metadataYes
Messages limit10,000+
Member extractionYes (optional, Telethon mode)
Date filteringYes
Multi-channelYes

Quick Start

Step 1: Paste channel URLs

{
"channels": [
"https://t.me/durov",
"t.me/techcrunch",
"coindesk"
]
}

Step 2: Click Run

The actor accepts full URLs, short URLs, or just the channel username. All formats work.

Step 3: Download Results

Export to JSON, CSV, Excel, or connect via API. Each message is an individual row for easy analysis.

⏰ Turn it into a monitor: only NEW messages (delta mode)

Most of this Actor's value is in watching channels, not pulling them once. Turn on deltaMode and every run returns only messages posted since the previous run of that stream. Billing stays per channel in started blocks of 1,000 messages: a channel with 1-1,000 new messages bills one $5.00 block plus the channel fee ($0.02 web preview, $0.05 Telethon); a channel with no new messages costs nothing.

{
"channels": ["durov", "coindesk"],
"maxMessagesPerChannel": 1000,
"deltaMode": true,
"deltaStateKey": "crypto-alpha"
}

How it behaves

  1. First run returns the current history and sets the baseline (per channel).
  2. Every run after that returns only genuinely new messages — already-seen ones are skipped and not returned.
  3. A quiet channel costs nothing: if nothing new was posted, nothing is pushed and no scrape event is billed.

Then attach a schedule — Apify Console → Schedules → Create, pick this Actor and your saved input, and set a cron (0 * * * * hourly, 0 8 * * * daily at 8am). You now have a hands-off "what's new in these channels" feed that grows a timestamped archive you own.

💡 deltaStateKey names an independent stream, so several monitors never collide — e.g. crypto-alpha for signal channels and tipsters for betting channels, each tracked separately even if they share channels. Delta works in both modes (web preview and Telethon API); member lists are snapshots and are not delta-filtered.

Use Cases

  • OSINT & Intelligence: Monitor public channels for threat intelligence, track disinformation, and analyze information operations.
  • Marketing & Competitive Analysis: Analyze competitor community engagement, content strategy, and audience reactions.
  • Crypto & Web3 Research: Track token launches, monitor signal channels, and measure community sentiment across crypto groups.
  • Compliance & Archival: Archive channel history for regulatory requirements, legal discovery, or organizational record-keeping.
  • Academic Research: Collect data for studies on online communities, information spread, and public discourse patterns.

Two Scraping Modes

Mode 1: Web Preview (Default — No Login)

Uses Telegram's public web preview at t.me/s/. Perfect for quick data collection without any setup.

  • No credentials needed — works out of the box
  • Public channels only — channels must have web preview enabled
  • Full channel history — the public preview paginates all the way back, 20 messages per page, no API key
  • Extracts: text, HTML, views, reactions, media URLs, forwards, replies, links, hashtags, mentions

Mode 2: Telethon API (Full Access)

Uses Telegram's official API via the Telethon library. Unlocks complete channel data.

  • Requires API credentials — api_id + api_hash from my.telegram.org
  • Full message history — up to 10,000+ messages per channel
  • Member extraction — optional, requires appropriate permissions
  • Bot token support — use a Bot Token from @BotFather as an alternative

How to Get API Credentials

  1. Go to my.telegram.org
  2. Log in with your phone number
  3. Create a new application (or use an existing one)
  4. Copy the API ID (number) and API Hash (string)

How to Generate a Session String

Run this Python script locally (one time only):

from telethon.sync import TelegramClient
from telethon.sessions import StringSession
api_id = 12345 # Your API ID
api_hash = "abc123" # Your API Hash
with TelegramClient(StringSession(), api_id, api_hash) as client:
print("Your session string:")
print(client.session.save())

This will prompt you for your phone number and a verification code. Copy the output string and paste it into the actor's sessionString input field.

Using a Bot Token Instead

If you only need to read public channel messages (no member lists), you can use a Bot Token:

  1. Message @BotFather on Telegram
  2. Create a new bot with /newbot
  3. Copy the token and paste it into the botToken input field
  4. Add your bot to the channel as an admin (or the channel must be public)

Input Parameters

ParameterTypeRequiredDefaultDescription
channelsarrayYes—Telegram channel URLs or usernames
modestringNoweb_previewweb_preview or telethon_api
maxMessagesPerChannelintegerNo1000Max messages per channel (up to 10,000). Billing is per started 1,000-message block, so asking for fewer than 1,000 costs the same and returns less.
deltaModebooleanNofalseRecurring monitor: return ONLY messages posted since the previous run of this stream. First run sets the baseline; a quiet channel costs nothing, and a channel with any new message bills one $5.00 block. Works in both modes.
deltaStateKeystringNodefaultNames an independent delta stream so multiple monitors don't collide (e.g. crypto-alpha vs tipsters). Only used when deltaMode is on.
extractMediabooleanNotrueInclude media metadata in output
extractReactionsbooleanNotrueInclude reaction counts
extractMemberDatabooleanNofalseExtract member list (Telethon only)
dateFromstringNo—Only messages after this date (ISO format)
dateTostringNo—Only messages before this date (ISO format)
apiIdintegerNo—Telegram API ID (Telethon only)
apiHashstringNo—Telegram API Hash (Telethon only, secret)
sessionStringstringNo—Pre-generated session string (Telethon only, secret)
botTokenstringNo—Bot Token from @BotFather (Telethon only, secret)

Input Example

Web Preview Mode (No Login)

{
"channels": [
"https://t.me/durov",
"coindesk"
],
"mode": "web_preview",
"maxMessagesPerChannel": 200,
"extractMedia": true,
"extractReactions": true,
"dateFrom": "2026-01-01"
}

Telethon API Mode (Full Access)

{
"channels": ["https://t.me/durov"],
"mode": "telethon_api",
"maxMessagesPerChannel": 5000,
"apiId": 12345,
"apiHash": "your_api_hash_here",
"sessionString": "your_session_string_here",
"extractMemberData": false
}

Output Example

Each message is stored as an individual item in the dataset:

{
"id": 350,
"date": "2026-04-05T18:30:00+00:00",
"text": "Today we're launching a new feature...",
"text_html": "Today we're launching a <b>new feature</b>...",
"views": 2100000,
"views_display": "2.1M",
"author": null,
"forwarded_from_name": null,
"forwarded_from_url": null,
"reply_to_message_id": null,
"media_type": "photo",
"media_url": "https://cdn4.telesco.pe/file/...",
"reactions": [
{ "emoji": "\ud83d\udc4d", "count": 42000 },
{ "emoji": "\u2764\ufe0f", "count": 15000 }
],
"reactions_total": 57000,
"links": ["https://telegram.org/blog/new-feature"],
"hashtags": ["#telegram"],
"mentions": null,
"message_url": "https://t.me/durov/350",
"channel_name": "Durov's Channel",
"channel_username": "durov",
"channel_url": "https://t.me/durov",
"channel_subscribers": 10300000,
"channel_verified": true,
"scrape_mode": "web_preview",
"scraped_at": "2026-04-12T15:00:00+00:00"
}

Pricing

This actor uses Pay Per Event pricing.

EventPrice
Actor run started$0.00005 (per GB of memory, minimum 1 event)
Channel scraped (web preview)$0.02 per channel
Channel scraped (Telethon API)$0.05 per channel
1,000 messages extracted$5.00
1,000 members extracted$1.00

Cost Examples

Shown at the $5.00 / 1,000 messages rate. Messages are billed per channel in blocks of 1,000, rounded up — a channel that returns 100 messages still bills one full 1,000-message block, so scraping many small channels costs more than the raw message count suggests. The practical consequence: leave maxMessagesPerChannel at 1,000 or higher. Asking for 100 costs exactly the same $5 as asking for 1,000 — the default is set to 1,000 for that reason, and the public preview really does paginate that deep (measured: 11 years of history in one run).

ScenarioCost
5 channels, 100 messages each (web preview)~$25.10
1 channel, 5,000 messages (Telethon)~$25.06
10 channels, 200 messages each (web preview)~$50.20
1 channel, 1,000 messages + members (Telethon)~$6.06

With deltaMode on, a channel with nothing new in a run charges nothing — not even the per-channel event. A channel with 1-1,000 new messages still bills one $5.00 block plus the channel fee ($0.02 web preview, $0.05 Telethon), so delta saves money only on runs where a channel posted nothing.

No compute or proxy charges — you pay only the listed events.

How to Scrape Telegram Channels

Scraping Telegram channels for data analysis, research, or monitoring is straightforward with this actor:

  1. Find the channel: Navigate to the Telegram channel in your browser or app. The URL format is t.me/channelname.
  2. Configure the actor: Paste the channel URL(s) into the input. Choose your scraping mode and set the message limit.
  3. Run the actor: Click "Start" on Apify. The actor handles pagination, rate limiting, and error recovery automatically.
  4. Export your data: Download results as JSON, CSV, or Excel. Or connect via API for automated pipelines.

The actor automatically handles:

  • Rate limiting with exponential backoff
  • Pagination to collect all available messages
  • Private/non-existent channel detection
  • Multiple input formats (URLs, usernames, with/without @)

Integration Examples

Python SDK

from apify_client import ApifyClient
client = ApifyClient("your_api_token")
run = client.actor("zhorex/telegram-channel-scraper").call(run_input={
"channels": ["https://t.me/durov"],
"maxMessagesPerChannel": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['date']}: {item['text'][:80]}")

cURL

curl "https://api.apify.com/v2/acts/zhorex~telegram-channel-scraper/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"channels": ["durov"], "maxMessagesPerChannel": 50}'

Webhook / n8n Integration

Set up an Apify webhook to trigger when the actor finishes, then process results in n8n, Zapier, or any automation tool.

FAQ

Does this require a Telegram API key?

No (for web preview mode). The default mode uses Telegram's public web preview at t.me/s/ which requires no authentication. For Telethon mode, you need API credentials from my.telegram.org.

Can I scrape private channels?

Only with Telethon mode if you are a member of the channel. Web preview mode only works with public channels that have web preview enabled.

What about rate limits?

The actor handles rate limits automatically. Web preview mode uses a 2-second delay between requests. Telethon mode handles Telegram's FloodWaitError with automatic sleep and retry. You should never see rate limit errors in your results.

Is this GDPR compliant?

The actor extracts publicly available data. When extracting member data (Telethon mode), ensure you have a legitimate legal basis under GDPR or applicable data protection laws. Member data extraction is disabled by default.

What formats can I export?

Apify supports JSON, CSV, Excel (XLSX), and XML. You can also access data via the Apify API, integrate with Google Sheets, or connect to 2,000+ apps via webhooks.

Why do I need a phone number for Telethon mode?

Telegram's API requires phone-based authentication. You generate a session string once locally, then use it in the actor. The actor never stores or transmits your phone number.

What's the maximum number of messages?

Web preview mode reads the FULL channel history with no API key — Telegram's ?before= pagination gives random access anywhere in the archive (measured 2026-08-27: 22 consecutive pages, no rate limit, no login). Raise maxMessagesPerChannel for deep backfills; the run simply takes longer. Telethon mode, with your own credentials, adds member data, groups, and the channels that switch their public preview off entirely.

Is there a free Telegram scraper?

This one is not free: the first 1,000-message block of a channel costs $5.00, so a free plan's $5 monthly credit does not cover a full channel. Web preview mode costs $0.02 per channel plus $5.00 per started block of 1,000 messages per channel.

How much does it cost to scrape Telegram channels?

$5.00 per started block of 1,000 messages per channel, plus $0.02 (web preview) or $0.05 (Telethon) per channel: ~$5.02 per channel for up to 1,000 messages in web preview, ~$5.05 in Telethon. A channel that returns 100 messages still bills one full block.

Can I use this Telegram scraper in Python?

Yes. Use the Apify Python client (pip install apify-client) to call this Actor programmatically. See the Python SDK example above.

This Actor accesses publicly available data through Telegram's public web preview (t.me/s/) and official Telegram API. No authentication is bypassed and no private data is accessed without authorization. Always consult legal counsel for your specific use case.

What does this Telegram scraper cover?

This Actor has two scraping modes (web preview + Telethon API). It supports reactions, media metadata, date filtering, and multi-channel scraping.

Other scrapers by Zhorex

Chinese Social Intelligence Suite:

B2B Review Intelligence:

Streaming Analytics:

Other Tools:

This actor accesses publicly available data through Telegram's public web preview (t.me/s/) and official Telegram API. No authentication is bypassed and no private data is accessed without authorization.

When extracting member data, ensure you have a legitimate legal basis under GDPR or applicable data protection laws. Member data extraction is disabled by default and must be explicitly enabled.

Users are responsible for ensuring their use of extracted data complies with applicable laws and Telegram's Terms of Service.


Your Review Matters

If you have used this Actor, a 30-second rating helps others, good or bad:

  1. Go to the Telegram Channel Scraper page
  2. Scroll down and click the star rating
  3. Optionally leave a one-line comment about your use case

Why it matters: Ratings help other users judge whether this Actor fits their use case.

Found a bug? Open an issue and it will be looked at.