Telegram Channel Messages Scraper
Pricing
from $0.25 / 1,000 telegram messages
Telegram Channel Messages Scraper
Scrape public Telegram channel messages from t.me links — text, dates, view counts, photos, videos, forwards, replies & link previews. Paste channel URLs, @handles, or direct post URLs; filter by date window. No Telegram account, API key, or login needed. Clean JSON or CSV out.
Pricing
from $0.25 / 1,000 telegram messages
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Telegram Channel Messages Scraper — posts, views & media from t.me links
Scrape public Telegram channel messages straight from t.me links — full text, post date, view counts, author signature, photos, videos, documents, polls, forwards, replies, and link previews. Works with channel URLs, bare @handles, and direct post URLs, needs no Telegram account, no API key, and no login, and returns clean JSON/CSV you can plug into any workflow.

Why use this scraper?
- Zero setup — no Telegram API credentials, no phone number, no session files. Paste links, press Start.
- Full message payload — text (plain AND original HTML), ISO dates, exact view counts, media URLs, "Forwarded from" sources, quoted replies, and link-preview cards in every row.
- Deep history — pages backwards through the channel feed automatically; grab the latest 20 posts or the last 20,000.
- Date-window filters —
oldestDate/newestDateextract an exact time slice and stop pagination early, so you don't pay for pages you don't need. - Single-post mode — paste
t.me/channel/123and get exactly that message as one row. - Fast and parallel — channels are scraped concurrently in a sliding window; feeds page as fast as t.me serves them.
Overview
Give the actor any list of public channel links or usernames. For each channel it walks the t.me web-preview feed newest-first, parses every message widget into one structured row, and stops when it hits your maxItems cap, your date window, or the beginning of the channel's history. Direct post URLs return exactly one row. One message in, one row out — no padding.
Supported inputs
| Input | Example | Result |
|---|---|---|
| Public channel | https://t.me/telegram | the channel's message feed, newest first |
| Web preview | https://t.me/s/bloomberg | same feed — normalized automatically |
| Direct post URL | https://t.me/durov/513 | that single message as one row |
telegram.me alias | https://telegram.me/telegram | normalized to t.me |
| Bare handle | @durov or durov (via the Usernames field) | same as the full channel URL |
Not supported: private invite links (t.me/+hash, t.me/joinchat/...) and private-channel post links (t.me/c/...). Telegram does not expose private channels' message history on the web preview, so these inputs are reported and skipped — no silent failures. Groups and channels that disable the web preview also return no messages.
Use cases
- Crypto / trading signal monitoring — pull the latest posts from signal channels into your own pipeline, with dates and views.
- News & media monitoring — track what large news channels publish, when, and how many views each post gets.
- Content research & trend analysis — which posts in a niche get the most views; what formats (video/photo/poll) perform.
- OSINT & trust-and-safety research — archive public channel history with forward-chains ("Forwarded from") preserved.
- Competitor channel analysis — posting frequency, view velocity, and outbound links of competing channels.
- Dataset building for AI/LLM — clean message text at scale for classification, summarization, or fine-tuning corpora.
How it works
- Normalize — every input (channel URL,
t.me/s/preview, post URL,@handle) is normalized and deduplicated; unsupported private links are reported up front. - Fetch — the channel's t.me/s web-preview feed is fetched with browser-grade TLS fingerprints (impit), 20 posts per page. t.me has no anti-bot, so no proxy is needed.
- Parse — each message widget yields text, HTML, date, views, author, photos, videos, documents, polls, forwards, replies, link previews, and outbound links.
- Paginate — the feed walks backwards (
?before=cursor) untilmaxItems, youroldestDate, or the start of the channel history is reached. - Push — one dataset row per message, newest first, JSON or CSV. Channels run in parallel.
Input configuration
{"startUrls": ["https://t.me/telegram","https://t.me/durov/513"],"usernames": ["@durov"],"maxItems": 200,"oldestDate": "2026-01-01"}
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — | Public channel URLs, t.me/s/ previews, or direct post URLs |
usernames | array | [] | Bare handles as an alternative to full URLs |
maxItems | integer | 100 | Hard cap on message rows across all channels (newest kept first) |
oldestDate | string | — | Skip messages before this ISO date; also stops pagination early |
newestDate | string | — | Skip messages after this ISO date |
maxConcurrency | integer | 10 | Channels scraped in parallel (pages within one channel are sequential) |
proxy | object | none | Optional — t.me needs no proxy; direct is fastest |
Output overview
One row per message. Text comes in two forms — text (plain, line breaks preserved) and textHtml (original markup with bold/italic/links). Media, forwards, replies, and link previews are null or empty arrays when the message doesn't have them.
{"messageId": 513,"messageUrl": "https://t.me/durov/513","channelUsername": "durov","channelName": "Pavel Durov","channelUrl": "https://t.me/durov","text": "$100,400 just went to the 15 winners of the TON Consensus Challenge.\n\n🧠 The smartest engineers on the planet — some armed with loyal AI sidekicks — helped us maximize the security of the new consensus mechanism.\n\n🏆 Telegram contests offer generous prize money — and the only path to joining our engineering team.","textHtml": "<b>$100,400</b> just went to the <b>15 winners</b> of the <a href=\"https://t.me/contest/452\">TON Consensus Challenge</a>. …","date": "2026-05-15T18:14:32+00:00","views": 3980000,"author": "Pavel Durov","photos": [],"videos": [],"documents": [],"voice": null,"sticker": null,"poll": null,"forwardedFrom": null,"replyTo": null,"linkPreview": {"url": "https://t.me/contest/452","siteName": "Telegram","title": "Telegram Contests","description": "💎 Blockchain Contest, Round 2: Results…","imageUrl": null},"outboundLinks": ["https://t.me/contest/452", "https://t.me/contest"],"scrapedAt": "2026-07-22T20:09:36.075Z"}
A message with media instead looks like:
{"messageId": 453,"channelUsername": "telegram","photos": ["https://cdn4.telesco.pe/file/…jpg"],"videos": [{"videoUrl": "https://cdn4.telesco.pe/file/….mp4?token=…","thumbUrl": "https://cdn4.telesco.pe/file/…","duration": "0:39","kind": "video"}]}
Key output fields
| Group | Fields |
|---|---|
| Identity | messageId, messageUrl, channelUsername, channelName, channelUrl |
| Content | text (plain), textHtml (original markup), author (post signature, if the channel signs posts) |
| Engagement | date (ISO 8601), views (exact integer, e.g. 3980000) |
| Media | photos[] (CDN URLs), videos[] (videoUrl/thumbUrl/duration/kind), documents[] (title/extra), voice, sticker, poll (question + options + percentages) |
| Context | forwardedFrom (name/url), replyTo (url/authorName/text excerpt), linkPreview (url/siteName/title/description/imageUrl) |
| Links | outboundLinks[] — every http(s) link found in the message text |
FAQ
Do I need a Telegram account or API key?
No. The actor reads Telegram's public t.me web-preview pages — no account, no api_id/api_hash, no phone number, no session string.
Can it scrape private channels or groups?
No. Private invite links (t.me/+hash) and t.me/c/ post links are not supported — Telegram does not expose private message history on the web preview. These inputs are reported and skipped at the start of the run. If you need channel metadata (name, bio, member count) from an invite link, use my Telegram Channel Scraper instead.
Can it scrape comments and reactions? No. The t.me web preview shows posts only — comment threads and reaction counts are not rendered there, so this actor doesn't return them.
How far back can it go?
All the way to the channel's first post, budget permitting. Set maxItems and/or oldestDate to control depth — the feed pages backwards 20 posts at a time.
Are the video URLs permanent?
No — videoUrl links are tokenized CDN URLs that expire after some time, and t.me doesn't embed them at all for very large files (you still get thumbUrl and duration). Photo and avatar URLs are stable. Download media promptly if you need to keep it.
Why do some rows have text: null?
Pure media posts (a photo/video with no caption) have no text — you still get the media, date, and views.
Are view counts exact?
They're Telegram's own display values — small posts show exact numbers, popular posts show abbreviations like 3.98M, which the actor converts to integers (3980000).
What happens with dead or invalid links? Unrecognizable inputs are reported and skipped at the start; deleted posts and channels without a web preview are logged and skipped without producing a row. You only pay for actual results.
Support
- Issues tab — fastest way to report a problem or request a field; I typically respond within 24 hours.
- The actor sends me automatic failure alerts, so broken runs are usually being fixed before you write in.
Additional services
Need a custom pipeline (scheduled channel monitoring with diffing, keyword alerting, media downloading at scale, CRM integration), a private variant of this actor, or a scraper for another platform? Reach out via the Issues tab or my Apify profile — custom work is available.
Explore more scrapers
Check my Apify profile for more scrapers — my Telegram Channel Scraper (channel/group/bot metadata, member counts, invite-link resolution), jobs (LinkedIn, Indeed, Glassdoor, Upwork), real estate (Zillow, Realtor, Rightmove, ImmoScout24, Idealista), reviews (Trustpilot, Glassdoor), travel (Expedia), and many more directory and listing sites.
🤖 For AI Agents & LLM Apps
Quick-reference card for calling this actor via the Apify API or MCP:
- Purpose: extract public Telegram channel messages (text, date, views, media, forwards, link previews) as one JSON row per message.
- Minimal input that runs:
{ "usernames": ["telegram"], "maxItems": 20 }
- Key output fields (flat):
messageId,messageUrl,channelUsername,channelName,text,textHtml,date,views,author,photos,videos,documents,poll,forwardedFrom,replyTo,linkPreview,outboundLinks,scrapedAt. - Billing: pay-per-event — a small actor-start fee plus one charge per message row saved.
maxItemsis the cost ceiling. - Behaviors agents should know:
- Channels are scraped newest-first;
maxItemskeeps the most recent posts. oldestDate/newestDate(ISOYYYY-MM-DD) slice an exact window and reduce cost.- A direct post URL in
startUrls(e.g.https://t.me/durov/513) returns exactly that message. - Private links (
t.me/+…,t.me/c/…) are skipped with a warning — don't retry them. textcan benullfor caption-less media posts; checkphotos/videostoo.
- Channels are scraped newest-first;
⚠️ Disclaimer
This actor collects only publicly available data from Telegram's public t.me web-preview pages — the same information any logged-out visitor sees in a browser. It does not access private channels, does not join anything, does not read direct messages, and does not bypass any authentication. You are responsible for how you use the data: comply with Telegram's Terms of Service, applicable data-protection laws (GDPR, CCPA), and platform policies in your jurisdiction. This actor is not affiliated with or endorsed by Telegram FZ-LLC. All trademarks are the property of their respective owners.
SEO Keywords
telegram message scraper, telegram channel messages scraper, scrape telegram messages, telegram post scraper, telegram channel posts export, telegram channel history scraper, t.me scraper, telegram views scraper, telegram media scraper, telegram channel monitoring, telegram osint, telegram news scraper, telegram crypto signals scraper, extract telegram posts, telegram channel archive, telegram post views count, telegram forwarded from tracker, telegram channel data extraction, scrape t.me channel, telegram feed scraper, telegram message export csv, telegram channel api alternative