# Facebook Phone Number Scraper (`scrapeflux/facebook-phone-number-scraper`) Actor

📱 Facebook Phone Number Scraper extracts phone numbers from public Facebook profiles & pages—fast, accurate, and built for B2B lead generation. 🚀 Use it for sales prospecting, outreach, and market research. 🔎 Get more contacts in less time!

- **URL**: https://apify.com/scrapeflux/facebook-phone-number-scraper.md
- **Developed by:** [ScrapeFlux](https://apify.com/scrapeflux) (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 $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 🚀

Trying to build a prospect list but wasting hours hunting phone numbers one by one? **Linkedin Phone Number Scraper** automates phone number collection from public LinkedIn bios, profiles, and posts tied to your keywords—so you can move faster with your lead generation. It’s a strong fit for a **linkedin phone number scraper**, a **linkedin contact scraper**, and anyone doing **linkedin lead scraper** work. This actor is built for marketing teams, sales prospectors, and researchers who want targeted contact data at scale. In one run, you can collect up to **maxPhoneNumbers** unique results while controlling search size and runtime.

---

### See the Data: Sample Output

Here's a real record from a single run:

```json
{
  "platform": "Facebook",
  "keyword": "marketing",
  "title": "Marketing Lead",
  "description": "Founder • Marketing • Call us at +44 20 7946 0958",
  "url": "https://www.linkedin.com/some-public-profile-or-post",
  "phone_number": "+442079460958",
  "country": "United Kingdom",
  "dial_code": "+44",
  "proxyGroups": [
    "cost-effective"
  ],
  "status": "ok",
  "error_message": null
}
````

> Note: The actor pushes data fields as shown below (including `platform: "Facebook"` and `proxyGroups` containing the input engine/proxy selection). If a run encounters issues, records may be missing or empty depending on availability of public phone numbers.

**Output fields (what you can use downstream):**

| Field | Type | What It Tells You |
|---|---|---|
| `platform` | string | The platform label stored with each result record (pushed as `"Facebook"` in the actor output). |
| `keyword` | string | The keyword term that led to the discovery context for this phone number. |
| `title` | string | The title text extracted from the source record (useful for understanding context). |
| `description` | string | Nearby text where the phone number was detected, helpful for validation and auditing. |
| `url` | string | The source link associated with the extracted phone number. |
| `phone_number` | string | The validated phone number formatted in E.164 style (deduplicated across the run). |
| `country` | string | The selected country used as the target phone-number region filter. |
| `dial_code` | string | The dial code associated with the selected country (from your `country` selection). |
| `proxyGroups` | array | The proxy/engine configuration passed into the record (useful for traceability). |
| `status` | string | A simple status indicator you can add in your pipeline (if you track job-level success). |
| `error_message` | string or null | If errors occur at push time, you can capture them in your own workflow; the actor logs push failures. |

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 used to find relevant public LinkedIn bios, profiles, and posts that may contain phone numbers. |
| `platform` | ⬜ | Selects the platform. This actor supports `Linkedin`. |
| `country` | ✅ | Selects a country whose dial code is used to target phone numbers for that region. |
| `maxPhoneNumbers` | ⬜ | Caps how many unique phone numbers the scraper will collect before stopping. |
| `engine` | ⬜ | Chooses the scraping engine mode: `cost-effective` or `legacy`. |
| `proxyConfiguration` | ⬜ | Configure proxies for this Actor (for better reliability at scale). |
| `↳ proxy support` | ⬜ | When using Apify proxy, route requests through Apify Proxy for improved reliability. |

***

### What It Does

This actor searches public web data related to your provided keywords and extracts phone numbers, deduplicating them and writing each result to your dataset as it’s found.

#### Scrapes phone numbers tied to your keywords

You provide `keywords`, and the actor collects phone numbers that appear in public LinkedIn bios, profiles, and posts associated with those terms. If you’re building a **linkedin phone number scraper** workflow for prospecting, your keyword choices directly shape what your **linkedin lead scraper** returns.

#### Filters by country dial code

The `country` input determines which regional dial code is targeted. This helps you keep the output aligned with your ICP region—useful when you’re running a **linkedin company phone number scraper** for multi-country outreach.

#### Stops safely at your result cap

With `maxPhoneNumbers`, the actor halts once it reaches your unique phone number limit. This keeps runs predictable for teams that need controlled data collection time and cost.

#### Built-in proxy support for more reliable scraping

You can use the `proxyConfiguration` input to enable proxy support for this actor. The goal is to help scraping stay stable during larger runs, which matters for a **linkedin prospecting scraper tool**.

#### Deduplicates phone numbers (E.164 formatting)

Phone numbers are normalized using the `phonenumbers` library and formatted in E.164 style (stored as `phone_number`). The actor avoids pushing duplicates via a run-level `seen_numbers` set.

#### Emits structured records to the dataset

For each found phone number, the actor pushes a JSON row with fields like `keyword`, `title`, `description`, `url`, `phone_number`, `country`, and `dial_code`. That makes it easy to plug directly into analytics, enrichment, or **linkedin email and phone scraper** pipelines that start from phone-first discovery.

Overall, **Linkedin Phone Number Scraper** turns keyword-driven searching into clean, deduplicated phone-number datasets—fast enough for outreach workflows.

***

### Why Linkedin Phone Number Scraper?

There are plenty of ways to pull contact data from public web sources—here’s why **Linkedin Phone Number Scraper** stands out.

#### Keyword-controlled targeting (lead-friendly output)

Because you drive discovery with your own `keywords`, the results naturally align to your prospecting themes (e.g., marketing, founder, or role-based terms). This is exactly what you want from a **linkedin contact information scraper** when building lists for campaigns.

#### Country-aware phone filtering

By selecting `country`, the actor focuses on phone numbers for your target region and stores `dial_code` alongside each result. That helps keep your output usable for real dialing and region-specific segmentation.

#### Output written per result for smooth pipelines

The actor pushes data to the dataset as it finds it, so you can start working with partial results instead of waiting for a whole run to finish. If you’re doing **linkedin data extraction tool** style processing, this reduces “time to first records.”

***

### Real-World Use Cases

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

**Sales Teams**
Sales teams often need **linkedin lead generation scraper** outputs quickly to keep outbound sequences moving. They run the actor with a role-focused keyword list, choose a target country dial code, and export the dataset for dialing and call-script research. The result is a prospect sheet built from phone-first contact discovery rather than slow manual lookups.

**Marketing Agencies**
Agencies supporting multiple clients need consistent lead data formats across projects. They use **linkedin phone number scraper** runs per keyword theme (like “marketing” and “founder”), then feed the exported dataset into their client CRM for campaign workflows. This turns public-source contact discovery into a repeatable production process.

**Freelance Researchers**
Freelancers compiling market or company contact datasets can use **linkedin lead scraper** outputs as a starting point for verification and enrichment. By filtering to a specific `country`, they keep results relevant to the market they’re researching. They export JSON/CSV/Excel and combine it with other sources downstream.

**Developers & Data Engineers**
Automation specialists can run the actor on a schedule and push results into their data warehouse or enrichment tools. Because the actor outputs consistent JSON records with fields like `phone_number`, `country`, and `url`, it’s straightforward to map into a pipeline and track deduped phone numbers across runs. This is a practical **linkedin phone number finder** building block inside bigger workflows.

***

### 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 **Linkedin Phone Number Scraper**.
2. **Enter your inputs** — set `keywords` and `country` (both are required). Optionally set `maxPhoneNumbers`, `engine`, and `proxyConfiguration`.
3. **Choose your engine** — pick `engine` as `legacy` or `cost-effective` depending on your reliability/cost preference.
4. **Start the run** — launch the actor and watch live logs for progress.
5. **Open the Dataset tab** — records appear as the actor pushes results while running.
6. **Export your results** — download as JSON, CSV, or Excel from the dataset tab.
7. **Iterate if needed** — if results seem low, broaden keyword coverage and/or increase `maxPhoneNumbers`.

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 from the Apify dashboard in **JSON, CSV, or Excel** directly from the dataset tab. If you need spreadsheet-ready files, start with CSV for quick import.

For integrations, you can pull results programmatically via the **Apify API** and also use automation tools like **Zapier** or **Make** (or your own webhook-based pipeline) to push the dataset into downstream systems. Scheduled runs can also be configured in Apify for repeatable **linkedin prospecting scraper tool** operations.

***

### Pricing

**Linkedin Phone Number Scraper** runs on Apify, which includes a **free tier** — no credit card needed to start. Free tier access gives you room for a few real test runs to validate your keyword strategy and dial code targeting.

For larger batches, runs are typically **pay-as-you-go** based on Apify compute usage, with subscription plans available for heavier workloads. Check the Apify pricing page for current limits and plan details, then scale when you’re confident in your **linkedin contact scraper** inputs. Start free at [apify.com](https://apify.com) — scale up when you need to.

***

### Reliability & Limitations

| What We Handle | How |
|---|---|
| Result limiting | Stops when `maxPhoneNumbers` is reached to keep runs controlled. |
| Phone normalization & deduplication | Uses phone number formatting and a `seen_numbers` set to avoid duplicates. |
| Proxy support | You can configure `proxyConfiguration` to improve reliability for larger jobs. |
| Resilience through retries/fallbacks | Includes retry and fallback logic to reduce failed fetches. |
| Partial progress | Progress is saved and results are pushed during execution. |

Limitations: the actor can only extract phone numbers that are available from publicly accessible sources; it cannot retrieve data that is not publicly visible. Very broad searches can increase runtime, while narrow keyword lists can reduce result volume—tune `keywords` and `maxPhoneNumbers` accordingly.

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

***

### Frequently Asked Questions

#### Is there a free plan?

Yes. Apify provides a free tier so you can test **Linkedin Phone Number Scraper** with real inputs before scaling up.

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

No. This actor scrapes **publicly available data** related to LinkedIn bios, profiles, and posts—no login is required.

#### How accurate is the extracted data?

The phone numbers are extracted from publicly available text and normalized into E.164 format as `phone_number`. Accuracy depends on what’s actually present in the source content tied to your `keywords` and `country`.

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

You can collect up to `maxPhoneNumbers` unique `phone_number` values per run. Setting a higher cap can increase the chance of more results, but it doesn’t guarantee reaching that exact number.

#### How fresh is the data?

The dataset reflects what’s publicly accessible at the time you run the actor. For the most up-to-date results, re-run periodically as part of your **linkedin lead scraper** workflow.

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

The actor works with **publicly available data**. It’s your responsibility to comply with GDPR, CCPA, spam regulations, and platform terms when using, storing, and contacting people.

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

Yes. You can export from the Apify dataset tab as JSON, CSV, or Excel, then import into Google Sheets or other tools that accept those formats.

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

Yes. On Apify you can run the actor on a schedule for repeated scraping, which is useful for ongoing **linkedin data extraction tool** pipelines.

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

Yes. Apify supports programmatic access via the Apify API so you can retrieve dataset output and integrate it into your tooling.

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

If page fetching fails or results are blocked, the actor uses retry/fallback logic and may stop a keyword run depending on conditions. You’ll still get dataset outputs for successful pushes, and failures will be visible via run logs—while the actor also persists progress during execution.

***

### 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 welcome ideas like additional output fields for easier CRM mapping, or better keyword guidance for prospecting teams.

**publicly available data** is used by this actor. It does not access private accounts, login-gated pages, or password-protected content. You’re responsible for following GDPR, CCPA, spam regulations, and platform Terms of Service when using the results. 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("scrapeflux/facebook-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("scrapeflux/facebook-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 scrapeflux/facebook-phone-number-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Phone Number Scraper",
        "description": "📱 Facebook Phone Number Scraper extracts phone numbers from public Facebook profiles & pages—fast, accurate, and built for B2B lead generation. 🚀 Use it for sales prospecting, outreach, and market research. 🔎 Get more contacts in less time!",
        "version": "0.1",
        "x-build-id": "NIbWJylIyQk1FkgJ8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapeflux~facebook-phone-number-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapeflux-facebook-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/scrapeflux~facebook-phone-number-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapeflux-facebook-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/scrapeflux~facebook-phone-number-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapeflux-facebook-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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
