Telegram Channel Finder: Keyword to Public Channels
Pricing
from $3.00 / 1,000 channel founds
Telegram Channel Finder: Keyword to Public Channels
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.
Pricing
from $3.00 / 1,000 channel founds
Rating
5.0
(1)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
4
Monthly active users
a day ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors. This actor ranks #2 for "telegram channel finder" in Apify Store search.
Type a keyword or phrase, such as artificial intelligence, crypto trading or a brand name, and get back the public Telegram channels that match it: each channel's handle, its t.me link and its title. No Telegram account, no bot token and no third party Telegram directory.
Why choose this actor?
- Channels that really match your words. Search engines pad thin results with loosely related pages. This actor keeps a channel only when every word of your search appears in its title, description or link. In a 1 October run for
crypto trading, 3 channels came back in 13 seconds and 2 near misses were left out, uncharged. A nonsense search returns nothing and charges nothing. - $3 per 1,000 channels on every plan, and a standing watch that bills only new ones. Turn on
monitorModeand scheduled runs deliver and charge only channels your account has not received before. - No Telegram login, bot token or directory site. Telegram has no public keyword search, so the actor searches Google's index of public
t.mechannel pages (with Brave as a backup), using Apify's proxies, which are included in the price.
Part of The Mine Works Social media and video family: Threads Scraper, Reddit Scraper, Threads Search Scraper, Instagram Profile Scraper, Instagram Followers & Following, Reddit Search Scraper.
Try it in one minute
Paste this into the JSON tab of the input page and press Start. It returns up to 10 channels in well under a minute.
{"query": "artificial intelligence","maxResults": 10}
query is the only required input: one keyword or phrase, in any language, the way you would type it into a search box. Every word must show up in a channel's title, description or link for it to be returned, so fewer, more distinctive words find more channels. fintech OR insurtech finds channels with either word, and a word with a minus sign in front (-scam) is passed to the search as an exclusion.
Apify's free plan includes $5 of credit every month, which covers about 1,500 channels at this actor's price ($3.00 per 1,000 channels on every plan, plus the $0.005 start fee on each run, in runs of 20).
Copy to your AI assistant
themineworks/telegram-channel-finder on Apify. Finds public Telegram channels matching a keyword by searching Google's index of t.me pages (Brave as backup) and returns one row per channel with handle, url (https://t.me/<handle>), title and checked_at. A channel is returned only if every search word appears in its title, description or link. Call ApifyClient("TOKEN").actor("themineworks/telegram-channel-finder").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: query (string). Optional: maxResults (integer 1 to 100, default 20; one run reads at most 5 search pages, so about 50 channels at most), monitorMode (boolean, default false: deliver and charge only channels this account has not received before). Rows with _type "summary" or "info" are run reports and are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~telegram-channel-finder/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- Every-word match on each result. Common short words (a, the, of, for and so on) are ignored, plurals are matched (
signalsfindssignal), and a word of 5 or more letters also counts when it is joined to others in a handle, such ascryptonewsfornews. A result that misses a word is skipped and counted in the summary asnot_matching_skipped. - Public channels only. Private invite links (
t.me/joinchat/...andt.me/+...), sticker packs and share links are dropped, so every row names a public handle you can open. - Up to about 50 channels per run. The actor reads up to 5 pages of search results, about 10 results each, and stops early when a page brings no new matching channel.
- Each channel once. Handles are compared without regard to case (
t.me/Fooandt.me/fooare one channel), and a channel Google lists several times under the same title and description is opened only once. - Monitor mode. Remembers up to 50,000 channel handles delivered to your account and skips them on later runs.
- Bounded cost per run. The actor stops searching early if the search pages it has paid for are not turning into channels, and returns what it found.
How to use it
Basic: channels about a topic
{"query": "artificial intelligence","maxResults": 20}
A 30 September run of this search (with maxResults: 5) returned 5 channels in 21 seconds from a single page of search results, including artificial_intelligence_in, datasciencefree and aipost.
Several topics
Each run takes one query. For several topics, start one run per topic from the API (they can run in parallel) or save each as its own task:
from apify_client import ApifyClientclient = ApifyClient("TOKEN")for q in ["crypto trading", "forex signals", "stock market india"]:run = client.actor("themineworks/telegram-channel-finder").call(run_input={"query": q, "maxResults": 30})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if "_type" not in row:print(q, row["handle"], row["url"], row.get("title"))
To cover two spellings in one run, use OR: {"query": "fintech OR insurtech"} returns channels that match either word.
Brand watch: new channels using your name
{"query": "YourBrand","maxResults": 50,"monitorMode": true}
Replace YourBrand with your brand or product name, save it as a task, and schedule it daily or weekly (for example 0 9 * * 1). The first run delivers every channel found; later runs deliver and charge only channels your account has not received before, so you see new fan groups, resellers or impersonators as they appear.
Community research for a market or niche
{"query": "real estate dubai","maxResults": 50}
Use the handles to pick channels to follow, then pull their recent posts with our Telegram Channel Scraper, which reads public channel posts, views and links.
OSINT: map the channels around a topic
{"query": "airdrop -scam","maxResults": 50}
The minus sign excludes results that mention the word. Combine several narrow searches rather than one broad one: each run reads at most 5 pages of results, so narrow searches together reach more distinct channels.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
query | string | required (form prefill: artificial intelligence) | A keyword or phrase. Every word, apart from common short words, must appear in a channel's title, description or link. Supports OR and -word. |
maxResults | integer (1 to 100) | 20 (form prefill: 5) | Most channels to return. One run reads at most 5 pages of search results, so in practice a run returns up to about 50. |
monitorMode | boolean | false | true delivers and charges only channels your account has not received from this actor before. |
"Form prefill" values fill the Console form for you but are not defaults: an API call without maxResults asks for 20.
What data do you get?
One row per channel, with 4 fields:
handle: the channel's public username, as written in its link (case kept, such asBeInCryptoCommunity).url: the channel's canonical link, alwayshttps://t.me/<handle>.title: the channel's title as the search result shows it. Long titles can be cut short with..., and a channel whose result shows no title comes back as@handle.checked_at: ISO timestamp when the row was produced.
The actor does not open Telegram itself, so it does not report subscriber counts or posts. For those, feed the handles into our Telegram Channel Scraper, which returns each channel's subscriber count and its recent posts with views and links.
Each run also ends with a _type: "summary" row and a _type: "info" row. The summary has query, found (channels delivered), already_delivered (skipped by monitor mode), not_matching_skipped (results left out for missing a search word), duplicate_results_not_opened, search_requests, search_refused, and per engine counters under google_search, brave_search and engine_pages. Neither row is a channel and neither is ever charged. Skip rows that have a _type field when you load the data.
Stable fields for automations
All 4 channel fields were present in every channel row we sampled (8 rows from two runs on the current build):
| Field | What it holds |
|---|---|
handle | Public Telegram username of the channel |
url | https://t.me/<handle> |
title | Channel title from the search result |
checked_at | ISO timestamp when the row was produced |
We will not rename these fields. New fields may be added over time; existing ones keep their names.
Output examples
Real rows from runs of the current build.
From the 30 September run for artificial intelligence:
{"handle": "artificial_intelligence_in","url": "https://t.me/artificial_intelligence_in","title": "Artificial Intelligence","checked_at": "2026-09-30T14:40:13.058Z"}
A title cut short by the search result, from the same run:
{"handle": "datasciencefree","url": "https://t.me/datasciencefree","title": "Machine Learning & Artificial Intelligence | Data Science ...","checked_at": "2026-09-30T14:40:13.402Z"}
A result with no title shown, returned as the handle:
{"handle": "Artificial_Intelligence_AI","url": "https://t.me/Artificial_Intelligence_AI","title": "@Artificial_Intelligence_AI","checked_at": "2026-09-30T14:40:13.255Z"}
From the 1 October run for crypto trading:
{"handle": "BeInCryptoCommunity","url": "https://t.me/BeInCryptoCommunity","title": "BeInCrypto Trading Community","checked_at": "2026-10-01T09:02:44.755Z"}
The summary row of that run (never charged; per engine detail trimmed), showing 2 results left out for missing a search word:
{"_type": "summary","query": "crypto trading","found": 3,"already_delivered": 0,"not_matching_skipped": 2,"duplicate_results_not_opened": 0,"search_requests": 1,"search_refused": 0,"engine_pages": { "google_pages": 1, "brave_pages": 0, "brave_after_google_failed": 0 },"spend_guard_tripped": false,"scraped_at": "2026-10-01T09:02:45.268Z"}
Pricing
Pay per event: you pay for each channel delivered to your dataset, plus a small start fee per run. The channel price is the same on every Apify plan.
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
channel-found, per channel | $0.003 | $0.003 | $0.003 | $0.003 |
channel-found, per 1,000 channels | $3.00 | $3.00 | $3.00 | $3.00 |
apify-actor-start, per run | $0.005 per GB of run memory, minimum one event | same | same | same |
The start fee, exactly. Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 512 MB by default, so a default run pays one event: $0.005.
Worked examples. A 20 channel search costs $0.06 plus $0.005. A weekly brand watch in monitor mode that finds 2 new channels costs $0.006 plus $0.005 that week.
Never charged: search results that miss one of your words, private invite links, a channel already delivered in the same run, channels skipped by monitor mode, the search pages and proxies, and the summary and info rows. A search that finds nothing pays only the start fee.
There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your own plan; if it and this table ever differ, the Pricing tab is right.
FAQ
What does this actor search?
Telegram has no public keyword search outside its app. Public Telegram channels each have a preview page at t.me/<handle>, and search engines index those pages. The actor searches Google for site:t.me plus your words, checks each result, and reads the channel's handle from its link. When Google does not answer, the same search goes to Brave.
How many channels can I get? Up to about 50 per run: the actor reads at most 5 pages of search results, about 10 results each, and stops as soon as a page brings no new matching channel. Narrow or unusual keywords often return fewer, because only channels whose title, description or link contains every word are kept. For wider coverage, run several related searches.
Why did I get fewer channels than maxResults?
Either the search ran out of matching channels, or results were left out because they did not contain all your words; the summary row's not_matching_skipped tells you how many. Shorter searches with fewer words usually return more.
How fresh is the data? Every run searches live. A channel created very recently appears once the search engine has indexed its preview page, which can take some time.
Do I need a Telegram account, a bot token or an API key? No. The actor never connects to Telegram's API and never logs in. You need only an Apify account.
Does it find private groups or invite only channels?
No. Only public channels with a t.me/<handle> address are returned. Invite links (t.me/joinchat/..., t.me/+...) point to private chats and are dropped on purpose.
Can I search in other languages? Yes. The word check works in any script, so a Russian, Hindi or Arabic search is matched against titles and descriptions in that script. What comes back depends on what the search engine has indexed for those words.
How does monitor mode work?
With monitorMode: true, the actor keeps a list of every channel handle it has delivered to your Apify account (up to the newest 50,000) in a storage named monitor-telegram-channel-finder, and skips those handles on later runs. The list is shared by all your monitor mode runs of this actor, whatever the query, so a channel delivered for one query is skipped for another. If you watch several topics, that is usually what you want. If the storage cannot be opened, the run says so in its log and delivers every channel it finds rather than skipping any.
Can I run it on a schedule?
Yes. Save your input as a task, then in Apify Console open Schedules, click Create new and pick a cron expression such as 0 9 * * * for every morning. With monitor mode on, each scheduled run charges only for channels you have not received before.
How do I export the data?
From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. Skip rows that have a _type field if you want channels only.
Can I use it from Claude, ChatGPT or another AI assistant?
- Connector URL:
https://mcp.apify.com/?tools=themineworks/telegram-channel-finder. - Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http telegram-channel-finder "https://mcp.apify.com/?tools=themineworks/telegram-channel-finder".
Is it legal to use this data? The actor collects only public channel handles, links and titles that search engines show to anyone, and it does not join channels or read private chats. Some channels are run by individuals. You are responsible for how you use the data, including Telegram's and the search engines' terms and data protection laws such as GDPR and CCPA. This is general information, not legal advice.
Integrations
- Google Sheets: export a run to a sheet, or append each scheduled monitor run to a list of channels found over time.
- Make, Zapier and n8n: use the Apify app or node to start a run and post new channels to Slack, Teams or email.
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
- MCP clients: Claude, ChatGPT, Cursor, VS Code and Claude Code can call the actor through
https://mcp.apify.com. - Next step: pass the
handlevalues to our Telegram Channel Scraper for subscriber counts and posts.
More from The Mine Works
Social media and video
- Threads Scraper
- Reddit Scraper
- Threads Search Scraper
- Instagram Profile Scraper
- Instagram Followers & Following
- Reddit Search Scraper
- Twitter / X Scraper
- Xiaohongshu (RED) Scraper
- YouTube Transcript
- Telegram Channel Scraper
- Pinterest Profile Scraper
- TikTok Scraper
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Jobs and hiring
E-commerce and marketplaces
Company and business data
Food and local services
Developer and AI tools
More tools
- Tennis Match & Player Data Scraper
- Google Hotels Prices Scraper
- LandWatch Scraper
- Taobao Products Scraper 淘宝 天猫
Support
Found a bug or need a field we do not return yet? Open an issue on the Issues tab of this page and we will reply there. To ask for a new data source, email dmineworks@gmail.com. A guide and FAQ for this actor also live at themineworks.com.
Telegram Channel Finder turns a keyword into a checked list of public Telegram channels with handles, links and titles, at $3 per 1,000 channels on every plan.

