# 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:** 3 total users, 1 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

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.

### Pricing

Pay per channel delivered. A search that returns nothing is never charged.

# Actor input Schema

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

A keyword or phrase to find matching public Telegram channels for.

## `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/jxoLWuY3f6KWb48UY/openapi.json
