# Telegram Channel Scraper: Posts, Views & Reactions (`scrapers_lat/telegram-channel-scraper`) Actor

Scrape posts and metadata from any public Telegram channel: text, publish date, view count, media, reactions, forwards, links and subscriber stats. Export to JSON, CSV or Excel. No login or API key.

- **URL**: https://apify.com/scrapers\_lat/telegram-channel-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Social media, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![Telegram Channel Scraper: Posts, Views & Reactions](https://scrapers.lat/banners/telegram-channel-scraper.png)](https://console.apify.com/actors/kzDe2dHR3g1un8hoj/input)

## Telegram Channel Scraper

> Extract posts and channel metadata from any public Telegram channel, including view counts, reactions, media and forwards, with no login or API key

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Public%20channels-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>25+ fields</strong><br>per record</td>
<td align="center"><strong>Any public channel</strong><br>coverage</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
<td align="center"><strong>Updated</strong><br>2026-07-26</td>
</tr></table>

<br>

### What you get

Give the scraper one or more public channel usernames or t.me links and it returns each recent post as a structured record, plus one metadata record per channel. Everything is read from the channel's public web preview, so no login, phone number or API key is needed.

- **type**: whether the record is a post or a channel metadata row
- **channel**: the channel username
- **channelTitle**: the channel display name
- **id**: the numeric post id within the channel
- **url**: direct link to the post
- **text**: the full post text or caption with line breaks preserved
- **author**: the post signature or author name when the channel shows one
- **datetime**: the publish date and time in ISO format
- **views**: the view count as a number
- **viewsLabel**: the view count as shown on Telegram, for example 1.44M
- **mediaType**: photo, video, document or poll when the post has media
- **mediaUrl**: direct link to the main media file
- **mediaThumbnail**: preview image for the media
- **mediaUrls**: every media link when the post is an album
- **videoDuration**: length of a video post
- **documentTitle**: the file or audio title for document posts
- **forwardedFrom**: the original source name when the post is a forward
- **forwardedFromUrl**: link to the original forwarded message
- **replyToUrl**: link to the message this post replies to
- **isForwarded**: whether the post is a forward
- **linkPreview**: title, description, site name and thumbnail of a linked page
- **links**: every external link found in the post
- **hashtags**: hashtags used in the post
- **reactions**: each reaction with its emoji, count and paid flag
- **totalReactions**: the sum of all reaction counts
- **description**: the channel bio (channel records)
- **subscribers**: the subscriber count as a number (channel records)
- **photosCount / videosCount / linksCount**: channel media totals (channel records)
- **isVerified**: whether the channel is verified (channel records)
- **thumbnail**: media or channel image
- **observedAt**: when this record was collected by the scraper

### Who is it for

| Use case | Who benefits |
|---|---|
| Track posting activity and engagement of competitor or partner channels | Marketing and social teams |
| Monitor news and breaking updates from public channels at scale | Analysts and newsrooms |
| Archive a channel's posts, media and reactions for research | Researchers and academics |
| Feed Telegram content into dashboards, alerts or an LLM | Data and automation engineers |
| Measure reach with real view and reaction counts per post | Growth and OSINT analysts |

### Frequently Asked Questions

**Can it scrape any Telegram channel?**\
It works with any public channel that has a web preview, which is the default for public channels. It cannot access private or invite-only channels, and it cannot read channels that have turned off their public preview, because those have no public page to read from.

**How many posts can I get per channel?**\
Set the Max Posts Per Channel field to any number. The scraper pages backward through the channel history from the newest post until it reaches your limit or the start of the channel. Free Apify accounts are capped at a small number of posts per run.

**Can I filter posts by keyword?**\
Yes. Add a search query and the scraper only returns posts that match that text within each channel you provide. Leave it empty to collect the most recent posts.

**Does it include view counts and reactions?**\
Yes. Every post carries its view count and, when the channel shows them, the full list of reactions with each emoji and its count, including paid star reactions. It also captures forwards, replies, media and link previews.

**What happens if a channel does not exist or is private?**\
The scraper records an error row for that channel and continues with the rest, so one bad input never stops the run. Valid channels still return their full data.

### Example use cases

Ready-to-run example tasks, each preconfigured for a common scenario. Open one and press run, or use it as a template.

### Related scrapers

Need data from the same space? Here are other scrapers we build and maintain:

- [Reddit Posts Scraper](https://apify.com/scrapers_lat/reddit-posts-scraper): Extract Reddit posts with full text, scores and awards
- [Reddit Comments Scraper](https://apify.com/scrapers_lat/reddit-comments-scraper): Pull comment threads with scores and author data
- [X (Twitter) Scraper](https://apify.com/scrapers_lat/x-twitter-scraper): Collect tweets with engagement metrics and media
- [Instagram Scraper](https://apify.com/scrapers_lat/instagram-scraper): Scrape Instagram posts, captions and stats
- [YouTube Scraper](https://apify.com/scrapers_lat/youtube-scraper): Get video metadata, views and channel details
- [Reddit Scraper](https://apify.com/scrapers_lat/reddit-scraper): Scrape subreddits, posts and comments in one run

### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for Latin American and US public platforms: real estate, jobs, e-commerce, company registries and government data. Browse the full catalog, see live sample output for each one, or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> This actor is an independent tool and has no affiliation with Telegram. It only accesses data that is publicly available on the platform. Use it in accordance with Telegram's terms of service.

# Actor input Schema

## `maxPosts` (type: `integer`):

Maximum number of posts to collect from each channel, newest first. Optional.

## `channels` (type: `array`):

Public Telegram channels to scrape. Enter each as a username (for example durov), an @username, or a full t.me link (for example https://t.me/telegram). Private and invite-only channels cannot be accessed.

## `searchQuery` (type: `string`):

Optional. Only return posts that match this text within the given channels. Leave empty to collect the most recent posts.

## Actor input object example

```json
{
  "maxPosts": 20,
  "channels": [
    "telegram"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxPosts": 20,
    "channels": [
        "telegram"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/telegram-channel-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxPosts": 20,
    "channels": ["telegram"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/telegram-channel-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxPosts": 20,
  "channels": [
    "telegram"
  ]
}' |
apify call scrapers_lat/telegram-channel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/telegram-channel-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/kzDe2dHR3g1un8hoj/builds/PkW4GHjLmmGUMsBoi/openapi.json
