# Telegram Channel Finder: Keyword to Public Channels (`themineworks/telegram-channel-finder`) Actor

Find public Telegram channels matching a keyword: handle, title and canonical t.me URL. Optional monitor mode bills only for new channels since the last run. No login, no bot token.

- **URL**: https://apify.com/themineworks/telegram-channel-finder.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 channel founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Finder: Keyword to Public Channels

> 🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate

> 💰 $3.00 / 1,000 results.

> ⚡ Keyword to public Telegram channels, with an optional standing watch for newly indexed ones. No bot token, no phone number, no login.

> 💸 A search that returns nothing is never billed.

Give it a keyword or phrase and get back matching public Telegram channels: handle, title and canonical t.me link. No login, no bot token, no API key.

### Why this doesn't depend on a third-party Telegram directory

The obvious approach is scraping one of the existing Telegram directory sites (TGStat, TGKit and similar) that already index channels by category and keyword. That was deliberately not the approach here: it makes this actor's uptime and accuracy dependent on a service we don't control staying online, keeping its layout stable, and continuing to index broadly. Telegram itself exposes no public keyword search without a bot token, but Google indexes public channel previews at `t.me/<channel>`, so a site-restricted search finds the same channels without that dependency, using the same search transport already proven on this actor's LinkedIn and company-lookup siblings.

### Input

- **query** (required): a keyword or phrase, e.g. `"artificial intelligence"` or a brand name.
- **maxResults**: caps how many channels come back. Default 20, maximum 100.
- **monitorMode**: turns this into a standing watch (see below).

### Example output

```json
{
  "handle": "durov",
  "url": "https://t.me/durov",
  "title": "Durov's Channel",
  "checked_at": "2026-08-30T00:00:00.000Z"
}
```

Invite links (`t.me/joinchat/...`, `t.me/+...`) are excluded on purpose: they point at private chats, not public channels, and don't resolve to a checkable public handle the way a channel does.

### Turning a keyword into a standing watch

A brand or research team tracking a topic on Telegram doesn't want the same channel list re-delivered and re-billed every time it checks in. Set **Monitor mode** to true, save the run as an Apify Task, then add that task to a Schedule with the same query each time. Every run after the first returns only channels not delivered in a previous run, so a daily or weekly watch bills only for what's genuinely new.

### Who this is for

Brand and market research teams tracking mentions or communities on Telegram around a topic, product or competitor. OSINT and research workflows that need a structured list of relevant public channels rather than Telegram's own in-app search. Anyone building a channel directory or monitoring dashboard that needs Telegram coverage alongside other platforms.

### Frequently asked questions

**Why isn't a private group or invite-only channel returned?** This only finds public channels Google has indexed at a `t.me/<handle>` URL. Private groups and invite links are excluded, since they don't resolve to a public handle to report.

**Does this need a Telegram account or bot token?** No. It performs a public web search and reads the results; it never connects to Telegram's own API.

**Why did a search return fewer channels than maxResults?** A narrow or unusual keyword may simply not have that many indexed public channels. The run log states how many were found.

**Can I search in a language other than English?** Yes, results depend on what Google has indexed for that term regardless of language.

**Does it return subscriber counts or post history?** No. Each row is the handle, title and canonical `t.me` link. To read a channel's posts, pass the handle to [Telegram Channel Scraper](https://apify.com/themineworks/telegram-channel-scraper).

### Pricing

| Event | Price | You pay when |
| --- | --- | --- |
| Channel found | $0.003 | A public channel matching your keyword is delivered |

**$3.00 per 1,000 channels.** Flat pricing, the same on every Apify plan. A search that returns nothing is never charged.

### Run it on a schedule

Monitor mode is what makes a schedule cheap here. With it on, every run after the first returns only channels that were not delivered before, so a weekly topic watch bills for genuinely new channels rather than the same list again.

1. Run it once with the input you want repeated, then click **Save as a task**
   so that exact input is attached to every future run.
2. In the Apify Console go to **Schedules** and create a new one, either a
   preset (hourly / daily / weekly) or a cron expression.
3. Save. It then runs unattended, billed the same pay-per-result way. Nothing
   is charged for the schedule existing.

### Use from Claude, ChatGPT & any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

```
https://mcp.apify.com/?tools=themineworks/telegram-channel-finder
```

Claude Desktop / Cursor config (token auth):

```json
{
  "mcpServers": {
    "telegram-channel-finder": {
      "url": "https://mcp.apify.com/?tools=themineworks/telegram-channel-finder",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Ask your agent: *"Find public Telegram channels about \[topic]."*

### Works well with

Find the channel here, then read its post history with
[Telegram Channel Scraper](https://apify.com/themineworks/telegram-channel-scraper).
If you are checking whether a brand or project has claimed the same handle elsewhere,
[Username Checker](https://apify.com/themineworks/username-checker) covers 13 other
platforms.

Keywords: Telegram channel finder, find Telegram channels by keyword, Telegram channel discovery, Telegram OSINT tool, Telegram market research, Telegram community tracking

# Actor input Schema

## `query` (type: `string`):

A keyword or phrase to find matching public Telegram channels for, e.g. "artificial intelligence" or "crypto trading".

## `maxResults` (type: `integer`):

Maximum channels to return. Default 20, maximum 100.

## `monitorMode` (type: `boolean`):

Run on a schedule and get ONLY channels not delivered in a previous run, so a standing keyword watch bills for new channels instead of the whole result set every time. Keep the query the same across runs.

## Actor input object example

```json
{
  "query": "artificial intelligence",
  "maxResults": 5,
  "monitorMode": false
}
```

# 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 = {
    "query": "artificial intelligence",
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/telegram-channel-finder").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 = {
    "query": "artificial intelligence",
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/telegram-channel-finder").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 '{
  "query": "artificial intelligence",
  "maxResults": 5
}' |
apify call themineworks/telegram-channel-finder --silent --output-dataset

```

## MCP server setup

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

```

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/Pl6qpKsmi5HlBhhPy/builds/gNFrQoh5hGMARijwL/openapi.json
