# Telegram Phone Number Scraper (`socialdataapi/telegram-phone-number-scraper`) Actor

Telegram Phone Number Scraper searches public Telegram channels and posts for phone numbers matching your keywords and country: number in international format, channel, link, title and text. No Telegram account or login. Export as JSON, CSV or Excel, or use the API.

- **URL**: https://apify.com/socialdataapi/telegram-phone-number-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.18 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Telegram Phone Number Scraper — Numbers, Channels and Page Links

Telegram Phone Number Scraper searches public Telegram channels and posts for phone numbers that match your keywords and the country you choose. Each result returns the number in international format, the channel name, the page link, the title and the public text the number appears in. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a lead-generation pipeline. **No Telegram account or login needed** to run a search. Add more keywords to search more channels in one run.

![Telegram Phone Number Scraper: every page and phone number from Telegram as JSON](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/j-telegram-phone-hero.webp)

***

### What data can I extract with Telegram Phone Number Scraper?

Using this Telegram phone number API, you will be able to extract the following Telegram phone number data:

| 📱 Platform | 🔑 Keyword searched | 📝 Page title | 📰 Page description |
| --- | --- | --- | --- |
| 🔗 Page URL | 📞 Phone number (E.164) | 🌍 Country | ☎️ Dial code |
| 👤 Channel handle (if available) | 🔗 Channel page link (if available) | | |

***

### How to use Telegram Phone Number Scraper

Marketers, recruiters and lead-generation teams use this actor to find phone numbers on Telegram without opening the app.

**Copy to your AI assistant:**

