Telegram Channel Scraper - Public Channel Messages
Pricing
from $2.10 / 1,000 messages
Telegram Channel Scraper - Public Channel Messages
Scrape messages from public Telegram channels: text, dates, views, media and links. Telegram scraper and channel message extractor using the t.me/s web preview. No Telegram account or API key needed.
Pricing
from $2.10 / 1,000 messages
Rating
0.0
(0)
Developer
CrawlKit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Extract messages from a public Telegram channel — no Telegram account, API key or bot token needed. Pass a channel URL or username and get structured messages back.
How it works
Telegram exposes a public web preview for channels at https://t.me/s/CHANNEL_NAME. This actor fetches that static HTML page, parses the messages with BeautifulSoup, and paginates backwards to collect older messages. No headless browser or API credentials are used.
Features
- Simple input — provide a channel URL or username
- Flexible input parsing — accepts
https://t.me/channel,https://t.me/s/channel,@channel, or barechannelname - Pagination — fetches older messages beyond the first page until
maxMessagesis reached - Extracted fields — text, date, views, author, forwarded source, links, and media (photos, videos, documents, stickers)
- Retries — retries with exponential backoff on timeouts, rate limits (HTTP 429) and server errors
- Order — messages are pushed in chronological order (oldest first)
Input
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
channelUrl | string | Yes | — | Channel URL or username. Accepts: https://t.me/channel, https://t.me/s/channel, @channel, or channel |
maxMessages | integer | No | 20 | Maximum messages to scrape (1–5000) |
includeMedia | boolean | No | true | Include media URLs (photos, videos, documents, stickers) in output |
Output
Each message is a flat JSON object:
{"message_id": 12345,"channel": "example_news","text": "Weekly update is out. Read more at https://example.com","date": "2024-01-15T12:00:00+00:00","author": "Example News","views": 52000,"forwarded_from": null,"links": ["https://example.com"],"url": "https://t.me/example_news/12345","media": [{"type": "photo", "url": "https://cdn4.telegram-cdn.org/..."}]}
Output fields
| Field | Type | Description |
|---|---|---|
message_id | integer | Unique message ID within the channel |
channel | string | Channel username |
text | string | Plain text content (newlines preserved) |
date | string | ISO 8601 datetime |
author | string | Channel or author name |
views | integer | View count (parsed from K/M suffixes) |
forwarded_from | string | null | Original author if forwarded |
links | array | URLs found in message text |
url | string | Direct link to the message |
media | array | Media attachments (when includeMedia is true): photo, video, video_thumbnail, sticker (with url) or document (with title) |
Use cases
- Content monitoring — track posts from competitors, influencers, or industry channels
- OSINT research — collect public communications for analysis
- Trend detection — monitor channel activity and engagement over time
- Data journalism — archive public channel content for reporting
- Market research — track product announcements and community discussions
Pricing
Pay-per-event, no start fee: $3.50 per 1,000 messages on the Apify Free plan, with lower prices on paid plans.
| Event | Free | Starter | Scale | Business | Enterprise |
|---|---|---|---|---|---|
Message (MESSAGE) | $3.50 | $3.00 | $2.60 | $2.10 | $2.10 |
Prices in USD per 1,000 events.
Cost examples (Free plan)
| Scenario | Messages | Cost |
|---|---|---|
| Quick check (default) | 20 | $0.07 |
| Daily monitoring | 100 | $0.35 |
| Channel archive | 1,000 | $3.50 |
| Large-scale research | 5,000 | $17.50 |
Limitations
- Public channels only — the actor reads the
t.me/s/web preview; private channels and groups are not supported - Web preview must be enabled — some channels disable the
t.me/s/preview; those runs fail with a "not found or is private" error - No real-time streaming — the actor scrapes a snapshot; for new messages, schedule recurring runs
- Media URLs are CDN links — they may expire after some time; download media promptly if needed
- Rate limits — Telegram may rate-limit frequent requests; the actor waits and retries on HTTP 429 (up to 3 attempts per page), then stops paginating
Python 3.11, async httpx, BeautifulSoup + lxml, Apify SDK.
Related Actors
- YouTube Transcript Scraper - Captions & Comments — Scrape YouTube video transcripts (captions and auto-generated subtitles) with timestamps, video metadata and optional comments.
- Google News Scraper - News Articles by Keyword — Scrape Google News articles for any keyword: headlines, sources, publish dates, URLs and snippets.
- Google Trends Scraper - Interest Over Time & Related Queries — Scrape Google Trends: interest over time and related queries for up to 5 compared keywords, by country, time range and category.