# Telegram Number Validator - Bulk Check (`scrapeai/telegram-phone-number-validator`) Actor

Bulk verify phone numbers for active Telegram accounts. Check 1,000-10,000 numbers per run. Upload CSV or Excel files, get instant yes/no results. Clean contact lists, validate leads, enrich CRM data. No Telegram account needed. Global coverage with automatic phone format normalization.

- **URL**: https://apify.com/scrapeai/telegram-phone-number-validator.md
- **Developed by:** [ScrapeAI](https://apify.com/scrapeai) (community)
- **Categories:** Lead generation, Automation, Integrations
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Telegram Number Validator - Bulk Check

> **Bulk verify phone numbers for active Telegram accounts.** Check 1,000-10,000 numbers per run. Upload CSV or Excel files, get instant yes/no results. Clean contact lists, validate leads, enrich CRM data. No Telegram account needed. Global coverage with automatic phone format normalization.

***

### 🌟 Key Features

- **Bulk Verification**: Verify lists of 1,000 to 10,000+ phone numbers in a single run with multi-threaded high performance.
- **Automatic Phone Format Normalization**: Accepts international formats, E.164, local formats, spaces, dashes, parentheses, `00` prefixes, and `t.me/+...` URLs automatically.
- **No Telegram Account Required**: Works without logging in or connecting your personal or official Telegram session.
- **Rich Data Output**: Checks account presence (`hasTelegram`), status (`active` / `not_found`), linked `@username`, profile title, bio, photo URL, and direct deep links (`tg://resolve?phone=...`).
- **Global Coverage**: Supports phone numbers across all country codes worldwide with configurable default country code fallbacks.
- **CRM & Lead Cleaning**: Instantly filter out invalid numbers before running SMS campaigns, telemarketing, or cold outreach.

***

### 💡 Common Use Cases

1. **Lead List Hygiene & CRM Enrichment**: Filter your lead database to keep only active Telegram users for higher conversion rates.
2. **Sales & Marketing Outreach**: Identify leads that can be reached on Telegram without spending on expensive SMS gateways.
3. **Contact List Verification**: Bulk check phone numbers from uploaded CSV or Excel files.
4. **Data Verification**: Audit phone numbers in real time with high accuracy.

***

### 📥 Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `phoneNumbers` | Array | `[]` | List of phone numbers to check in JSON format. |
| `phoneList` | String | `""` | Multiline text or CSV block of phone numbers separated by newlines, commas, or semicolons. |
| `defaultCountryCode` | String | `""` | Optional country code (e.g. `+1`, `+44`, `+91`) applied to numbers missing a `+` prefix. |
| `proxyConfiguration` | Object | `null` | Apify Proxy configuration to prevent rate limiting. |
| `maxConcurrency` | Integer | `10` | Maximum number of concurrent requests allowed during scraping. |
| `debugLog` | Boolean | `false` | Enable verbose log messages for debugging. |

#### Example Input (`input.json`)

```json
{
  "phoneNumbers": [
    "+14155552671",
    "+447911123456",
    "+919876543210"
  ],
  "phoneList": "+1 (555) 234-5678\n+44 7911 123456",
  "defaultCountryCode": "+1",
  "maxConcurrency": 10,
  "debugLog": false
}
```

***

### 📤 Output Format

Each dataset item contains structured information regarding the checked phone number:

| Field | Type | Description |
|---|---|---|
| `phoneNumber` | String | Formatted E.164 phone number. |
| `rawInput` | String | Original raw input string provided. |
| `formattedE164` | String | Normalized E.164 string with leading `+`. |
| `countryCode` | String / Null | Detected or inferred country code prefix. |
| `hasTelegram` | Boolean | `true` if phone number belongs to an active Telegram account. |
| `status` | String | `active` or `not_found`. |
| `username` | String / Null | Linked Telegram username (without `@`) if available. |
| `title` | String / Null | Public display title or profile name. |
| `bio` | String / Null | Profile bio or description. |
| `photoUrl` | String / Null | Profile picture URL if publicly accessible. |
| `isVerified` | Boolean | Whether the account is officially verified by Telegram. |
| `telegramUrl` | String | Direct web link (`https://t.me/+...`). |
| `deepLink` | String | Telegram application deep link (`tg://resolve?phone=...`). |
| `checkedAt` | String | ISO 8601 timestamp of verification. |

#### Sample Output (`dataset.json`)

```json
{
  "phoneNumber": "+14155552671",
  "rawInput": "+1 (415) 555-2671",
  "formattedE164": "+14155552671",
  "countryCode": "+1",
  "hasTelegram": true,
  "status": "active",
  "username": "sample_user",
  "title": "John Doe",
  "bio": "Software Engineer & Creator",
  "photoUrl": "https://cdn4.cdn-telegram.org/file/...",
  "isVerified": false,
  "telegramUrl": "https://t.me/+14155552671",
  "deepLink": "tg://resolve?phone=14155552671",
  "checkedAt": "2026-08-06T14:52:00.000Z"
}
```

***

### ⚡ Performance Tips

- **Use Apify Proxies**: When checking thousands of phone numbers, enable Apify Proxy to maintain smooth response rates.
- **Adjust Concurrency**: Increase `maxConcurrency` (up to 20-30) for larger datasets when proxies are enabled.
- **Normalizer**: Pass numbers in any standard format; the built-in normalizer will handle formatting automatically.

***

### 🔒 Privacy & Compliance

This tool only checks public web endpoints and public indicators. It does not store phone numbers or access private Telegram user data. Please ensure compliance with local data privacy laws (GDPR, CCPA) when processing lead databases.

# Actor input Schema

## `phoneNumbers` (type: `array`):

List of phone numbers to check (e.g. \['+14155552671', '+447911123456', '+919876543210']). Supports E.164 and international formats.

## `phoneList` (type: `string`):

Enter phone numbers separated by newlines, commas, or semicolons for bulk verification.

## `defaultCountryCode` (type: `string`):

Default country code prefix to apply if phone numbers do not include leading '+' or country code (e.g. '+1', '+44', '+91').

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

Select Apify Proxy to bypass rate limits or access profile links smoothly.

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent requests allowed during verification.

## `debugLog` (type: `boolean`):

Enable verbose debug logging for request tracking.

## Actor input object example

```json
{
  "phoneNumbers": [
    "+14155552671",
    "+447911123456",
    "+919876543210"
  ],
  "phoneList": "+14155552671\n+447911123456\n+919876543210",
  "defaultCountryCode": "+1",
  "maxConcurrency": 10,
  "debugLog": false
}
```

# 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 = {
    "phoneNumbers": [
        "+14155552671",
        "+447911123456",
        "+919876543210"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeai/telegram-phone-number-validator").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 = { "phoneNumbers": [
        "+14155552671",
        "+447911123456",
        "+919876543210",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrapeai/telegram-phone-number-validator").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 '{
  "phoneNumbers": [
    "+14155552671",
    "+447911123456",
    "+919876543210"
  ]
}' |
apify call scrapeai/telegram-phone-number-validator --silent --output-dataset

```

## MCP server setup

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

```

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/lomkNjbgXJVcxLYHp/builds/E3d2atbG6U0CdaRth/openapi.json
