# Telegram Channel Scraper (`lergassy/telegram-channel-scraper`) Actor

\[$0.20/1K posts] Every post of public Telegram channels: text, date, views, reactions, photos, video, files, link previews, hashtags, links, forwards, plus channel subscribers. Search inside a channel. No account, no run fee.

- **URL**: https://apify.com/lergassy/telegram-channel-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** Social media, News, Agents
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.14 / 1,000 posts

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Telegram Channel Scraper** collects **every post of public Telegram channels** and returns one row per post: **text, date, views, reactions, photos, video, attached files, link previews, polls, hashtags, links and forwards**, with the **channel's title and subscribers** on every row. Search inside a channel and stop at a date.

**$0.0002 per post** — 20 cents per 1,000. No Telegram account, no API key, no phone number, no start fee.

### What is Telegram Channel Scraper?

Telegram channels are where news, crypto, marketing and niche communities publish first. This Actor reads the public web preview of each channel (t.me/s/…) and pages back through its history. Use it for media monitoring, crypto and market signals, competitor channels, content research, or feeding channel archives to an AI.

Need per-channel analytics (reach, posting frequency, best hours)? See our **Telegram Channel Analytics**.

### What is in every row

| Field | Meaning |
|---|---|
| `text`, `date`, `url`, `postId`, `edited` | The post |
| `views`, `reactions`, `reactionsTotal`, `viewsPerSubscriber` | Reach and reactions |
| `photoUrls`, `videoThumbnailUrl`, `videoDuration`, `documentName`, `pollQuestion` | Media |
| `linkPreview`, `links`, `hashtags` | What the post points to |
| `isForwarded`, `forwardFrom`, `isReply`, `author` | Where it came from |
| `channel`, `channelTitle`, `channelSubscribers` | The channel |

### How much does it cost?

| Event | Price |
|---|---|
| Post | **$0.0002** |

- Posts older than **Posts newer than** or below **Minimum views**: **$0**.
- Channels that are private or do not exist: **$0** (an error row says why).

#### Bulk export: what 50,000 rows actually cost

This Actor is built for bulk jobs — thousands of inputs in one run, or a daily schedule. There is **no
fee per run, no fee per page and no proxy charge**: you pay for the rows you keep.

| Job | This Actor | Most-used Actor in this category |
|---|---|---|
| 50,000 posts across 100 runs | **$10** | $17.50 + $1 in start fees |
| 20 channels × 1,000 posts every week | **$16 a month** | $28 + start fees |

Checked on the Apify Store on 23 September 2026 against the Actor with the most monthly users in this category
($0.00035 per post plus $0.01 per run). Some Actors here ask less per row — this table compares against the one buyers actually use most.

### How to use it in three steps

1. Paste channel usernames or t.me links — one per line.
2. Set **Posts per channel**, optionally a **search word** and a **date** to stop at.
3. Press **Start**, then download JSON, CSV or Excel — or schedule it and send new posts to Google Sheets, Slack or n8n.

### ⬇️ Input

```json
{
  "channels": ["durov", "https://t.me/s/telegram"],
  "maxPostsPerChannel": 500,
  "searchQuery": "",
  "postsNewerThan": "2026-06-01"
}
```

### ⬆️ Output

```json
{
  "type": "post",
  "channel": "telegram",
  "photoUrls": [
    "https://cdn1.telesco.pe/file/IhRgK6tIoS7q1_uIXVK4_Zp81vIq8qZ7Pt_mpSCpiI7lK3L2KpIqzfcVAnrb1aWV0E1qzgds7GX-0Szy78AMPtSuVU2ybbvZU24BpzuIhXToKGdUNiwe9A5KqotPdMCX55NS7dbNJb4kLXFfcEP9dN3JKHVxvS6uiOO5Su1tDSzLtMAFCHXvZPZHXOnKtDuQEt9WUDgCd39coOVmNYURrUrfxvNqOwaSejVk6y4XBQ9u-FQR5tO9gCLPaZpq0qw9c54mDHDDDGomwCCpHYjSEmhAOtQa4qPahSKCyY5g1UpN4wyErYd6mjuHe6hetbY0oxMlaXGHJYx8peexDSmuQA.jpg"
  ],
  "videoThumbnailUrl": null,
  "videoDuration": null,
  "documentName": null,
  "linkPreview": null,
  "pollQuestion": null,
  "edited": false,
  "postId": 458,
  "url": "https://t.me/telegram/458",
  "date": "2026-08-26T19:12:04+00:00",
  "text": "Placeholders for App Updates. If a user with an outdated app encounters a new feature, they can now instantly tap to download the latest update.\n\nAugust Features\n1 • 2 • 3 • 4 • 5 • More",
  "textLength": 186,
  "views": 802000,
  "reactions": [],
  "reactionsTotal": 0,
  "hasPhoto": true,
  "hasVideo": false,
  "hasDocument": false,
  "hasPoll": false,
  "hasLinkPreview": false,
  "isForwarded": false,
  "forwardFrom": null,
  "isReply": false,
  "author": null,
  "hashtags": [],
  "links": [],
  "channelTitle": "Telegram News",
  "channelSubscribers": 9490000,
  "channelUrl": "https://t.me/telegram",
  "viewsPerSubscriber": 0.085,
  "searchQuery": null,
  "scrapedAt": "2026-09-23T13:18:14.627Z"
}
```

### Use cases

#### Media and brand monitoring

Channels in your niche, filtered by a keyword, every morning.

#### Crypto and market signals

Announcements and calls from trading channels with views and reactions.

#### Competitor channels

What competitors post, how often, and what gets views.

#### Archives for AI

Whole channel histories as clean text through the Apify MCP server or API.

### Integrations

Every run is available through the Apify API, and the Actor works out of the box with n8n, Make, Zapier, Google Sheets, LangChain and the Apify MCP server.

### FAQ

**Do I need a Telegram account?** No. The Actor reads the public web preview any visitor sees.

**Private channels and groups?** No — only public channels with a web preview.

**How far back can it go?** The whole public history, 20 posts per page; big archives take a few minutes.

**Comments under posts?** Telegram does not show discussion comments in the web preview.

**Is this legal?** The Actor reads public channel pages. Use the content in line with Telegram's terms and copyright.

# Changelog

This Actor's version history is a separate document: https://apify.com/lergassy/telegram-channel-scraper/changelog.md

# Actor input Schema

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

Channel usernames or links — <b>durov</b>, <b>@telegram</b>, <b>https://t.me/s/bbcnews</b>. Public channels only.

## `maxPostsPerChannel` (type: `integer`):

Newest first. Set it high to take the whole history.

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

Only posts containing this word or phrase (Telegram's own channel search).

## `postsNewerThan` (type: `string`):

Stop at posts older than this date. Older posts are not charged.

## `minViews` (type: `integer`):

Skip posts with fewer views. Skipped posts are not charged.

## `concurrency` (type: `integer`):

How many channels to read at the same time.

## Actor input object example

```json
{
  "channels": [
    "durov",
    "telegram"
  ],
  "maxPostsPerChannel": 50,
  "minViews": 0,
  "concurrency": 3
}
```

# Actor output Schema

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

One row per Telegram channel post: text, date, views, reactions, media.

## `runSummary` (type: `string`):

JSON summary of the run: rows delivered, rows filtered out, failed inputs (free) and request statistics.

# 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 = {
    "channels": [
        "durov",
        "telegram"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/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 = { "channels": [
        "durov",
        "telegram",
    ] }

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

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

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

```

## CLI example

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/telegram-channel-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/o7yhcILPR9z7cmALV/builds/RtKsMU9c7lYxwDTwL/openapi.json
