---
name: telegram-lead-finder
description: Find relevant Telegram channels, groups, and admins as prospects without scraping member lists. Uses TGStat, Telemetr.io, web search (site:t.me), and Telegram Bot API to discover communities by niche and identify contactable decision-makers. Use when looking for Telegram-based lead sources, influencer channels, community admins, or niche groups to join or advertise in. Supports adult and universal content niches.
context: |
  Stack context: Existing Telegram bot at ~/Desktop/TelegramApp/bot.py. Adult content platform (OnlyFans creators, adult tools). Target leads: content creators with Telegram channels, adult content community admins, agency buyers. Non-scraping methods only — no member list extraction, no Telethon bulk-contact.
allowed-tools:
  - WebSearch
  - WebFetch
  - Bash
  - Read
  - Write
argument-hint: "[niche/keyword] [goal: channels|admins|groups|advertisers] [count: default 20]"
---

# Telegram Lead Finder

Find Telegram channels, groups, and their contactable admins as prospects — using only legitimate, non-scraping methods.

## What "Not Scraping" Means Here

**Allowed:**
- Searching public channel/group directories (TGStat, Telemetr.io, tgchannels.org)
- Web search for `site:t.me` to surface invite links and public channels
- Reading public channel descriptions and admin @usernames (publicly posted)
- Telegram Bot API `getChat`, `getChatAdministrators` for groups your bot is in
- Telegram's native in-app search for channels/groups
- Finding admin contact links from channel "About" sections

**Not allowed:**
- Telethon/pyrogram member list extraction from groups
- Mass DM to extracted user IDs
- GetParticipants() calls on groups you joined solely to harvest contacts
- Any bulk export of group members

---

## Stage 1: Understand the Goal

Before searching, clarify:

1. **Niche** — what topic/vertical? (e.g., "OnlyFans creators", "adult content", "crypto traders", "fitness coaches")
2. **Goal** — what do you want from found channels?
   - `channels` — channels to advertise in or partner with
   - `admins` — channel admins to contact as prospects
   - `groups` — discussion groups to join and engage in legitimately
   - `advertisers` — channels already running paid promo posts (signals they spend on ads)
3. **Language** — Russian, English, Spanish, other? (TGStat is strongest for Russian-language Telegram)
4. **Size range** — micro (1k–10k), mid (10k–100k), large (100k+)?

---

## Stage 2: Search Methods (Run in Parallel)

### Method 1: TGStat Directory Search

TGStat indexes ~2M+ public Telegram channels/groups. Free for basic search, no auth required.

```
Search URL patterns:
https://tgstat.com/en/search/channels?q={keyword}&language=en
https://tgstat.com/en/search/channels?q={keyword}&language=ru
https://tgstat.com/en/category/18plus  (adult)
https://tgstat.com/en/category/blogs   (by category)
```

**Fetch and extract:** channel name, @username, subscriber count, ERR%, description, admin contact (if listed).

**WebFetch approach:**
```
Fetch: https://tgstat.com/en/search/channels?q={keyword}
Prompt: Extract channel names, @usernames, subscriber counts, and any admin contact info listed
```

### Method 2: Telemetr.io Search

Better engagement data and audience overlap. Free tier limited; API at $19/mo gives bulk access.

```
Search URL: https://telemetr.io/en/channels?search={keyword}
```

**Free**: Browse top results, extract channel names and stats.
**With API key**: `GET https://api.telemetr.io/v1/channels/search?q={keyword}&limit=50`

### Method 3: Web Search (site:t.me)

Finds channels/groups not in directories, plus invite links embedded in websites.

```python
# Queries to run via WebSearch:
queries = [
    f'site:t.me "{keyword}"',
    f'site:t.me "{keyword}" join',
    f'telegram channel "{keyword}" t.me',
    f'telegram group "{keyword}" join link',
    f'"{keyword}" telegram "https://t.me/"',
]
```

For adult niches, add platform-specific terms:
```python
adult_queries = [
    f'site:t.me onlyfans "{keyword}"',
    f'site:t.me "adult" "{keyword}" channel',
    f't.me "{keyword}" creator',
]
```

### Method 4: Telegram Bot API (Groups Your Bot Is In)

If the existing bot (`bot.py`) is a member of relevant groups, use the Bot API to surface admins:

```python
import requests

BOT_TOKEN = "..."  # from .env

def get_chat_admins(chat_id):
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/getChatAdministrators"
    resp = requests.get(url, params={"chat_id": chat_id})
    admins = resp.json().get("result", [])
    return [
        {
            "user_id": a["user"]["id"],
            "username": a["user"].get("username"),
            "first_name": a["user"].get("first_name"),
            "is_anonymous": a.get("is_anonymous", False),
        }
        for a in admins
        if not a.get("is_anonymous")
    ]
```

Non-anonymous admins with `@usernames` are contactable directly via Telegram DM.

