Telegram Channel Scraper avatar

Telegram Channel Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Telegram Channel Scraper

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

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Telegram Channel Scraper

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 result charges (only the small actor-start warm-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

  1. Open the Actor input form.
  2. Add one or more channel usernames to Channel usernames (with or without @/t.me/ prefix).
  3. Adjust Max posts per channel (default 100, maximum 5000).
  4. Optionally set Since date to stop paginating once posts get older than a given date.
  5. Click Start and watch the run log. Results stream into the default dataset in real time.

πŸ“₯ Input

FieldTypeRequiredDefaultDescription
usernamesarray of stringyesβ€”Public channel usernames, with or without @/t.me/ prefix
maxPostsPerChannelintegerno100Cap on posts fetched per channel (1–5000)
sinceDatestring | nullnonullISO-8601 date/datetime; stop paginating once older posts are reached
proxyConfigurationobjectno{"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 ApifyClient
client = 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:

EventPrice (USD)When
actor-start$0.01Once per run, at boot
result$0.002Per 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.