# Telegram Scraper: Exact Views, Deleted Posts & Ads (`n1raxi/telegram-channel-scraper`) Actor

Scrape public Telegram channels and groups with no login or phone number. Get posts with exact views, search them by keyword, get channel statistics, catch deleted and edited posts, and check the ads you bought. Export to Excel, CSV, or JSON, or get alerts in Telegram.

- **URL**: https://apify.com/n1raxi/telegram-channel-scraper.md
- **Developed by:** [N1raxi](https://apify.com/n1raxi) (community)
- **Categories:** Social media, Lead generation, News
- **Stats:** 5 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.10 / 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 Scraper: Exact Views, Deleted Posts & Ads** exports posts and messages from public Telegram channels and
groups with no login, Telegram account, or phone number. It gives the exact view counts that Telegram's web page
rounds, reports the posts deleted or edited since your last run, and checks whether a channel kept the terms of the ad
you bought. Download Excel, CSV, or JSON, call it through the API, or get new posts in your Telegram.

| Login needed | Views | Accuracy | Price |
|---|---|---|---|
| None | Exact: 62,338 where the web shows *62.3K* | 754 posts, 14 fields each, all equal to Telegram's own pages | $2 per 1,000 posts |

**Quick start:** Click **Try for free**, then **Start**. The prefilled input returns the latest 20 posts of `durov` and
`telegram` in a few seconds, for about $0.08.

### What do you want to do?

Each **Try it** link opens a ready input. Costs are for the Apify Free plan.

| Task | What you get | Cost | Try it |
|---|---|---|---|
| Export a channel's history | Every post in a date range, one row each, with views, reactions, and media | $2 per 1,000 posts | [Export to Excel](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-history-export) |
| Monitor channels and keywords | Only the new posts that mention your words, also sent to your Telegram | $0.22 a month for hourly runs, plus $0.002 per post | [Monitor news channels](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-channel-monitor) |
| Search posts by keyword | The posts with your words, in channels found by a topic | $0.05 for 17 posts in 8 channels | [Search posts](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-keyword-mentions) |
| Check channels before buying ads | Exact subscribers, average views, reach, ad share, and contacts for ads | $0.10 for 20 channels | [Check channel stats](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-channel-statistics) |
| Catch deleted and edited posts | Each change with the text before and after | $0.004 per change | [Track changes](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-deleted-edited-posts) |
| Check an ad you bought | Whether the channel kept the 1/24 or 2/48 terms, and the ad's views | $0.004 per check | [How it works](#how-to-track-telegram-ads-and-check-placements-124-248) |
| See who advertises where | One row per advertiser with its channels, dates, and views | $0.004 per advertiser | [See advertisers](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-advertisers) |

### How does it compare with other Telegram scrapers?

| | Typical Telegram scraper | This Actor |
|---|---|---|
| Views over 999 | Rounded as the web shows them, sometimes read as `1` for *1.2K* | Exact with **Exact views and forwards** on, otherwise rounded and marked as rounded |
| Forwards | Often missing | The exact count, with exact numbers on |
| Deleted and edited posts | An "edited" flag at most | Each change, with the text, links, and media before and after |
| Ad posts | Rarely detected | Detected in 50 languages, with where each ad leads and a summary by advertiser |
| Ad placement checks (1/24, 2/48) | Not offered | The next post, an early deletion, any edit, and views at 1, 24, and 48 hours |
| A reply to another post | Sometimes the quoted post's text | The reply's own text |
| An album of 10 photos | Sometimes 10 rows, each paid | One row with all 10 |
| A group, a bot, or a mistyped name | Often an empty row you pay for, or a wrong count | The group's messages, or a free status row that says what the name is |
| Only new posts on a schedule | Often a date you move yourself | Remembered between runs, with none missed or repeated |

*Based on the Store pages of the 25 most used Telegram channel and group scrapers on Apify (October 17, 2026) and on
test runs of popular ones in October 2026, with each field checked against Telegram's own pages.*

#### Why are some views rounded?

Telegram's web page rounds views above 999, so *12.3K* is all it shows. Turn on **Exact views and forwards** to get
12,345. The Actor reads the exact numbers through its own Telegram accounts, so you need none. If they are busy, a post
keeps the rounded number with `viewsExact: false`, the run's status and a status row say how many posts, and those
posts cost the ordinary price, not the price with exact numbers.

### What can this Telegram scraper do?

#### How to scrape and export a Telegram channel or group

Every post of a channel, from the latest ones to a date range or its full history: text, exact views and forwards,
reactions, media, language, and links. Public groups work the same way, and their messages come with their senders.

```json
{ "channels": ["WatcherGuru", "France24_fr", "bbcpersian"], "from": "7 days", "exactCounts": true }
```

| Channel | Date (UTC) | Text | Views | Forwards | Reactions | Language |
|---|---|---|---|---|---|---|
| WatcherGuru | 2026-10-10 04:00 | One year ago today, crypto suffered its largest liquidation event in history... | 62,338 | 578 | 1,220 | en |
| France24_fr | 2026-10-10 07:48 | Un puissant séisme au Panama fait des blessés et d'importants dégâts | 802 | 2 | 4 | fr |

Try it: [Scrape Telegram channel posts](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-channel-scraper),
[Export a channel's history to Excel](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-history-export),
[Scrape group messages](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-group-messages).

#### How to search Telegram posts by keyword

Telegram has no public search of all posts, so the Actor searches where your topic is: the channels you list, the
channels it finds by a topic in their names, a whole niche of related channels, or a hashtag across all of Telegram.
Every post it returns contains your words.

```json
{ "searchChannels": ["crypto news"], "searchMinSubscribers": 10000, "keywords": ["ETF"], "from": "7 days" }
```

One run found 8 channels named "crypto news" with 10,000 subscribers or more and returned the 17 posts of the week
that say "ETF," such as this one:

| Channel | Date (UTC) | Text | Views |
|---|---|---|---|
| CoinDeskGlobal | 2026-10-08 11:15 | Bitcoin ETF investors head for the exit, and it's the biggest rush in months | 630 |

Keywords match whole words in any letter case: `bitcoin*` also finds "bitcoins," and `SEC + ETF` requires both words.
Try it: [Search posts by keyword](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-keyword-mentions).

#### How to monitor Telegram channels and keywords

Save the input as a task with a schedule, and each run returns only the new posts that mention your words. Add your
bot's token in **Telegram bot token**, and your own bot sends them to your Telegram.

```json
{ "channels": ["whale_alert_io", "CoinDeskGlobal", "binance_announcements"], "keywords": ["binance", "coinbase"], "onlyNew": true }
```

| Channel | Date (UTC) | Text | Keyword |
|---|---|---|---|
| whale_alert_io | 2026-10-10 09:57 | 700 $BTC (57,979,730 USD) transferred from #Antpool to #Binance | binance |
| CoinDeskGlobal | 2026-10-08 15:43 | U.S. government moves $1 billion in bitcoin from Bitfinex hack wallet... | coinbase |

Try it: [Monitor crypto news channels](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-channel-monitor).

#### How to find Telegram channels and check their statistics

A channel finder and Telegram channel analytics for ad buyers and researchers: find channels by a topic in their
names, or the channels similar to one you know. Each channel gets one row: exact subscribers, average views, reach,
posting frequency, share of ads, contacts for advertising, and growth.

```json
{ "searchChannels": ["crypto news"], "searchMinSubscribers": 10000, "profiles": true, "maxPostsPerChannel": 0 }
```

| Channel | Subscribers | Average views | Reach | Posts a day |
|---|---|---|---|---|
| walt_news | 3,436,488 | 123,780 | 3.6% | 0.8 |
| cointelegraph | 331,592 | 7,243 | 2.2% | 14.5 |
| ZoomerfiedNews | 22,526 | 9,347 | 41.5% | 0.8 |

Reach is a post's average views as a share of subscribers: ZoomerfiedNews has 15 times fewer subscribers than
cointelegraph, yet more views per post. Try it:
[Find crypto channels with 10,000+ subscribers](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-channel-search),
[Check channel stats before buying ads](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-channel-statistics),
[Find similar channels](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-similar-channels).

#### How to see deleted and edited posts in a Telegram channel

On scheduled runs, you get a row for every post deleted or edited since the previous run, with its content before and
after the change.

```json
{ "channels": ["abualiexpress", "suspilnenews", "bbcpersian", "France24_fr"], "watchChanges": true }
```

| Channel | Post | Before | After | Edited between (UTC) |
|---|---|---|---|---|
| abualiexpress | [131665](https://t.me/abualiexpress/131665) | ...אבו מאזן חתם על צו שדוחה את הבחירות... | ...אבו מאזן חתם על צו נשיאותי שדוחה את הבחירות... | 13:33 and 14:28 |

The author added one word: "a decree" became "a presidential decree." In the same hour, the channel's site updated a
"comments" counter under a link in 5 other posts, and those are not reported as edits. A deleted post comes with what it
said and between which runs it was deleted. Try it:
[Track deleted and edited posts in news channels](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-deleted-edited-posts).

#### How to track Telegram ads and check placements (1/24, 2/48)

Ads in Telegram channels are sold in formats such as **1/24**: 1 hour at the top of the channel, with no newer post
above it, and 24 hours in the channel before it may be deleted. The Actor tells you whether the channel kept your deal:
did it post again during your hours at the top, delete the ad early, or change its link, and how many views the ad got.

```json
{ "channels": ["https://t.me/channel_one/1234 1/24", "https://t.me/channel_two/5678 2/48"] }
```

- **An ad already published:** Run once. The next post's time comes from the channel's page to the minute, so you see
  at once whether the channel kept your hours at the top and whether the ad is still there.
- **A new ad:** Save the input as a task and schedule it every hour from the moment the ad goes out. Each run updates
  the ad's row in the **Tracked posts** table for 48 hours, or for the format's time if longer, with the views at 1, 24,
  and 48 hours, an early deletion, and any edit, such as a swapped link. Add a Telegram bot token to get a message when
  the terms are broken.

Four real ad posts, 3 to 4 days old, checked in one run against the 1/24 format (channel names hidden):

| Ad post | Views | Next post in the channel | Verdict for 1/24 |
|---|---|---|---|
| News channel A | 32,900 | 93 min later | `kept` |
| Finance channel B | 17,300 | 179 min later | `kept` |
| News channel C | 716,000 | 20 min later | `violated` |
| News channel D | 78,900 | 13 min later | `violated` |

`violated` comes with the reason, for example "Format 1/24 violated: the channel posted again 20 min later, within the
1 h at the top." `unclear` means the ad was deleted between two checks close to the end of its time, and `pending`
means tracking is still running and the terms are kept so far.

#### See who advertises in Telegram channels

Turn on **Advertiser summary**, with **Ad posts** set to **Only ad posts** and a date range, to get one row per
advertiser with the site, app, or channel the ads lead to, where and when they ran, and their views. Ads are detected in 50
languages, from `#ad` and `#sponsored` to labels such as *Anzeige*, *Publicidad*, and *Reklama*. From a real run over
12 channels and a week:

| Advertiser | Channels | Ads | Views |
|---|---|---|---|
| wuling-uzbekistan.uz | Daryo, kunuzofficial | 2 | 355,200 |
| Telegram channel "Халява з Алі" (75,012 subscribers) | truexanewsua | 2 | 1,237,000 |
| @if_lms_bot | if_stocks | 3 | 50,100 |

Try it: [See which brands advertise in news channels](https://apify.com/n1raxi/telegram-channel-scraper/examples/telegram-advertisers).

### More features

| Feature | What you get |
|---|---|
| Comments | The number of comments on each post, or every comment with its text, sender, and reactions |
| Hashtags across Telegram | Posts with a hashtag from all public channels, not only yours |
| Related channels | The channels a channel forwards from and mentions, and the ones Telegram lists as similar, up to 3 steps away |
| Who published first | The same news across several channels: who had it first, and who forwarded, copied, or retold it and how many minutes later |
| Media downloader | Photos, videos, and voice messages saved to your run's storage, with links that keep working |
| Filters | Excluded words, languages, ads, forwards, minimum views, and content types |
| Two output formats | Compact, one flat row per post for spreadsheets, or full, with every detail and the text in Markdown or HTML on request |

### How much does it cost to scrape Telegram?

You pay only for results. On the Free plan a post costs $0.002, and paid Apify plans pay less, down to $1.10 per 1,000
posts on Business. Exact numbers, comments, profiles, and media files cost extra only when you turn them on.

| Price per 1,000 | Free | Starter | Scale | Business |
|---|---|---|---|---|
| Posts or group messages | $2.00 | $1.80 | $1.50 | $1.10 |
| Posts with exact views and forwards (every post found by hashtag) | $3.00 | $2.70 | $2.25 | $1.65 |
| Comments | $1.00 | $0.90 | $0.75 | $0.55 |
| Channel profiles, advertisers, deleted or edited posts, ad checks, and stories | $4.00 | $3.60 | $3.00 | $2.20 |
| Media files saved | $10.00 | $9.00 | $7.50 | $5.50 |

A search by channel name that finds channels costs $0.02, and each run has a start fee of $0.0003. What some runs cost
on the Free plan:

| Run | Cost |
|---|---|
| 1,000 posts | $2.00, or $3.00 with exact views and forwards |
| Monitoring 5 channels every hour for a month, about 3,000 new posts | $6.22 |
| Profiles of 100 channels | $0.40 |
| A new ad checked every hour for 48 hours | $0.19, plus the runs' start fees |

#### Is there a free Telegram scraper?

Apify gives every account $5 of usage each month, with no credit card required. That covers about 2,500 posts a month,
and every feature works on the Free plan, so you can check the data before you pay.

#### How do I keep a run within budget?

Set a maximum cost in the run options: the Actor stops exactly there and keeps what it has read, and a status row says
which inputs were left. Status rows, duplicates, posts outside your dates, the final report of a tracked ad, and alerts
are free.

### How to use it

1. In **Channels**, enter public channels or groups, one per line. Any form works: `durov`, `@durov`, `t.me/durov`, or
   a full link. A link to a single post returns that post.
2. Optionally add **Keywords**, **Date from** and **Date to**, or **Max posts per channel**. Without them, you get the
   latest 20 posts of each channel.
3. Open the sections below the main fields, such as **Filters**, **Monitoring**, or **Ad tracking**, only if you need
   them. Each one says what it does.
4. Click **Start**. Results appear in the **Output** tab, ready to download as Excel, CSV, or JSON.
5. To follow channels, save the input as a task, turn on **Only new posts**, and add a schedule, for example every hour.

### Results

Each row has a `type`: `post`, `message` (a group message), `comment`, `profile`, `change` (a deleted or edited post),
`tracking` (an ad check), `story`, `advertiser`, or `status`. The **Output** tab shows each type in its own table, and
the **Output** tab of this page describes every field. A post in the compact format:

```json
{ "type": "post", "channel": "WatcherGuru", "channelSubscribers": 628766, "date": "2026-10-05T18:19:44.000Z",
  "text": "JUST IN: Gemini crypto exchange co-founder Tyler Winklevoss...", "language": "en", "views": 4040,
  "forwards": 41, "reactionsTotal": 53, "links": "", "mediaUrls": "https://cdn4.telesco.pe/file/...",
  "hasPhoto": true, "hasVideo": false, "ad": null, "matchedKeywords": "", "url": "https://t.me/WatcherGuru/15363" }
```

The full format adds reactions by emoji, media with their types and sizes, link previews, polls, forwards, replies,
hashtags, mentions, and buttons.

- `viewsExact` is true when `views` is exact, and false when it is rounded as on the web.
- `forwards` comes only with **Exact views and forwards**, since Telegram's web page does not show it.
- `comments` is null when a channel has comments turned off, and 0 when there are none yet.

### Export, integrations, and API

- **Download:** On the **Output** tab, choose Excel, CSV, JSON, XML, or HTML. Apify's Excel export drops emoji, so
  choose CSV or JSON to keep them. For spreadsheets, choose the compact format or download a single table.
- **Google Sheets, Slack, Make, Zapier, n8n, and webhooks:** Connect them on the **Integrations** tab of your task, and
  each run sends its results when it ends. With **Only new posts** on, that is only the posts published since the
  previous run.
- **Telegram bots:** Alerts come from your own bot, and your bot or app can also start runs through the API.

#### Telegram scraper API for Python and JavaScript

Start a run from your code and read its results as JSON. The input is the JSON shown above, and the **API** tab of
this page has ready requests for every language and the command line.

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("n1raxi/telegram-channel-scraper").call(run_input={"channels": ["durov"], "from": "7 days"})
posts = client.dataset(run["defaultDatasetId"]).list_items().items
```

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('n1raxi/telegram-channel-scraper').call({ channels: ['durov'], from: '7 days' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

To get one table, add `view` to the dataset request, for example `view=posts` or `view=channels`.

#### Use it from AI agents (MCP)

AI assistants and agents that support MCP, such as Claude, Cursor, and VS Code, can run this Actor through Apify's MCP
server. Add `https://mcp.apify.com?tools=n1raxi/telegram-channel-scraper` as a server, sign in to Apify, and ask in plain
words:

- *Get this week's posts from @WatcherGuru with exact views.*
- *Find crypto news channels with over 10,000 subscribers and compare their reach.*
- *Which brands advertised in @Daryo and @kunuzofficial this week?*

The agent fills in the input and reads the results. Runs cost the same as from the Console.

### FAQ

#### Do I need a Telegram account, a phone number, or an API key?

No. The Actor reads Telegram's public web pages. Exact views and forwards, hashtags, search by name, and similar
channels come from the Actor's own Telegram accounts, so you need none. You only need an Apify account.

#### How do I export Telegram channel messages to Excel or CSV?

Enter the channel, set **Date from** (for example `2026-01-01`) or leave it empty for the latest posts, and click
**Start**. In the **Output** tab, download the results as Excel, CSV, or JSON.

#### Can it scrape private channels, groups, or member lists?

No. It reads only public channels and groups that anyone can open on the web. Groups that hide their history from
non-members return no messages (`preview_disabled`), and groups Telegram itself does not show get Telegram's reason
(`restricted`). Member lists and phone numbers are never collected.

#### How do I get alerts in my Telegram?

Create a bot with [@BotFather](https://t.me/BotFather), paste its token into **Telegram bot token**, then open your bot
and press **Start**. Monitoring runs send each new post (with keywords, only the matching ones), each deleted or edited
post, and ad tracking news, up to 30 messages per run.

#### What are the limits?

Up to 20,000 posts per channel and 1,000 per hashtag in a run, 20 channels per search by name, and the newest 50,000
posts of a run for **Who published first**. A run lasts up to one hour unless you raise its timeout, and if it stops
early, it returns what it has read with a status row that says so. Deleted and edited posts are tracked in channels,
not in groups. Telegram's own media links expire within hours, so turn on **Download media files** to keep them, and
videos larger than about 12 MB are not on the web.

#### Is it legal to scrape Telegram?

The Actor collects only what Telegram shows publicly on the web. Public posts can still contain personal data, which
laws such as the GDPR protect, so use the results for a legitimate purpose. If you are unsure, ask a lawyer. This
Actor is not affiliated with or endorsed by Telegram.

#### Something does not work?

Look at the status rows first. Each one says what happened to an input and what to do. If that does not help, open an
issue on the **Issues** tab with a link to your run, and we will answer quickly.

### More from this developer

- [App Store & Google Play Reviews Scraper](https://apify.com/n1raxi/app-reviews-scraper): every review of any iOS or
  Android app, with the whole history of each country and language.

# Actor input Schema

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

Public channels or groups, one per line or separated by commas. Any form works: <code>durov</code>, <code>@durov</code>, <code>t.me/durov</code> or a full link. A link to a single post, such as <code>https://t.me/durov/548</code>, returns that post. A name that is not a channel (a bot, a user, a missing name) gets a status row that explains why. Leave empty if you only search by name or hashtag.

## `keywords` (type: `array`):

Return only the posts of your channels that contain at least one of these words or phrases. Matching ignores letter case and finds whole words only. Add <code>*</code> to match word endings: <code>bitcoin*</code> also finds "bitcoins". Use <code>+</code> to require all words: <code>bitcoin + ETF</code>. Post text, polls and file names are searched. Leave empty to get all posts.

## `from` (type: `string`):

Return posts published at or after this time (UTC). Use a date (<code>2026-10-01</code>), a date and time (<code>2026-10-01T08:00:00Z</code>), <code>today</code>, <code>yesterday</code>, or a period back from now (<code>6 hours</code>, <code>7 days</code>, <code>1 month</code>).

## `to` (type: `string`):

Return posts published before this time (UTC), in the same formats as Date from. A date alone means the end of that day, so <code>yesterday</code> in both fields returns all of yesterday's posts. Old periods are found directly, without reading all newer posts.

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

Maximum number of posts (or group messages) to return per channel, newest first. With filters, only matching posts count. Leave empty to get every post in the date range, every new post when monitoring, or otherwise the latest 20. Set 0 to return profiles only. Up to 20,000 per run.

## `onlyNew` (type: `boolean`):

For scheduled runs. Each run returns only the posts published since the previous run, oldest first, so nothing is missed or repeated. The first run returns the latest posts.

## `excludeKeywords` (type: `array`):

Skip posts that contain any of these words or phrases. Same rules as Keywords, for example <code>giveaway</code> or <code>airdrop\*</code>.

## `searchPreviews` (type: `boolean`):

Also look for keywords and excluded keywords in the title and description of the page a post links to. Useful for posts that contain only a headline and a link.

## `ads` (type: `string`):

Posts the channel marks as ads, detected in 50 languages: ad hashtags such as <code>#ad</code> or <code>#sponsored</code>, and labels such as "Sponsored", "Anzeige" or "Publicidad". The <code>ad</code> field of each ad post shows the label and where the ad leads.

## `forwards` (type: `string`):

Posts the channel forwarded from other chats.

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

Return only posts with at least this many views. With Only new posts, each post is checked once, when it is first read.

## `content` (type: `array`):

Return only posts that contain any of the selected types. Leave empty for all posts.

## `languages` (type: `array`):

Return only posts written in these languages. Use language codes or names, for example <code>en</code>, <code>es</code> or <code>Arabic</code>. Posts with too little text to detect a language are excluded. Related channels that mostly post in other languages are skipped.

## `output` (type: `string`):

Full returns every field and suits developers and analysis. Compact returns about 15 columns per post (channel, subscribers, date, text, language, views, forwards, reactions, comments, links, media, ad, keywords, link), ready for Excel, Google Sheets and integrations.

## `formattedText` (type: `array`):

Also return the post text with its formatting and inline links. Markdown suits websites and notes. HTML uses Telegram's formatting, ready for a bot to repost. The plain text is always included.

## `exactCounts` (type: `boolean`):

Off by default. Turn on to get exact view counts (12,345 instead of 12.3K) and forward counts, read through the Actor's own Telegram accounts. Posts with exact numbers cost more. When off, or when an exact count is not available, views are the rounded numbers Telegram shows on the web, marked with <code>viewsExact: false</code>, and forwards are empty: the web does not show them.

## `comments` (type: `string`):

Count returns the number of comments on each post. Collect also returns each comment as a separate row with its text, sender, date and reactions. A post of a channel with comments turned off gets no count; 0 means comments are on and there are none yet.

## `maxCommentsPerPost` (type: `integer`):

When collecting comments, the maximum number of the latest comments per post. Leave empty for all.

## `downloadMedia` (type: `boolean`):

Save photos, videos, voice messages and stickers to the run's storage and add a link to each saved file. Files are kept for as long as your Apify plan keeps run data. Telegram's own media links expire within hours. Videos larger than about 12 MB are not available on the web and cannot be saved.

## `searchChannels` (type: `array`):

Words that appear in channel names, for example <code>crypto news</code> or <code>noticias Argentina</code>. For each entry, up to 20 matching public channels and groups are found and scraped like the channels in Channels. Each search that finds channels is charged.

## `searchMinSubscribers` (type: `integer`):

Return only channels and groups found by name with at least this many subscribers or members. Leave empty for all.

## `hashtags` (type: `array`):

Find posts with these hashtags in all public Telegram channels, not only in your channels, for example <code>#bitcoin</code>. These posts always include exact views and forwards. The date range, filters and Only new posts apply. Max posts per channel sets the number of posts per hashtag.

## `watchChanges` (type: `boolean`):

Each run checks recent posts again and returns a <code>change</code> row for every post deleted or edited since the previous run, with its content before and after. Turns on Only new posts. Works for channels, not groups.

## `watchHours` (type: `integer`):

How long after publication each post is checked for deletions and edits.

## `profiles` (type: `boolean`):

Add a profile row for each channel, group or bot. For channels: exact subscribers, average and median views, engagement, posting frequency, best hours and days, content mix, top posts, ad share and advertisers, contacts for ads, and growth since earlier runs. For groups: members and members online. For bots: monthly users.

## `profilePosts` (type: `integer`):

How many of each channel's latest posts are used to calculate its profile statistics.

## `relatedChannels` (type: `integer`):

For each channel, also profile up to this many related channels: the ones it forwards from and mentions most, then the ones Telegram lists as similar. Useful for finding competitors and ad partners. Set 0 to turn off.

## `relatedDepth` (type: `integer`):

1 finds the related channels of your channels. 2 and 3 also find the related channels of those, to map a whole niche.

## `relatedMinSubscribers` (type: `integer`):

Skip related channels with fewer subscribers. Skipped channels are not charged.

## `relatedPosts` (type: `boolean`):

Also return the posts of related channels, with the same keywords, dates and filters. Useful for following keywords across a whole niche.

## `trackPosts` (type: `boolean`):

Check the post links in Channels on every run: views at 1, 24 and 48 hours, early deletion, other posts during the hours at the top, and changes to the text or links. Add the ad format after a link, for example <code>https://t.me/channel/123 1/24</code>, or set it below. Schedule the task to run every hour.

## `adFormat` (type: `string`):

Default format for tracked posts: hours at the top / hours in the channel, for example <code>1/24</code> or <code>2/48</code>. Setting it turns on ad tracking.

## `advertisers` (type: `boolean`):

Add one row per advertiser found in the ad posts: the site, app or channel advertised, where and when the ads ran, and their views. Works best with Ad posts set to Only ad posts and a date range.

## `stories` (type: `boolean`):

Group the run's posts into stories, each one piece of news covered by several channels, and show who published it first, who forwarded or copied it, and how many minutes later. Use with several channels and a date range. The newest 50,000 posts of a run are grouped.

## `telegramBotToken` (type: `string`):

Create a bot with <a href='https://t.me/BotFather' target='_blank'>@BotFather</a> (send it /newbot), paste its token here, then open your bot and press Start. Works with Only new posts, Report deleted and edited posts, or Track ad posts: you get each new post, each deleted or edited post, and ad tracking news, up to 30 messages per run.

## `telegramChat` (type: `string`):

Where to send alerts. Leave empty to use the chat that last messaged the bot (you, after pressing Start). You can also enter a chat ID, or the @name of a group or channel where the bot is a member or admin.

## `searchDepth` (type: `integer`):

When filters are set without Date from: how many of each channel's latest posts are searched. With Date from, every post in the range is searched. You pay only for the posts returned.

## `stateName` (type: `string`):

Each saved task remembers its progress automatically. Set a name only to share progress between tasks, or to keep two monitors in one task apart. Use lowercase letters, digits and hyphens.

## `proxyConfiguration` (type: `object`):

Usually not needed. Turn on Apify Proxy only if requests are blocked, or if a run reads hundreds of channels.

## Actor input object example

```json
{
  "channels": [
    "durov",
    "telegram"
  ],
  "keywords": [],
  "onlyNew": false,
  "excludeKeywords": [],
  "searchPreviews": false,
  "ads": "include",
  "forwards": "include",
  "minViews": 0,
  "content": [],
  "languages": [],
  "output": "full",
  "formattedText": [],
  "exactCounts": false,
  "comments": "none",
  "downloadMedia": false,
  "searchChannels": [],
  "hashtags": [],
  "watchChanges": false,
  "watchHours": 24,
  "profiles": false,
  "profilePosts": 50,
  "relatedChannels": 0,
  "relatedDepth": 1,
  "relatedMinSubscribers": 0,
  "relatedPosts": false,
  "trackPosts": false,
  "advertisers": false,
  "stories": false,
  "searchDepth": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All rows of the run. The tables (Posts, Comments, Profiles and others) show the columns of each row type.

## `mediaFiles` (type: `string`):

Photos, videos, voice messages and stickers saved when Download media files is on.

# 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("n1raxi/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("n1raxi/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 n1raxi/telegram-channel-scraper --silent --output-dataset

```

## MCP server setup

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