# Tiktok Phone Number Scraper (`solid-scraper/tiktok-phone-number-scraper`) Actor

📱 Unlock leads with the TikTok Phone Number Scraper! Efficiently extract verified contact info for targeted outreach, marketing, and partnerships. ⚡ Save time, boost conversions—ideal for agencies, sales teams, and growth marketers. 🔥

- **URL**: https://apify.com/solid-scraper/tiktok-phone-number-scraper.md
- **Developed by:** [SolidScraper](https://apify.com/solid-scraper) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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

### Linkedin Phone Number Scraper 🔍

**Linkedin Phone Number Scraper** is an Apify actor that extracts phone numbers from **LinkedIn**-related public web data—using your chosen keywords and a country dial code to focus results. Whether you’re looking for a **LinkedIn phone number scraper** for outreach, a **LinkedIn contact number scraper** for lead lists, or a **LinkedIn leads phone number scraper** for prospecting, this tool helps you turn public signals into usable phone number data—saving you hours of manual work.

***

### Why choose Linkedin Phone Number Scraper?

| Feature | Benefit |
|---|---|
| ✅ **Keyword-driven extraction** | Finds phone numbers tied to your keywords from bios, profiles, and posts related to those terms |
| ✅ **Country dial code targeting** | Collects numbers and validates them for the selected country region using `country` selection and dial code |
| ✅ **Reliability with engine selection** | Choose `engine` to balance speed/cost (`cost-effective`) and reliability (`legacy`) |
| ✅ **Resilience via retries and fallbacks** | Includes retries and fallback logic for pages that return empty or blocked results |
| ✅ **Structured, ready-to-use dataset** | Pushes each found record into the dataset with consistent fields for CRM and analysis |
| ✅ **Scales with controls** | Use `maxPhoneNumbers` to cap collection volume and manage runtime for larger searches |

***

### Key features

- 📌 **LinkedIn phone number extraction from multiple public areas**: Collects phone numbers from LinkedIn bios, profiles, and posts related to your keywords.
- 🎯 **Dial code targeting for cleaner results**: Uses your selected `country` and its dial code to extract and validate phone numbers for that region.
- 🔧 **Flexible targeting with keyword lists**: Provide multiple `keywords` (e.g., business roles, company terms, founder-related terms) to broaden or narrow results.
- 🛡️ **Engine choice for different reliability needs**: Switch between `cost-effective` and `legacy` engines depending on your speed vs. reliability preferences.
- 🔄 **Retries and stop conditions**: Includes logic to retry when results appear blocked/empty and stops when `maxPhoneNumbers` is reached.
- 💾 **Incremental saving**: Each discovered phone number is pushed immediately, and progress is persisted during the run for continuity.
- 🌐 **Dataset-ready records**: Every pushed row includes the phone number plus context fields like keyword, title, description, and source URL.

***

### Input

Provide input via an `input.json` file. Example structure:

```json
{
  "keywords": ["marketing", "founder"],
  "platform": "Linkedin",
  "country": "United Kingdom (+44)",
  "maxPhoneNumbers": 20,
  "engine": "legacy",
  "proxyConfiguration": {}
}
```

#### Input Fields

| Field | Required | Description |
|---|---:|---|
| `keywords` | ✅ | A list of keywords to search for (examples include `"John"`, `"marketing"`, `"founder"`). The scraper uses these to find phone numbers from LinkedIn bios, profiles, and posts related to your terms. |
| `platform` | ❌ | Select platform. Only `"Linkedin"` is available in the schema (default: `"Linkedin"`). |
| `country` | ✅ | Select a country to scrape related phone numbers. This controls the dial code used for targeting and phone-number validation (default: `"United Kingdom (+44)"`). |
| `maxPhoneNumbers` | ❌ | Maximum number of phone numbers to collect. The actor stops once this limit is reached (min `1`, max `10000`, default `20`). |
| `engine` | ❌ | Choose scraping engine. `cost-effective` prioritizes cost/speed, while `legacy` prioritizes reliability (default: `legacy`). |
| `proxyConfiguration` | ❌ | Configure proxies for this Actor. If you don’t provide it, the actor uses its default behavior for proxy handling based on `engine`. |

> Note: The actor’s own description highlights that large searches or high `maxPhoneNumbers` may take longer, and you can increase the timeout in Run Options (default mentioned: 3600 s / 1 hr).

***

### Output

The actor saves each found record into the dataset using `Actor.push_data(row)`.

```json
[
  {
    "platform": "TikTok",
    "keyword": "marketing",
    "title": "Example result title",
    "description": "Example public page snippet/description text",
    "url": "https://example.com/source",
    "phone_number": "+447700900123",
    "country": "United Kingdom",
    "dial_code": "+44",
    "proxyGroups": ["..."]
  }
]
```

#### Output Fields

| Field | Type | Description |
|---|---|---|
| `platform` | string | Set to `TikTok` in the pushed output row. |
| `keyword` | string | The keyword currently being searched. |
| `title` | string | Title associated with the source record where the phone number was found. |
| `description` | string | Description/snippet text associated with the phone number source. |
| `url` | string | Source URL where the phone number was extracted from publicly available data. |
| `phone_number` | string | The extracted and formatted phone number (E.164 format). |
| `country` | string | Selected country name (from the country mapping used by the actor). |
| `dial_code` | string | Dial code corresponding to the selected country (e.g., `+44`). |
| `proxyGroups` | array | Proxy configuration/groups used for the run (as stored in the row). |

***

### How to use Linkedin Phone Number Scraper (via Apify Console)

1. **Open Apify Console**\
   Log in at https://console.apify.com and open the **Actors** page.

2. **Find the actor**\
   Search for **Linkedin Phone Number Scraper** and open its listing.

3. **Paste your input**\
   In the **INPUT** section, add your JSON with at least:
   - `keywords`
   - `country`

4. **Choose optional settings**\
   Set `maxPhoneNumbers` to control how many results you want.
   If needed, change `engine` between `legacy` and `cost-effective`.

5. **Provide proxy settings if you want**\
   Configure `proxyConfiguration` in the input if your workflow requires custom proxy behavior.

6. **Run the actor**\
   Click **Run**. During the run, you’ll see logs about pages returning results and phone numbers being discovered and pushed.

7. **Review results in the dataset**\
   When the run finishes, open the **OUTPUT** dataset to view the structured rows, then export to JSON/CSV as needed.

No coding required — get extractLinkedIn phone numbers results in minutes with this **Linkedin Phone Number Scraper**.

***

### Advanced features & SEO optimization

- 🚦 **Engine selection for the Linkedin phone number scraper workflow**: Switch between `cost-effective` and `legacy` depending on whether you prioritize speed/cost or maximum reliability.
- 🧭 **Keyword + dial-code targeting**: Helps the actor focus on relevant LinkedIn leads phone number scraper scenarios by using your keyword list and the selected country dial code.
- 🧷 **Progress persistence for long runs**: The actor persists cursor/progress (`progress_li_phone`) so you can continue without losing discovered numbers.
- 💾 **Structured “phone number list scraper” output**: Each record includes context fields like `keyword`, `title`, `description`, and `url`, making it easier to validate and enrich downstream.
- 🧠 **Designed for B2B prospecting pipelines**: Works well as a building block for “LinkedIn email and phone scraper” style enrichment workflows—especially when you need phone numbers alongside other contact data.

***

### Best use cases

- 📞 **B2B lead generation teams building phone-first outreach lists**: Extract LinkedIn prospecting phone numbers tied to specific keywords and regions.
- 🧠 **Competitive research & market mapping**: Build a Linkedin phone number database scraper-style view of contact signals surfaced in public bios, profiles, and posts.
- 🎯 **Recruiters targeting niche roles**: Use a LinkedIn contact number scraper approach with role keywords (like “founder” or other titles) to find phone numbers for outreach.
- 🏢 **Sales development teams enriching CRM records**: Feed extracted LinkedIn profile phone number extraction results into your CRM enrichment flow.
- 📊 **Data analysts creating regional contact datasets**: Combine `country`, `dial_code`, and `phone_number` into country-specific analyses.
- 💼 **Agency workflows for multi-client prospecting**: Run multiple keyword sets to produce a consistent structured output for each campaign.

***

### Technical specifications

- **Supported Input Formats**: Actor supports the following input fields: `keywords`, `platform`, `country`, `maxPhoneNumbers`, `engine`, `proxyConfiguration`.
- **Proxy Support**: ✅ Proxy configuration is supported via `proxyConfiguration`, and an `engine` option is available to balance speed/cost vs reliability.
- **Retry Mechanism**: ✅ Includes retries and stop conditions when results appear empty or blocked, and stops when `maxPhoneNumbers` is reached.
- **Dataset Structure**: ✅ The actor pushes one JSON object per found phone number using `Actor.push_data(row)` with fields including `phone_number`, `keyword`, `url`, `title`, `description`, `country`, and `dial_code`.
- **Rate Limits & Performance**: Processing time may increase for large searches or high `maxPhoneNumbers` (the actor notes you can increase Run Options timeout for large runs).
- **Limitations**: Phone availability depends on what is present in publicly available sources; results can be lower if keywords are too narrow.

***

### FAQ

#### Do I need to write any code to run the Linkedin Phone Number Scraper?

✅ No. You can run it directly from Apify Console by providing the required input fields (`keywords` and `country`) and reviewing the results in the output dataset.

#### What phone numbers are extracted by this tool?

✅ It extracts phone numbers found in publicly available sources that relate to LinkedIn bios, profiles, and posts connected to your provided keywords, and then validates/formats them for the selected country region.

#### How do I control how many results I get?

You can set `maxPhoneNumbers` to a specific integer. The actor will stop once it reaches that limit, helping you manage runtime and cost.

#### Why would results seem low?

The actor description suggests re-running with broader or more related keywords, and/or increasing `maxPhoneNumbers`. Since extraction depends on what’s publicly present, keyword targeting strongly affects results.

#### What does the `engine` setting do?

The `engine` input lets you choose between `cost-effective` (faster/cheaper approach) and `legacy` (more reliable but slower and more expensive approach), depending on your priority.

#### Does it support proxies?

Yes. You can provide `proxyConfiguration` and also choose the `engine` that matches your desired proxy behavior.

#### Can I export the results after the run?

Yes. After completion, open the dataset from the Apify run output and export it in formats supported by Apify (such as JSON/CSV).

#### Is this suitable for a “LinkedIn email and phone scraper” workflow?

✅ It’s commonly used as the phone-focused component of enrichment pipelines. For full contact enrichment, you can combine these outputs with other data sources (e.g., email extractors) in your own process.

***

### Support & feature requests

If you’re using this **Linkedin Phone Number Scraper** and want to suggest improvements, we’d love to hear from you. 💡

- 💡 **Feature Requests**: Examples include exporting to CSV, adding more output fields, or tuning keyword targeting for specific Linkedin phone number scraper workflows.
- 📧 **Contact**: Email <dataforleads@gmail.com>.

Your feedback helps shape the roadmap for this LinkedIn leads phone number scraper experience.

***

### *Closing thoughts* — Linkedin Phone Number Scraper

*If you’re looking for the most comprehensive Linkedin Phone Number Scraper output for B2B prospecting, you’re in the right place.*\
*Run it with strong keywords and the right country dial code to extract LinkedIn phone numbers at scale.*

***

### Disclaimer

**This tool accesses publicly accessible sources only.** It does not access private profiles, authenticated data, or password-protected pages.

You are responsible for ensuring your use complies with applicable laws and regulations (including GDPR/CCPA), spam and communications rules, and the relevant platform terms. For any data-removal requests, contact <dataforleads@gmail.com>.

Please use this **Linkedin Phone Number Scraper** responsibly, ethically, and for legitimate purposes only.

# Actor input Schema

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

A list of keywords to search for. (Example: John, marketing, etc.)

## `platform` (type: `string`):

Select platform.

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

Select a country to scrape related phone numbers.

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

Maximum number of phone numbers to collect. The scraper will stop once this limit is reached. Setting a higher limit allows for more potential results but doesn't guarantee reaching that number. This helps save costs by controlling scraping time.

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

Choose scraping engine. 🚀 Cost Effective (New): Uses residential proxies with async requests for faster, cheaper scraping. 🔧 Legacy: Uses GOOGLE\_SERP proxy with traditional selectors - more reliable but slower and more expensive.

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

Configure proxies for this Actor.

## Actor input object example

```json
{
  "keywords": [
    "marketing",
    "founder"
  ],
  "platform": "Linkedin",
  "country": "United Kingdom (+44)",
  "maxPhoneNumbers": 20,
  "engine": "legacy"
}
```

# 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": [
        "marketing",
        "founder"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("solid-scraper/tiktok-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": [
        "marketing",
        "founder",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("solid-scraper/tiktok-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": [
    "marketing",
    "founder"
  ]
}' |
apify call solid-scraper/tiktok-phone-number-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solid-scraper/tiktok-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/CrzQSeac7rn51P8he/builds/z2UFhVJj2LtadY8Ba/openapi.json
