# Telegram Channel Scraper — Public Messages, No Account (`technicaldost/telegram-channel-scraper`) Actor

Scrape messages, views, forwards and media from public Telegram channels via the t.me/s preview. No Telegram account, API key or phone number required. Ideal for crypto/trading channel monitoring, news aggregation and OSINT pipelines.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 — Public Messages, No Account

Scrape messages, views, forwards, replies and media from **any public Telegram channel** — no Telegram account, no API key, no phone number. Uses the public `t.me/s/` preview, so it works for channels you are not a member of.

### Why this actor

- **Zero auth** — most Telegram scrapers require MTProto/Telethon sessions that break on re-auth. This one just works.
- **MCP / pipeline ready** — stable JSON schema, pay-per-event pricing, perfect for n8n, LangChain, Claude/agent workflows and scheduled monitoring.
- **Built for crypto, trading & news monitoring** — track channel volume, views and forwarded signals in near-real time.

### Input

| Field | Type | Description |
|---|---|---|
| `channels` | string\[] | Channel usernames or URLs (`durov`, `@durov`, `https://t.me/durov`) |
| `maxMessagesPerChannel` | integer | Max recent messages per channel (default 20, ~20 per page) |
| `oldestMessageDate` | string | Optional ISO date cutoff (e.g. `2026-08-01`) |

### Output

One dataset item per message:

| Field | Description |
|---|---|
| `channel` | Channel username |
| `messageId` | Numeric message ID |
| `messageUrl` | Direct `t.me` link |
| `date` | ISO publish datetime |
| `text` | Full message text |
| `views` / `forwards` / `replies` | Engagement counters (K/M suffixes resolved to numbers) |
| `mediaType` / `mediaUrl` | `photo` / `video` / `document` / `voice` / `sticker` + URL |
| `links` | URLs embedded in the message |
| `scrapedAt` | Scrape timestamp |

### Pricing

Pay per event: **$1.00 per 1,000 messages** ($0.001/message). No start fee. You only pay for messages actually delivered to the dataset.

### Example

```json
{ "channels": ["durov", "telegram"], "maxMessagesPerChannel": 50 }
```

### Notes

- Only **public** channels are accessible; private/restricted channels return a warning.
- Forward counters are only exposed by Telegram on some messages; field is `null` otherwise.

# Actor input Schema

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

Public Telegram channel usernames or t.me URLs to scrape (e.g. "durov" or "https://t.me/durov"). Only public channels are supported.

## `maxMessagesPerChannel` (type: `integer`):

Maximum number of most recent messages to scrape per channel. Each page of the preview returns about 20 messages.

## `oldestMessageDate` (type: `string`):

Stop paginating when messages older than this ISO date (e.g. 2026-08-01) are reached. Leave empty to only use the max messages limit.

## Actor input object example

```json
{
  "channels": [
    "durov"
  ],
  "maxMessagesPerChannel": 20
}
```

# Actor output Schema

## `messagesDatasetUrl` (type: `string`):

Dataset containing one item per scraped Telegram message.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/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"] }

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/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"
  ]
}' |
apify call technicaldost/telegram-channel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaldost/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/xJlG0KTj25ZMYLEEm/builds/1iEgTYGmcPlekg9El/openapi.json
