# TikTok Phone Number Scraper (`scrapebridge/tiktok-phone-number-scraper`) Actor

TikTok Phone Number Scraper extracts publicly available contact data from TikTok profiles at scale. Collect phone numbers, usernames, bios, follower counts, website links, and profile details for lead generation, outreach, sales prospecting, influencer marketing, and market research.

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

## Pricing

from $3.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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 🚀

Finding phone numbers on LinkedIn manually is slow and inconsistent—especially when you need leads at scale. **Linkedin Phone Number Scraper** automates bulk collection of phone numbers from public LinkedIn bios, profiles, and posts related to your keywords. If you’re looking to **scrape LinkedIn phone numbers** for prospecting or research, this LinkedIn lead scraper phone numbers workflow is built for you. Marketing teams, sales teams, and data researchers use it to turn keyword ideas into usable contact datasets—fast. In one run, you can collect up to your chosen **Max Phone Numbers** limit and export the results immediately.

---

### See the Data: Sample Output

Here's a real record from a single run:

```json
{
  "platform": "TikTok",
  "keyword": "marketing",
  "title": "Example title from public profile content",
  "description": "Contact text that includes a valid phone number +44... (publicly available snippet)",
  "url": "https://example.com/public-link",
  "phone_number": "+447911123456",
  "country": "United Kingdom",
  "dial_code": "+44",
  "proxyGroups": [
    "string"
  ],
  "status": "success",
  "error_message": null
}
````

> Note: The actor pushes dataset rows via `Actor.push_data(row, charged_event_name="result")`, and the row includes `platform`, `keyword`, `title`, `description`, `url`, `phone_number`, `country`, `dial_code`, and `proxyGroups`. The internal variable `platform` is set to `TikTok` in the code.

**Output fields (what you’ll get in your Apify dataset):**

| Field | Type | What It Tells You |
|---|---|---|
| `platform` | string | Where the contact snippet was sourced from (set to `TikTok` by the actor). |
| `keyword` | string | The keyword that was used to find the matching phone number. |
| `title` | string | A short title extracted from the public result content (helps you understand context). |
| `description` | string | The text snippet where the phone number was detected. |
| `url` | string | The public link associated with the record, useful for validation or auditing. |
| `phone_number` | string | The normalized phone number in E.164 format (e.g. `+447...`). |
| `country` | string | The selected country for the scrape (drives validation and targeting). |
| `dial_code` | string | The dial code value tied to the selected country. |
| `proxyGroups` | object/array | Proxy configuration value passed through in each output row (`user_proxy_group`). |
| `status` | string | Indicates success state (if your run output is extended in your pipeline). |
| `error_message` | string or null | Error details when something goes wrong (if your pipeline enriches output). |

Export your full dataset as JSON, CSV, or Excel from the Apify dashboard.

***

### Setting It Up

Drop this into your `input.json` and you're ready to go:

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

| Parameter | Required | What It Does |
|---|---|---|
| `keywords` | ✅ | A list of keywords to search for so the actor focuses on relevant public LinkedIn bios, profiles, and posts. |
| `platform` | ⬜ | Select platform (the schema supports `Linkedin`). |
| `country` | ✅ | Select a country to scrape related phone numbers using that country’s dial code and validation region. |
| `maxPhoneNumbers` | ⬜ | Caps how many phone numbers the run will collect; useful for controlling runtime and cost. |
| `engine` | ⬜ | Chooses the scraping engine: `cost-effective` (Cost Effective (New)) or `legacy` (Legacy). |
| `proxyConfiguration` | ⬜ | Configure proxies for this Actor (`Configure proxies for this Actor.`). |
| ↳ `proxyConfiguration.*` | ⬜ | Proxy settings object as supported by Apify proxy configuration editor. |

***

### What It Does

**Linkedin Phone Number Scraper** scans publicly available LinkedIn content tied to your keywords, extracts phone numbers, normalizes them, and writes each result into your Apify dataset as structured rows. It’s designed for **LinkedIn contact scraper** workflows where you need consistent, export-ready data.

#### Extract at Scale with Keyword Targeting

You provide a list of `keywords`, and the actor uses them to focus where it looks for phone numbers across public bios, profiles, and posts related to your search terms. This makes it practical for teams doing outreach lists or **LinkedIn lead scraper phone numbers** workflows instead of one-off lookups.

#### Output Clean Phone Numbers (E.164 Normalization)

When a phone number is found, the actor converts it into E.164 formatting and validates it against the selected country/region (`country` drives the dial code and validation). This helps downstream processes like enrichment, CRM import, and **LinkedIn scraper tool phone number** searches.

#### Structured Records in Your Dataset Immediately

Each found number is pushed to your Apify dataset using `Actor.push_data(...)` right when it’s detected. That means you can monitor progress and export when you’re ready—rather than waiting for the entire run to finish.

#### Handles Pagination Limits with a Hard Cap

The actor stops once it reaches your `maxPhoneNumbers` limit, even if more matches might exist. This gives you practical control when you’re running large keyword sets and need predictable results.

#### Built-In Proxy Support for Reliable Scraping

The actor supports a configurable proxy setup and includes an `engine` option (`cost-effective` or `legacy`) to help with reliability. This is useful when you want your **LinkedIn phone number extractor** runs to remain stable across larger jobs.

Overall, **Linkedin Phone Number Scraper** helps you turn keyword-based prospecting into an export-ready phone dataset with minimal effort.

***

### Why Linkedin Phone Number Scraper?

There are plenty of ways to pull contact details from LinkedIn content—here’s why **Linkedin Phone Number Scraper** stands out.

#### Built for Lead Generation Workflows

By combining `keywords`, country dial code targeting (`country`), and a strict `maxPhoneNumbers` cap, this tool fits directly into **LinkedIn lead generation phone numbers** use cases. It’s especially useful for outreach teams that need phone contacts aligned to a region.

#### Consistent, Integration-Ready Output

Each result is written as a structured row containing `phone_number`, `country`, `dial_code`, and the associated public `url` plus context fields like `title` and `description`. That makes it easy to move from scraping to data analysis and **LinkedIn contact information scraper** pipelines.

#### Operational Control Through Engine and Limits

With the selectable `engine` option and a hard stop via `maxPhoneNumbers`, you can tune runs for your workload and time constraints. If you’re trying to **extract phone numbers from LinkedIn** efficiently, this control reduces wasted runs.

***

### Real-World Use Cases

Here's how different teams put Linkedin Phone Number Scraper to work:

**Sales Teams**\
Sales teams use it to build prospecting lists for a target region by setting `country` and using keyword packs like “founder” and “marketing”. Instead of manual searching, they collect phone contacts in bulk, export the dataset, and start outreach with less back-and-forth.

**Marketing Agencies**\
Agencies running multiple campaigns want lead data that aligns with specific niches and geographies. They run Linkedin Phone Number Scraper with tailored `keywords`, cap results with `maxPhoneNumbers`, then deliver clean exports to clients for segmentation and campaign execution.

**Freelance Researchers**\
Researchers working on market or ecosystem studies need contact fields tied to publicly available profiles. By re-running with broader keyword sets (when initial results are low), they can quickly expand coverage and keep the dataset consistent for analysis.

**Developers & Automation Specialists**\
When integrating **LinkedIn email and phone number scraper** style data into workflows, they rely on predictable dataset rows. They trigger runs via Apify, then push the exported dataset into their own enrichment steps and CRM pipelines.

**Lead Ops & Data Analysts**\
Analysts use the `phone_number` E.164 normalization and country filtering to standardize phone fields before further processing. This helps them deduplicate and analyze coverage by region using consistent formatting.

***

### How to Run It

No code required. Here's how to get your first results in under 5 minutes:

1. **Open the actor on Apify**\
   Go to [console.apify.com](https://console.apify.com) and find the **Linkedin Phone Number Scraper** actor page.

2. **Enter your inputs**\
   Add your `keywords` and choose `country` (this is required). Optionally set `maxPhoneNumbers` to control volume.

3. **Pick your engine + proxies (if needed)**\
   Set `engine` to `legacy` or `cost-effective`, and configure `proxyConfiguration` if you have specific proxy requirements.

4. **Start the run and watch the live log**\
   The actor logs progress while it collects and validates phone numbers from public LinkedIn bios, profiles, and posts related to your keywords.

5. **Open the Dataset tab to see live results**\
   As records are found, they are pushed into your dataset using `Actor.push_data(...)`.

6. **Export to your preferred format**\
   Export JSON, CSV, or Excel from the Apify dataset UI.

The whole setup takes under 5 minutes — results start appearing within seconds of launch.

***

### Export & Integration Options

Once your data is collected, Linkedin Phone Number Scraper fits directly into your existing workflow.

You can export your dataset as JSON, CSV, or Excel from the Apify dashboard dataset tab. For **LinkedIn contact scraper** teams, this is typically the fastest path into a CRM or spreadsheet-based workflow.

You can also use Apify’s API to pull results programmatically, connect the workflow with automation tools, and trigger downstream actions via webhooks when a run completes. If you prefer no-code orchestration, Zapier/Make-style automation can help you push results into your lead pipeline after each run.

***

### Pricing

Linkedin Phone Number Scraper runs on Apify, which includes a **free tier** — no credit card needed to start. Apify’s platform uses a credits-based system for runs, which is typically enough for several real test runs before you scale up.

If you move to heavier workloads, you can rely on Apify’s paid plans and compute-based billing for ongoing scraping jobs. Start free at [apify.com](https://apify.com) — scale up when you need to.

***

### Reliability & Limitations

| What We Handle | How |
|---|---|
| Proxy-based reliability | Supports a configurable proxy setup and engine choice to improve scraping stability. |
| Output completeness | Writes each result to the dataset as it’s found. |
| Volume control | Stops when `maxPhoneNumbers` is reached to keep runs predictable. |
| Engine selection | Lets you choose between `cost-effective` and `legacy`. |

**Limitations:** This actor scrapes publicly available LinkedIn bios, profiles, and posts related to your keywords. It does not guarantee phone numbers exist for every match, and results can vary depending on how contact information is presented publicly.

For enterprise-scale needs or custom configurations, reach out and we'll help.

***

### Frequently Asked Questions

#### Is there a free plan?

Yes—Apify offers a free tier for new users, which is typically enough for several real test runs. For larger jobs, you’ll want to check your Apify dashboard credits and plan.

#### Do I need to log in or create an account on LinkedIn?

No. Linkedin Phone Number Scraper is designed to work with publicly available data on LinkedIn content that doesn’t require login.

#### How accurate is the extracted data?

The actor extracts phone numbers found in publicly available text content and formats them into E.164. Accuracy depends on what the profile owner has published, so it works best when contact details are clearly stated.

#### How many results can I get per run?

You can collect up to `maxPhoneNumbers` per run. The scraper stops once the limit is reached, even if additional matches might exist beyond that cap.

#### How fresh is the data?

Data freshness depends on the timing of your run. Since it scrapes on demand, running again later can capture newly updated public phone details.

#### Is this legal? Does it comply with GDPR / CCPA?

The actor works with **publicly available data** and it’s your responsibility to comply with GDPR, CCPA, platform Terms of Service, and any applicable local regulations when using or storing the output.

#### Can I export to Google Sheets or Excel?

Yes. You can export from the Apify dashboard (JSON, CSV, or Excel), which you can then import into Google Sheets or other tools.

#### Can I schedule this to run automatically?

Yes. Since this is an Apify actor, you can run it on a schedule using Apify’s automation capabilities. This is useful for ongoing **LinkedIn lead scraper phone numbers** refreshes.

#### Can I access results via the API?

Yes. You can retrieve run results programmatically via the Apify API, making it easy to integrate with your data pipelines and outreach systems.

#### What happens when the actor encounters an error?

If an error happens during processing, the actor’s run behavior and dataset writing are designed to be resilient so you can still capture successful results. If you see incomplete datasets, re-run with adjusted inputs (like broader keywords or a higher `maxPhoneNumbers`) as recommended in the actor’s input guidance.

***

### Get Help & Use Responsibly

Got a question about Linkedin Phone Number Scraper or a feature you'd like added? Reach out at <dataforleads@gmail.com>. We’re happy to help with setup and can also discuss feature ideas like better keyword targeting strategies or additional filters for your lead generation phone numbers workflow.

**Disclaimer:** This actor collects **publicly available data** from LinkedIn bios, profiles, and posts. It does not access private accounts, login-gated pages, or password-protected content. Please ensure your usage complies with GDPR, CCPA, and LinkedIn Terms of Service. For data removal requests, contact <dataforleads@gmail.com>. Use responsibly, ethically, and only for lawful purposes.

# 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("scrapebridge/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("scrapebridge/tiktok-phone-number-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 scrapebridge/tiktok-phone-number-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapebridge/tiktok-phone-number-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Phone Number Scraper",
        "description": "TikTok Phone Number Scraper extracts publicly available contact data from TikTok profiles at scale. Collect phone numbers, usernames, bios, follower counts, website links, and profile details for lead generation, outreach, sales prospecting, influencer marketing, and market research.",
        "version": "0.1",
        "x-build-id": "y2HvjgapSX5nio8xY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapebridge~tiktok-phone-number-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapebridge-tiktok-phone-number-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapebridge~tiktok-phone-number-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapebridge-tiktok-phone-number-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapebridge~tiktok-phone-number-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapebridge-tiktok-phone-number-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keywords",
                    "country"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "A list of keywords to search for. (Example: John, marketing, etc.)",
                        "default": [
                            "marketing",
                            "founder"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "platform": {
                        "title": "Platform",
                        "enum": [
                            "Linkedin"
                        ],
                        "type": "string",
                        "description": "Select platform.",
                        "default": "Linkedin"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "Afghanistan (+93)",
                            "Albania (+355)",
                            "Algeria (+213)",
                            "Andorra (+376)",
                            "Angola (+244)",
                            "Antigua And Barbuda (+1-268)",
                            "Argentina (+54)",
                            "Armenia (+374)",
                            "Australia (+61)",
                            "Austria (+43)",
                            "Azerbaijan (+994)",
                            "Bahamas (+1-242)",
                            "Bahrain (+973)",
                            "Bangladesh (+880)",
                            "Barbados (+1-246)",
                            "Belarus (+375)",
                            "Belgium (+32)",
                            "Belize (+501)",
                            "Benin (+229)",
                            "Bhutan (+975)",
                            "Bolivia (+591)",
                            "Bosnia And Herzegovina (+387)",
                            "Botswana (+267)",
                            "Brazil (+55)",
                            "Brunei (+673)",
                            "Bulgaria (+359)",
                            "Burkina Faso (+226)",
                            "Burundi (+257)",
                            "Cambodia (+855)",
                            "Cameroon (+237)",
                            "Canada (+1)",
                            "Cape Verde (+238)",
                            "Central African Republic (+236)",
                            "Chad (+235)",
                            "Chile (+56)",
                            "China (+86)",
                            "Colombia (+57)",
                            "Comoros (+269)",
                            "Congo (Democratic Republic) (+243)",
                            "Congo (Republic) (+242)",
                            "Costa Rica (+506)",
                            "Croatia (+385)",
                            "Cuba (+53)",
                            "Cyprus (+357)",
                            "Czech Republic (+420)",
                            "Denmark (+45)",
                            "Djibouti (+253)",
                            "Dominica (+1-767)",
                            "Dominican Republic (+1-809)",
                            "East Timor (+670)",
                            "Ecuador (+593)",
                            "Egypt (+20)",
                            "El Salvador (+503)",
                            "Equatorial Guinea (+240)",
                            "Eritrea (+291)",
                            "Estonia (+372)",
                            "Eswatini (+268)",
                            "Ethiopia (+251)",
                            "Fiji (+679)",
                            "Finland (+358)",
                            "France (+33)",
                            "Gabon (+241)",
                            "Gambia (+220)",
                            "Georgia (+995)",
                            "Germany (+49)",
                            "Ghana (+233)",
                            "Greece (+30)",
                            "Grenada (+1-473)",
                            "Guatemala (+502)",
                            "Guinea (+224)",
                            "Guinea-Bissau (+245)",
                            "Guyana (+592)",
                            "Haiti (+509)",
                            "Honduras (+504)",
                            "Hungary (+36)",
                            "Iceland (+354)",
                            "India (+91)",
                            "Indonesia (+62)",
                            "Iran (+98)",
                            "Iraq (+964)",
                            "Ireland (+353)",
                            "Israel (+972)",
                            "Italy (+39)",
                            "Jamaica (+1-876)",
                            "Japan (+81)",
                            "Jordan (+962)",
                            "Kazakhstan (+7)",
                            "Kenya (+254)",
                            "Kiribati (+686)",
                            "Korea, North (+850)",
                            "Korea, South (+82)",
                            "Kuwait (+965)",
                            "Kyrgyzstan (+996)",
                            "Laos (+856)",
                            "Latvia (+371)",
                            "Lebanon (+961)",
                            "Lesotho (+266)",
                            "Liberia (+231)",
                            "Libya (+218)",
                            "Liechtenstein (+423)",
                            "Lithuania (+370)",
                            "Luxembourg (+352)",
                            "Madagascar (+261)",
                            "Malawi (+265)",
                            "Malaysia (+60)",
                            "Maldives (+960)",
                            "Mali (+223)",
                            "Malta (+356)",
                            "Marshall Islands (+692)",
                            "Mauritania (+222)",
                            "Mauritius (+230)",
                            "Mexico (+52)",
                            "Micronesia (+691)",
                            "Moldova (+373)",
                            "Monaco (+377)",
                            "Mongolia (+976)",
                            "Montenegro (+382)",
                            "Morocco (+212)",
                            "Mozambique (+258)",
                            "Myanmar (+95)",
                            "Namibia (+264)",
                            "Nauru (+674)",
                            "Nepal (+977)",
                            "Netherlands (+31)",
                            "New Zealand (+64)",
                            "Nicaragua (+505)",
                            "Niger (+227)",
                            "Nigeria (+234)",
                            "North Macedonia (+389)",
                            "Norway (+47)",
                            "Oman (+968)",
                            "Pakistan (+92)",
                            "Palau (+680)",
                            "Panama (+507)",
                            "Papua New Guinea (+675)",
                            "Paraguay (+595)",
                            "Peru (+51)",
                            "Philippines (+63)",
                            "Poland (+48)",
                            "Portugal (+351)",
                            "Qatar (+974)",
                            "Romania (+40)",
                            "Russia (+7)",
                            "Rwanda (+250)",
                            "Saint Kitts And Nevis (+1-869)",
                            "Saint Lucia (+1-758)",
                            "Saint Vincent And The Grenadines (+1-784)",
                            "Samoa (+685)",
                            "San Marino (+378)",
                            "Sao Tome And Principe (+239)",
                            "Saudi Arabia (+966)",
                            "Senegal (+221)",
                            "Serbia (+381)",
                            "Seychelles (+248)",
                            "Sierra Leone (+232)",
                            "Singapore (+65)",
                            "Slovakia (+421)",
                            "Slovenia (+386)",
                            "Solomon Islands (+677)",
                            "Somalia (+252)",
                            "South Africa (+27)",
                            "South Sudan (+211)",
                            "Spain (+34)",
                            "Sri Lanka (+94)",
                            "Sudan (+249)",
                            "Suriname (+597)",
                            "Sweden (+46)",
                            "Switzerland (+41)",
                            "Syria (+963)",
                            "Taiwan (+886)",
                            "Tajikistan (+992)",
                            "Tanzania (+255)",
                            "Thailand (+66)",
                            "Togo (+228)",
                            "Tonga (+676)",
                            "Trinidad And Tobago (+1-868)",
                            "Tunisia (+216)",
                            "Turkey (+90)",
                            "Turkmenistan (+993)",
                            "Tuvalu (+688)",
                            "Uganda (+256)",
                            "Ukraine (+380)",
                            "United Arab Emirates (+971)",
                            "United Kingdom (+44)",
                            "United States (+1)",
                            "Uruguay (+598)",
                            "Uzbekistan (+998)",
                            "Vanuatu (+678)",
                            "Vatican City (+39-06)",
                            "Venezuela (+58)",
                            "Vietnam (+84)",
                            "Yemen (+967)",
                            "Zambia (+260)",
                            "Zimbabwe (+263)"
                        ],
                        "type": "string",
                        "description": "Select a country to scrape related phone numbers.",
                        "default": "United Kingdom (+44)"
                    },
                    "maxPhoneNumbers": {
                        "title": "Max Phone Numbers",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "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.",
                        "default": 20
                    },
                    "engine": {
                        "title": "Engine",
                        "enum": [
                            "cost-effective",
                            "legacy"
                        ],
                        "type": "string",
                        "description": "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.",
                        "default": "legacy"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Configure proxies for this Actor."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
