Telegram Keyword Search Scraper
Pricing
from $3.00 / 1,000 telegram result founds
Telegram Keyword Search Scraper
Search public Telegram channels, groups and messages by keyword for community discovery and brand monitoring. Returns type, title, username, t.me URL, snippet and rank. For a known channel's message history, use Telegram Channel Scraper.
Pricing
from $3.00 / 1,000 telegram result founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
61
Total users
23
Monthly active users
5 hours ago
Last modified
Categories
Share
What is Telegram Keyword Search Scraper?
Telegram Keyword Search Scraper turns topic keywords into a dataset of matching public Telegram channels, groups and messages. Each row returns the entity type, title, username, canonical t.me URL, a text snippet, and its rank and score inside the query. Community managers, brand monitors, OSINT researchers, crypto and niche marketers, and AI agents use it when they start from a topic such as bitcoin or remote python jobs rather than a known @username. It needs no Telegram account, phone number, cookies or Bot API key.
Best fit for this Actor
- Designed for discovery. Use it when you have a keyword and want the public Telegram communities that talk about it.
- One flat row per match. Channels, groups and public posts share one schema with a canonical
https://t.me/...link you can open or pass downstream. - Batch keywords in one run. A batch of up to 50 unique queries goes in one run, and each keyword is capped by
maxResultsPerQuery, so spend stays predictable. - Clean handoff to message history. Once you have usernames, continue with Telegram Channel Scraper and pass the handles into its
channelsfield to collect messages, views, links and emails. - Channel stats before you commit. When you want subscribers and engagement for the channels you found, then pass the same handles to Telegram Channel Info Scraper.
What people and AI agents ask this Actor to do
Find public Telegram channels about bitcoin. List Telegram groups where people discuss remote Python jobs. Which Telegram channels mention our brand name this week?
| Request | Input to send |
|---|---|
| Channels for a topic | {"queries": ["bitcoin"], "includeTypes": ["channel"], "maxResultsPerQuery": 20} |
| Groups for a community niche | {"queries": ["remote python jobs"], "includeTypes": ["group"]} |
| Brand mentions across types | {"queries": ["your brand name"], "maxResultsPerQuery": 50} |
| Several keywords in one batch | {"queries": ["solana airdrop", "defi yield", "nft drops"], "maxResultsPerQuery": 10} |
| A language-focused pass | {"queries": ["криптовалюта"], "language": "ru"} |
Workflow example: from a keyword to a monitored channel list
A crypto research desk starts with the keyword bitcoin, sets maxResultsPerQuery to 20 and keeps includeTypes on channel, group and message. The dataset returns titles, usernames, t.me links and snippets, ranked by relevance. The analyst exports the rows to a spreadsheet, keeps the channels that fit the desk's coverage, and schedules the same input weekly so they can compare new url values against last week's export. The kept usernames then feed Telegram Channel Scraper for full message history.
How to search Telegram by keyword
- Add one or more keywords in Queries.
- Set Max results per query and, if you like, narrow Include types to channel, group or message.
- Click Start, then export the dataset as JSON, CSV or Excel or read it through the API.
Input
{"queries": ["bitcoin"],"maxResultsPerQuery": 20,"includeTypes": ["channel", "group", "message"]}
| Field | Type | What it controls |
|---|---|---|
queries | array (required) | Keywords to search, for example bitcoin. Up to 50 unique queries per run. |
maxResultsPerQuery | integer | Billed rows saved per keyword after type filtering and URL dedupe. Default 20, maximum 100. |
includeTypes | array | Any of channel, group and message. Default all three. |
language | string | Optional ISO 639-1 hint such as en or ru for ranking. Leave empty for mixed-language results. |
proxyConfiguration | object | Optional Apify Proxy. The default direct path suits most runs; Residential is available for heavy batches. |
Output
Each dataset row is one public Telegram match for one keyword.
| Field | What it contains |
|---|---|
query | The keyword that produced the row |
type | channel, group or message |
title, username, url | Public name, handle and canonical t.me link |
snippet | Public description or message excerpt when the index provides one |
messageId, messageDate | Message reference for message rows |
memberCount | Member count when the index shows it |
rank, score | Position and relevance score inside the query |
source, provider, scrapedAt | Provenance and collection time |
matchFound, outcome | true and FOUND for billed matches |
{"query": "bitcoin","type": "channel","title": "BTC Daily Brief","username": "btcdailybrief","url": "https://t.me/btcdailybrief","snippet": "Daily bitcoin market notes, on-chain charts and macro headlines in one public channel.","memberCount": null,"messageDate": null,"messageId": null,"score": 100,"rank": 1,"source": "lyzem-search","provider": "lyzem","scrapedAt": "2026-10-01T13:23:03.201Z","matchFound": true,"outcome": "FOUND"}
Every run also writes OUTPUT and RUN_SUMMARY to the default key-value store. OUTPUT.outcome is one of:
| Outcome | Meaning |
|---|---|
COMPLETE | Queries ran and matches were saved. |
PARTIAL | Matches were saved and a cap or budget ended the run early. |
VALID_EMPTY | The queries ran and the public index had no matches for them. |
INVALID_INPUT | The input had no keyword to search; add one and start again. |
UPSTREAM_FAILED | The public search index returned no usable data for the requested work. |
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. Two events apply: Actor Start once per run, and Telegram result found once per saved channel, group or message row. Keywords with no public matches add no result events. For example, three keywords that each save 10 matches create 30 Telegram result found events plus one Actor Start event. The live Pricing tab on this page shows the current event prices, and you can set a maximum charge per run in the run options.
Free Apify plan
Runs started from a free Apify plan return up to 25 results per run, with every input mode and output field available. Paid Apify plans have no per-run limit, so your usual result settings apply.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~telegram-keyword-search-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"queries": ["bitcoin"], "maxResultsPerQuery": 10, "includeTypes": ["channel", "group"]}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/telegram-keyword-search-scraper").call(run_input={"queries": ["bitcoin", "solana airdrop"],"maxResultsPerQuery": 10,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["type"], row["username"], row["url"])
Use with AI agents through Apify MCP
Connect this Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask:
Search public Telegram for "bitcoin" and "solana airdrop". Return type, title, username, url and snippet for up to 10 matches per keyword, then tell me the run outcome and which usernames look like news channels.
Agent checklist:
- Pass keywords in
queriesand setmaxResultsPerQueryto the number of billed rows you are happy to pay for. - Read rows with
get-dataset-itemsand keepurlas the source link for every claim. - Read
OUTPUT.outcometo tell a full result from a keyword with no public matches. - Hand the usernames to Telegram Channel Scraper when the user wants the messages themselves.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
A broad topic such as crypto | Use two or three specific phrases instead | A tighter, more relevant community list |
| A first pass on a new niche | Keep maxResultsPerQuery between 5 and 20 | Quick, low-cost discovery |
| Only broadcast channels matter | Set includeTypes to ["channel"] | Channel rows only |
| Ongoing brand monitoring | Schedule the same queries and compare url values between runs | A clear list of newly listed channels and posts |
| A regional audience | Add a language hint such as es or ru | Results ranked toward that language |
Builder's note
I built this for the moment before channel scraping, when all you have is a topic and no usernames yet. I found that a public Telegram search index already returns typed cards with canonical t.me links, so the Actor reads those cards, dedupes by URL and stops at your per-keyword cap. My goal was a single schema an agent can trust, which is why every run also writes a clear outcome record next to the dataset.
FAQ
Do I need a Telegram account?
No. The Actor searches a public web index and needs no phone number, session or Bot API token.
Can it find private groups?
It returns public channels, groups and posts that the public index lists. Invite-only and private chats stay outside its public-data scope.
What happens when a keyword has no matches?
You get a VALID_EMPTY outcome for that work and adds no Telegram result found events.
How do I get the messages from a channel I found?
Copy the username values into the channels field of Telegram Channel Scraper.
Responsible use
This Actor collects public Telegram listings for research, monitoring and community discovery. Snippets can contain names or handles, which may be personal data under laws such as the GDPR and CCPA, so use them with a lawful basis and respect Telegram's terms and the site terms of the public index. Telegram is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Telegram.