### Method 5: Channel "About" Section Scraping

Public channels often list admin contact in their description:
- "DM @username for ads"
- "Contact: @adminname"
- "Advertising: t.me/adminusername"

When fetching channel pages via `t.me/{channel}`, extract these patterns with regex:
```python
import re

def extract_admin_contacts(description: str) -> list[str]:
    patterns = [
        r'@([a-zA-Z0-9_]{5,32})',           # @username mentions
        r't\.me/([a-zA-Z0-9_]{5,32})',       # t.me/username links
        r'(?:ads?|advert|promo|contact)[:\s]+@?([a-zA-Z0-9_]{5,32})',  # labeled contacts
    ]
    contacts = []
    for p in patterns:
        contacts.extend(re.findall(p, description, re.IGNORECASE))
    return list(set(contacts))
```

---

## Stage 3: Scoring and Filtering

For each found channel/group, score on:

| Signal | Score |
|---|---|
| Subscriber count in target range | +2 |
| ERR > 10% (high engagement) | +2 |
| Admin contact publicly listed | +3 |
| Channel posts regularly (last 7 days) | +2 |
| Channel already runs promo posts | +3 |
| Channel description matches niche tightly | +2 |
| Channel verified or verified admin | +1 |

**Priority tiers:**
- **Hot (10+)**: High engagement + contactable admin + active promo history → outreach immediately
- **Warm (6-9)**: Good fit, admin may be reachable → find contact then outreach
- **Cold (1-5)**: Low engagement or no contact path → add to watch list

---

## Stage 4: Output Format

```markdown
# Telegram Lead Research — [Niche] — [Date]

## Summary
- Channels found: [X]
- Hot leads (contactable admin + active): [X]
- Warm leads: [X]
- Total reach (combined subscribers): [X]

---

## Hot Leads

### 1. [@channel_name](https://t.me/channel_name)
**Subscribers**: [X]
**ERR**: [X]%
**Posts/week**: [X]
**Admin contact**: @adminusername
**Why hot**: [1-2 sentences — recent promo posts, high engagement, direct contact listed]
**Outreach angle**: [What to say — reference something specific from the channel]

---

## Warm Leads

[Same format, fewer details where contact not found]

---

## Next Steps
- [ ] DM top 5 hot lead admins with personalised offer
- [ ] Join [group name] legitimately — engage before pitching
- [ ] Run Telegram Ads targeting [@hot_channel_1] + [@hot_channel_2]
- [ ] Check Telemetr.io audience overlap between [channel A] and [channel B]
```

---

## Stage 5: Outreach to Channel Admins

Once admins are identified, use `cold-outreach-sequence` skill with Telegram DM as the platform.

**Telegram-specific adaptations:**
- Opening DM: keep to 3 lines max — Telegram DMs feel more casual than LinkedIn
- Reference something specific from their channel (a recent post topic, format, niche)
- Lead with value: ad placement offer, collab proposal, or free tool access
- No attachments on first contact — text only until they reply

**First DM template (ads/promo):**
```
Hi [name]! Noticed your channel [specific thing you noticed — recent post topic, growth, format].

I run [tool/page] — think your audience would find it relevant. Open to a promo placement this week?

Happy to share stats/rates if useful.
```

**First DM template (creator recruitment — e.g. Acaption/Ucaption users):**
```
Hi [name]! Love what you're doing with [channel topic].

I built [tool] for creators like you — [one-line value prop]. First month free if you want to test.

No strings, just want honest feedback from someone who gets the niche.
```

---

## Telegram Ads (Channel-Targeting Alternative)

For channels where admin is unreachable, use Telegram's native ad platform:

- **Platform**: ads.telegram.org (CPM-based, min €2 spend)
- **Target**: Specific channel subscribers by @handle
- **Format**: Sponsored messages — up to 160 chars, one CTA button
- **Best for**: Scale reach into verified audiences without needing admin contact
- **Adult content**: Telegram Ads allows adult-adjacent content with age-gating enabled on the channel

---

## Tools Reference

| Tool | Use | Auth needed |
|---|---|---|
| tgstat.com | Channel directory search, analytics | None (free basic) |
| telemetr.io | Channel search + audience overlap | None (free), API key ($19/mo) |
| `site:t.me` web search | Discover unlisted channels | None |
| Telegram Bot API | Get admins of groups bot is in | Bot token |
| ads.telegram.org | Run targeted channel ads | Telegram account |

---

## What Not to Do

- Do not use Telethon `GetParticipantsRequest` to extract group members — this is scraping, violates ToS, and results in account bans
- Do not purchase "Telegram member lists" from third-party tools (Fastlead, LeadSeeker, etc.) — these are scraped data, violate GDPR, and Telegram bans accounts that mass-DM cold users
- Do not DM non-admin users in groups you joined for prospecting — this triggers spam reports
- Do not join groups solely to harvest contacts — participate genuinely or leave
