Telegram Channel Scraper
Pricing
from $2.00 / 1,000 results
Telegram Channel Scraper
Export post history from any public Telegram channel via its no-login web preview. We rotate browser fingerprints, retry on rate limits, and walk the pagination cursor so deep channel history lands clean β text, media links, view counts, and forwards. Pay only for posts that land.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Telegram Channel Scraper
We do the dirty work so your dataset stays clean. π
$2.00 / 1,000 posts β pay only for results that land. No credit card required to try.
Export post history from any public Telegram channel via its no-login web preview (t.me/s/{channel}) β no Telegram API key, no bot token, no MTProto session to babysit. We rotate browser fingerprints, retry on rate limits, and walk the pagination cursor backward through a channel's history so you get clean, structured rows: text, media links, view counts, and forwards.
π― What this scrapes
- Public Telegram channel post history via the server-rendered
/s/{channel}preview surface. - Channel-level metadata (title, subscriber count, description) captured once per channel.
- Post text, timestamps, view counts, media (photo/video/document), outbound link previews, and forward attribution.
- Every field lands typed and validated β no raw HTML fragments, no guessing at date formats.
π₯ Features
- What we handle for you: browser fingerprint rotation, exponential back-off on rate limits, pagination cursor walking, and Pydantic-validated rows.
- Works on any public channel β no login, no bot token, no MTProto setup.
- Detects private/nonexistent channels and skips them with a clear warning instead of failing the whole run.
- Pay only for results that land β no data means no
resultcharges (only the smallactor-startwarm-up fee). - Clean, typed dataset rows β Pydantic-validated on the way out, so downstream tools never choke on a malformed field.
π‘ Use cases
- OSINT analysts tracking a watchlist of political/activist channels for narrative shifts, without opening a Telegram account.
- Crypto researchers archiving trading-signal channels to backtest signal accuracy after the fact.
- News teams backfilling a monitoring dashboard with a channel's full history on day one, instead of only capturing posts going forward.
- Compliance / trust-and-safety teams pulling a channel's public post history as evidence before it goes dark or gets banned.
βοΈ How to use it
- Open the Actor input form.
- Add one or more channel usernames to Channel usernames (with or without
@/t.me/prefix). - Adjust Max posts per channel (default 100, maximum 5000).
- Optionally set Since date to stop paginating once posts get older than a given date.
- Click Start and watch the run log. Results stream into the default dataset in real time.
π₯ Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
usernames | array of string | yes | β | Public channel usernames, with or without @/t.me/ prefix |
maxPostsPerChannel | integer | no | 100 | Cap on posts fetched per channel (1β5000) |
sinceDate | string | null | no | null | ISO-8601 date/datetime; stop paginating once older posts are reached |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration |
{"usernames": ["durov"],"maxPostsPerChannel": 100,"sinceDate": null,"proxyConfiguration": { "useApifyProxy": true }}
π€ Output
One row per post (row_type: "post"), plus one summary row per channel (row_type: "channel_meta"), sharing a single dataset.
{"row_type": "post","channel": "durov","post_id": 522,"datetime": "2026-05-20T09:12:03+00:00","text": "New update for Telegram...","view_count": 4510000,"media_type": "photo","media_url": "https://cdn4.telesco.pe/file/....jpg","outbound_links": ["https://telegram.org/blog/watch-apps-and-more"],"forwarded_from": null,"reply_count": null,"permalink": "https://t.me/durov/522"}
π Integrate it
Call it from any Python pipeline via apify-client:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("DevilScrapes/telegram-channel-scraper").call(run_input={"usernames": ["durov"], "maxPostsPerChannel": 500})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
No Python shop? Wire the same call into n8n or Make via their built-in Apify node β point it at DevilScrapes/telegram-channel-scraper with the same input JSON and the run drops straight into your workflow.
π° Pricing
Pay-Per-Event (PPE) β you pay only for what lands in your dataset:
| Event | Price (USD) | When |
|---|---|---|
actor-start | $0.01 | Once per run, at boot |
result | $0.002 | Per post row written to the dataset (channel-meta rows are never charged) |
Example: scraping 1,000 posts across a handful of channels costs $0.01 (start) + 1,000 Γ $0.002 (results) = approximately $2.01 total.
π§ Limitations
- Private / invite-only channels have no public preview and are out of reach by design.
- Comment threads / linked discussion groups are not scraped.
- Reply/comment counts are not exposed on the public preview surface and stay
null.
β FAQ
Do I need a Telegram account to use this Actor?
No. The /s/{channel} preview is Telegram's own no-login, search-engine-facing surface. You run the Actor; we handle the rest.
Can I scrape private or invite-only channels?
No, the /s/{channel} preview only exists for public channels; private channels have no public preview to fetch, by design.
How far back can I go in a channel's history?
As far as the channel's public history goes, up to the Max posts per channel cap (up to 5000) or the Since date cutoff, whichever comes first.
Will I get charged for channels that don't exist or are private?
No. The Actor detects empty/nonexistent previews and skips them with a run-log warning β only the one-time actor-start fee plus result charges for post rows that actually land apply.
Can I get comment/reply counts on posts?
Not from this surface; reply_count is always null (see Limitations).
π¬ Your feedback
Found a bug, hit a rate limit, or need a new field on the output row? Open an issue on the Actor's Apify Store page or contact the Devil Scrapes team at apify.com/DevilScrapes. We ship updates within days of validated reports.