Telegram Keyword Search Scraper avatar

Telegram Keyword Search Scraper

Pricing

from $3.00 / 1,000 telegram result founds

Go to Apify Store
Telegram Keyword Search Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

61

Total users

23

Monthly active users

5 hours ago

Last modified

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 channels field 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?

RequestInput 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

  1. Add one or more keywords in Queries.
  2. Set Max results per query and, if you like, narrow Include types to channel, group or message.
  3. 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"]
}
FieldTypeWhat it controls
queriesarray (required)Keywords to search, for example bitcoin. Up to 50 unique queries per run.
maxResultsPerQueryintegerBilled rows saved per keyword after type filtering and URL dedupe. Default 20, maximum 100.
includeTypesarrayAny of channel, group and message. Default all three.
languagestringOptional ISO 639-1 hint such as en or ru for ranking. Leave empty for mixed-language results.
proxyConfigurationobjectOptional 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.

FieldWhat it contains
queryThe keyword that produced the row
typechannel, group or message
title, username, urlPublic name, handle and canonical t.me link
snippetPublic description or message excerpt when the index provides one
messageId, messageDateMessage reference for message rows
memberCountMember count when the index shows it
rank, scorePosition and relevance score inside the query
source, provider, scrapedAtProvenance and collection time
matchFound, outcometrue 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:

OutcomeMeaning
COMPLETEQueries ran and matches were saved.
PARTIALMatches were saved and a cap or budget ended the run early.
VALID_EMPTYThe queries ran and the public index had no matches for them.
INVALID_INPUTThe input had no keyword to search; add one and start again.
UPSTREAM_FAILEDThe 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 ApifyClient
client = 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:

  1. Pass keywords in queries and set maxResultsPerQuery to the number of billed rows you are happy to pay for.
  2. Read rows with get-dataset-items and keep url as the source link for every claim.
  3. Read OUTPUT.outcome to tell a full result from a keyword with no public matches.
  4. Hand the usernames to Telegram Channel Scraper when the user wants the messages themselves.

Best results

Starting situationHelpful actionExpected outcome
A broad topic such as cryptoUse two or three specific phrases insteadA tighter, more relevant community list
A first pass on a new nicheKeep maxResultsPerQuery between 5 and 20Quick, low-cost discovery
Only broadcast channels matterSet includeTypes to ["channel"]Channel rows only
Ongoing brand monitoringSchedule the same queries and compare url values between runsA clear list of newly listed channels and posts
A regional audienceAdd a language hint such as es or ruResults 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.