```text
Telegram Phone Number Scraper is an Apify Actor that returns phone numbers found on public Telegram pages as structured JSON: platform, keyword, page title, page description, page URL, phone number, country, dial code, channel handle and channel URL. Use it whenever someone needs to find phone numbers on Telegram without cookies, a login, or a browser - for telegram phone number lead generation, as a telegram business phone number finder, or to scrape telegram channel phone numbers at scale. Inputs: keywords (array of search terms, "@usernames" or t.me URLs, required), country (select from 194 countries or "Global", required), maxPhoneNumbers (integer 1-10000, default 10, how many numbers to collect per keyword), engine (select "legacy" | "deep" | "fast", default "legacy", kept for compatibility with values saved by earlier input versions), proxyConfiguration (object, defaults to Apify Proxy). Each keyword stops once maxPhoneNumbers is reached, its results run out, or 3 result pages in a row add no new number; up to 30 pages are checked per keyword per search engine, and the free Apify plan caps results at 20 per run in total (all keywords together) and 200 per month.
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [**Telegram Phone Number Scraper**](https://apify.com/socialdataapi/telegram-phone-number-scraper) in the Apify Store.
3. Enter one or more keywords, `@usernames` or `t.me` URLs, plus the country whose numbers you want.
4. Click **Start**.
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Telegram Phone Number Scraper to bulk

`keywords` takes a list, so add every search term, `@username` or `t.me` URL you want covered in one Input field — up to 3 keywords are processed at the same time, each with its own `maxPhoneNumbers` budget. To cover more ground over time, schedule the Actor to run on a recurring basis with a rotating keyword list, or call it from the Apify API with a different `keywords`/`country` pair per run.

***

### ✨ Features

Telegram Phone Number Scraper is, at its core, a telegram phone number finder: point it at a keyword and a country, and it fetches clean, structured matches from public Telegram channels and posts ⚡ at low cost 💸. It's ideal for lead generation, local-market research, recruiter outreach and B2B prospecting.

It extracts, per match:

- **Phone number** – the number in E.164 international form.
- **Channel** – the username read from the page link, when the page has one.
- **Page title** – the result's title as shown in the search listing.
- **Page description** – the public text the number appears in.
- **Country / dial code** – the country the number was matched against.
- **Page URL** – the channel, post or web-preview link, without tracking parameters.

⚡ Country-aware validation checks the number's digit count and, where known, its national numbering plan, so dates, prices and other digit runs that only look like a phone number never make it into the dataset.

***

### Use cases 💡

- **Sales rep** — build a call list of channel owners by keyword and country in one run.
- **Recruiter** — search niche keywords to find a business's listed contact number.
- **Local-market researcher** — use it as a telegram contact phone number extractor to map every number for one city.
- **Growth marketer** — seed a cold-outreach list from public channels and posts for one city or niche.
- **AI agent builder** — feed matched numbers straight into a CRM-enrichment or lead-scoring pipeline with no parsing step.

***

### Why choose this actor?

- **Extract phone numbers from telegram channels in one pass.** A recorded run returned 13 numbers from three Uzbekistan keywords (`kvartira`, `ijara`, `Chennai flats`) in 12.3 seconds, run locally without a proxy.
- **Ten fields per match, not just a number.** Every row also carries the page title, the public text the number appeared in, the channel handle and its page link, the matched country and dial code.
- **194 countries, built-in retry.** Numbers are checked against 194 countries' dial codes (plus a Global catch-all), and when a search attempt is blocked the actor automatically retries it through a fallback path.

***

### ⬇️ Input

![Telegram Phone Number Scraper input: keywords, country and max phone numbers](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/j-telegram-phone-input.webp)

Enter one or more keywords, `@usernames` or `t.me` URLs (required) and the country whose numbers you want (required); the rest is optional and has a working default.

| Parameter | Required | Type | Description | Example value |
| --- | --- | --- | --- | --- |
| `keywords` | Yes | Array of strings | Keywords, `@usernames` or `t.me` URLs. Each one is searched on its own and gets its own budget of `maxPhoneNumbers`; usernames/URLs are reduced to the channel name and duplicates are dropped. | `["kvartira", "ijara"]` |
| `country` | Yes | String (select) | Country whose phone numbers you want, from 194 countries, or `Global` for no filter (only `+`/`00`-prefixed numbers are kept). | `"Uzbekistan (+998)"` |
| `maxPhoneNumbers` | No | Integer | How many phone numbers to collect per keyword (1–10,000, default 10). Free-plan runs are capped at 20 per run in total (all keywords together) and 200 per month. | `50` |
| `engine` | No | String (select) | Processing engine. There is one engine (`legacy`); values saved by earlier actor versions (`deep`, `fast`) are still accepted and run the same engine. | `"legacy"` |
| `proxyConfiguration` | No | Object | Proxy used for the searches. Defaults to Apify Proxy; the actor still runs without one, usually with fewer results. | `{"useApifyProxy": true}` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 phone numbers per run (all keywords together) and 200 phone numbers per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "keywords": ["kvartira", "ijara"],
  "country": "Uzbekistan (+998)",
  "maxPhoneNumbers": 50,
  "engine": "legacy",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

***

### ⬆️ Output

![Telegram Phone Number Scraper output: one row per number with platform, keyword, phone number and country](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/j-telegram-phone-output.webp)

Every match is one typed, normalized JSON item with the same schema on every run; pages are de-duplicated per keyword by URL, so the same number can appear on more than one row when different pages show it. Export as JSON, CSV or Excel.

#### Example output

```json
{
  "platform": "T.me",
  "keyword": "kvartira",
  "title": "Telegram: View @Kvartira_arenda_toshkent_1 - t.me",
  "description": "👩🏻💻 Kumushxon 📞 +99890 541 08 08 📩 Telegram: @kumushxon_0808 Makler xizmati bor !!",
  "url": "https://t.me/Kvartira_arenda_toshkent_1",
  "phone_number": "+998905410808",
  "country": "Uzbekistan",
  "dial_code": "+998",
  "channel": "Kvartira_arenda_toshkent_1",
  "channel_url": "https://t.me/Kvartira_arenda_toshkent_1"
}
```

***

### How does it work?

Telegram Phone Number Scraper doesn't log into Telegram at all. For every keyword it runs a public web search (automatically retrying through a fallback path if the first attempt is blocked) for public `t.me` pages — channels, posts and web previews — that mention a phone number matching your chosen country. As a telegram public channel phone number finder, it only ever opens pages any logged-out visitor could already see: it never joins a channel, opens a private group, or reads a member list. The number is read from the page's own public title and text, then normalised to international E.164 form and checked against the country's real dial code and, where known, its national numbering-plan length. Requests rotate through fresh proxy sessions when blocked, so results stay stable even as Telegram's pages and the public web's search results change.

***

### How do you integrate Telegram Phone Number Scraper into your stack?

Telegram Phone Number Scraper works with what you already use: call it from any language over a REST API, or wire it into a no-code tool without writing a scraper yourself.

#### No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node's **Run an Actor** action, or the HTTP Request node pointed at the Actor's run-sync endpoint with your Apify token. In Make, use the Apify app's **Run an Actor** module followed by **Get Dataset Items**. In LangChain, install `langchain-apify` and call `ApifyActorsTool()` to let an agent run it as a tool.

***

### Is it legal to scrape Telegram data?

Scraping publicly available data, including public Telegram pages, is generally permitted; the legal risk sits mostly in how the data is stored and used afterward, not in the act of reading a public page. Telegram Phone Number Scraper returns only publicly available data — what any logged-out visitor already sees. If you operate in the EU, GDPR still applies to storing and using numbers you collect: keep records you can justify and delete them when asked to. In countries with telemarketing or anti-spam rules, outreach to a number found this way is still subject to those rules — the Actor finds public numbers, it does not grant permission to contact them. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Telegram Phone Number Scraper return?

Telegram Phone Number Scraper returns the phone number, the page title, the page URL, the channel handle and the matched country for every page it finds. See [the data fields section](#what-data-can-i-extract-with-telegram-phone-number-scraper) for the full list.

#### Does Telegram Phone Number Scraper require a Telegram account or login?

No. Only public channel and post pages are read — the kind any logged-out visitor can already open — and no Telegram credentials are ever requested.

#### How fast does Telegram Phone Number Scraper run?

It depends on the keyword and country, but a recorded local run returned 12 phone numbers for two India-related keywords in 16.1 seconds, and another returned 13 numbers from three Uzbekistan keywords in 12.3 seconds — live data, never cached.

#### What happens if a Telegram page is private or doesn't exist?

No row is produced for a keyword with no public page showing a matching-country number. The Actor never opens private groups or member lists, so a private channel simply contributes nothing to the results.

#### Can I scrape multiple Telegram pages at once?

Yes. `keywords` takes a list, so you can run a telegram group phone number scraper search across many terms in one call, with up to 3 keywords processed at the same time.

#### Does Telegram Phone Number Scraper return data in a format LLMs can use directly?

Yes. Every result is typed, normalized JSON with consistent field names — no HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when Telegram changes its layout or updates its anti-bot system?

This actor reads general page text rather than one fixed selector, so most layout changes don't break it outright. When Telegram makes a bigger change, the actor is updated and your calls keep returning the same JSON schema on your end.

#### Can I use Telegram Phone Number Scraper without managing proxies or browser infrastructure?

Yes. Proxy rotation and retry handling run on the Actor's side — plain HTTP requests, no headless browser to install or maintain. You send one request and get structured JSON back.

#### Which Telegram Phone Number Scraper fields work best for AI training data and RAG indexing?

For RAG: index the page title and the page description, since that's the text the number was actually found in. For training data or filtering: the country, dial code and channel fields are typed strings you can group and join on directly, no normalization needed.

***

### Your feedback

Found a bug or missing a field? Let us know through the Issues tab on this actor's Apify Store page. Every report is read and feeds into the next fix.

# Actor input Schema

## `keywords` (type: `array`):

Keywords, usernames (@channel) or t.me URLs. Usernames and URLs are reduced to the channel name. Each entry is searched on its own and gets its own budget of maxPhoneNumbers results. The keyword field of every row keeps the value exactly as you entered it; duplicates are dropped.

## `country` (type: `string`):

Country whose phone numbers you want. Its dialling code narrows the search and every number is normalised to international form (E.164) for this country; numbers that cannot belong to it are dropped. Global = no country filter: only numbers written with an explicit +/00 country code are kept.

## `maxPhoneNumbers` (type: `integer`):

How many phone numbers to collect for each keyword (1-10000). A keyword stops earlier when the results run out, or after 3 result pages in a row without a new number. Free plan users are limited to 20 items per run in total (across all keywords) and 200 items per month; paid plans have no limit.

## `engine` (type: `string`):

Processing engine. There is one engine; the values saved by earlier versions of this actor are still accepted and run the same engine.

## `proxyConfiguration` (type: `object`):

Proxy used for the searches. Apify Proxy is recommended: blocked requests are retried up to 3 times, each with a new proxy session. Without a proxy the actor still runs, usually with fewer results.

## Actor input object example

```json
{
  "keywords": [
    "kvartira"
  ],
  "country": "Uzbekistan (+998)",
  "maxPhoneNumbers": 10,
  "engine": "legacy",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# 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 = {
    "keywords": [
        "kvartira"
    ],
    "country": "Uzbekistan (+998)",
    "maxPhoneNumbers": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "GOOGLE_SERP"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/telegram-phone-number-scraper").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 = {
    "keywords": ["kvartira"],
    "country": "Uzbekistan (+998)",
    "maxPhoneNumbers": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["GOOGLE_SERP"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/telegram-phone-number-scraper").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 '{
  "keywords": [
    "kvartira"
  ],
  "country": "Uzbekistan (+998)",
  "maxPhoneNumbers": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}' |
apify call socialdataapi/telegram-phone-number-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialdataapi/telegram-phone-number-scraper"
        }
    }
}
```

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/qTrKlgpPy3jNbZJ9I/builds/Wdjk906tNd6Nc5lu7/openapi.json
