# Phone Number Validator - Bulk Format & Carrier Lookup (`lentic_clockss/phone-number-intelligence`) Actor

Bulk phone number validation API for CRM and lead lists. Normalize to E.164; return country, line type, carrier, location, and timezone. Format checks only — not live reachability, ownership, or OTP verification.

- **URL**: https://apify.com/lentic\_clockss/phone-number-intelligence.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Lead generation, Developer tools, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Phone Number Validator — Bulk Format, Carrier & Location Lookup

**Validate, format, and enrich phone numbers in bulk — then download clean results as Excel, CSV, or JSON.**

This Actor is a practical **phone number validation API** for CRM cleanup, lead-list hygiene, and contact enrichment. Paste numbers from any country, optionally set a default region for local formats, and get standardized international numbers plus country, line type, carrier, location, and timezone metadata.

- Validate and normalize phone numbers to **E.164**, international, and national formats
- Detect **line type** (mobile, landline, VoIP, toll-free, premium, and more)
- Enrich with **country / region**, **carrier**, **location**, and **timezone**
- Process lists in bulk for CRM, outreach, and compliance workflows
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or Apify MCP / API
- **Pay per event** — Actor start + each result; platform usage is included (you do not pay separate Apify usage)

> Important: results are based on numbering-plan and format checks. This Actor does **not** prove live reachability, current ownership, or OTP verification, and carrier values reflect original range metadata (not necessarily today’s carrier after number portability).

---

### What does the Phone Number Validator do?

It turns a list of raw phone strings into a clean Apify Dataset of structured phone intelligence rows.

You can:

1. Paste phone numbers in mixed formats (`+1 202-555-0173`, `(415) 555-2671`, `020 7946 0958`, …)
2. Set a **default region** (e.g. `US`, `GB`) for numbers without a country prefix
3. Optionally include carrier, location, and timezone enrichment
4. Cap how many numbers to process with `maxResults`
5. Optionally dedupe by normalized E.164
6. Download results or send them into your automation stack

No local setup, browser, or third-party phone API key is required to run the Actor on Apify.

---

### What data can you extract?

| Data point | Included |
| --- | :---: |
| Original input + row index | ✅ |
| Valid / possible format checks | ✅ |
| E.164 normalized number | ✅ |
| International & national display formats | ✅ |
| Country calling code & ISO region | ✅ |
| Line type (mobile, fixed, VoIP, …) | ✅ |
| Carrier metadata (optional) | ✅ |
| Geographic description (optional) | ✅ |
| Timezones (optional) | ✅ |
| Structured error for unparseable rows | ✅ |

Every run also writes a **RUN_SUMMARY** (counts, limits, finish time). Failed input validation writes **ERROR_SUMMARY**.

---

### What you can do with it

#### 1. Clean CRM and customer databases

Standardize messy phone fields into E.164 so you can dedupe contacts, merge records, and keep dialable formats across markets.

#### 2. Improve lead-list hygiene before outreach

Flag structurally invalid or incomplete numbers before SMS, calling, or enrichment workflows — reduce bounce and wasted dials.

#### 3. Enrich contacts with region and line type

Add country, line type, location, and timezone context for routing, compliance review, and smarter follow-up timing.

#### 4. Format international numbers consistently

Convert local/national formats into standardized international dialing formats for global teams and multi-country campaigns.

#### 5. Power automations and AI agents

Schedule the Actor or call it from Make, n8n, Zapier, Sheets, CRM tools, or Apify MCP / API — then pass Dataset rows downstream.

---

### How to validate phone numbers (no code required)

1. Click **Try for free** on this Actor page  
2. Paste phone numbers into **phoneNumbers** (prefer `+` country code when you have it)  
3. Set **defaultRegion** (e.g. `US`) if some numbers are local-only  
4. Keep carrier / location / timezone toggles on (or turn off what you do not need)  
5. Click **Start** — open the **Dataset** tab when the run finishes  

Start with a small batch (`maxResults: 5–20`) to confirm formats, then scale up.

**Download as Excel, CSV, or JSON.** Or connect the Dataset to your tools via Apify integrations / API.

---

### Example input

```json
{
  "phoneNumbers": [
    "+1-202-555-0173",
    "+44 20 7946 0958",
    "(415) 555-2671",
    "+81 3-1234-5678"
  ],
  "defaultRegion": "US",
  "maxResults": 100,
  "includeCarrier": true,
  "includeGeocoding": true,
  "includeTimezone": true,
  "dedupe": false
}
````

<details>
<summary>Example output fields (JSON)</summary>

```json
{
  "input": "+1-202-555-0173",
  "inputIndex": 0,
  "possible": true,
  "validNumberPlan": true,
  "valid": true,
  "normalizedE164": "+12025550173",
  "international": "+1 202-555-0173",
  "national": "(202) 555-0173",
  "countryCallingCode": 1,
  "regionCode": "US",
  "numberType": "FIXED_LINE_OR_MOBILE",
  "originalCarrier": null,
  "geographicDescription": "Washington D.C.",
  "timezones": ["America/New_York"],
  "liveReachabilityChecked": false,
  "ownershipVerified": false,
  "error": null
}
```

</details>

***

### How much does it cost?

This Actor uses **pay-per-event** pricing:

| Event | Price |
| --- | --- |
| Actor Start (`apify-actor-start`) | **$0.005** per start |
| Result (`apify-default-dataset-item`) | **$0.50 / 1,000** numbers (**$0.0005** each) |

**Platform usage costs are included** — you do **not** pay separate Apify compute usage on top of the event prices above.

#### Example cost estimates

| Numbers processed | Approx. event cost\* |
| --- | --- |
| 100 | ~$0.055 |
| 1,000 | ~$0.505 |
| 10,000 | ~$5.005 |

\*Assumes one Actor start plus `$0.0005` per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one).

Free Apify credit can cover a small test run — try `maxResults: 5` first.

#### Free Apify plan limits (set by this Actor's developer)

| Limit | Free Apify plan | Paid Apify plan |
| --- | --- | --- |
| Runs of this Actor | **10** total | Unlimited |
| Results per run | **1,000** | Up to schema max (100,000) |

These caps are set by the Actor developer, **not Apify**. If the free-run quota is reached, the run finishes successfully with a clear status message (`FREE_TIER_LIMIT`) instead of a cryptic platform error.

***

### Tips for best results

- Prefer numbers with a `+` country code when possible
- Always set **defaultRegion** for local formats without a country prefix
- Use **dedupe** when cleaning large CRM exports
- Keep batches around **100–5,000** for comfortable Console runs; raise timeout/memory for very large jobs
- Treat `valid=true` as “structurally valid for the numbering plan,” not “this phone rings” or “this person opted in”

***

### FAQ

#### Does this check if a phone is online or can receive SMS?

No. It checks format and numbering-plan validity and returns enrichment metadata. It does not perform live reachability, HLR, or OTP ownership verification.

#### Is the carrier always the current operator?

No. Carrier values come from original number-range metadata. After number portability, the current carrier may differ.

#### Is location the user’s real GPS position?

No. Location is a geographic description associated with the number range — useful for region context, not live tracking.

#### Can I use this for marketing consent / TCPA compliance?

No. Validation is not consent. Keep your own lawful basis, opt-in records, and do-not-contact processes.

#### Do I need an external phone API key?

No. You only need Apify to run the Actor.

***

### Integrations

Use the Dataset with:

- Apify API / MCP
- Make, Zapier, n8n
- Google Sheets, Slack, CRM tools
- Any webhook or custom script that reads Apify Dataset items

***

### Related searches

phone number validation · bulk phone validator · E.164 formatter · carrier lookup · line type detection · phone number enrichment · CRM phone cleanup · lead list hygiene · international phone formatting · phone parse API

# Actor input Schema

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

Phone numbers to parse and validate. Prefer E.164 (+countrycode...). For national formats without '+', set defaultRegion. Schema allows up to 100,000; recommended batches are 100–5,000 for Console UX.

## `defaultRegion` (type: `string`):

Used when a number has no international prefix (no '+'). Example: US, GB, AU, DE. Leave empty if all numbers are E.164.

## `maxResults` (type: `integer`):

Maximum number of output rows to write. Free-plan users are capped at 1,000.

## `includeCarrier` (type: `boolean`):

When true, include originalCarrier from libphonenumber number-range metadata. This is NOT a live HLR / current-carrier lookup (portability may differ).

## `includeGeocoding` (type: `boolean`):

When true, include geographicDescription for the number range (not GPS / user location).

## `includeTimezone` (type: `boolean`):

When true, include possible timezones for the number range.

## `dedupe` (type: `boolean`):

When true, skip later duplicates that normalize to the same E.164. inputIndex still reflects the first kept occurrence.

## Actor input object example

```json
{
  "phoneNumbers": [
    "+14155552671",
    "+442071838750"
  ],
  "defaultRegion": "US",
  "maxResults": 1000,
  "includeCarrier": true,
  "includeGeocoding": true,
  "includeTimezone": true,
  "dedupe": false
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset of parsed phone numbers with formatting and offline metadata.

## `runSummary` (type: `string`):

Key-value store record with counts and engine metadata.

## `inputEcho` (type: `string`):

Key-value store record containing the Actor input used for this run.

## `errorSummary` (type: `string`):

Key-value store record with controlled failure details when the Actor fails.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "phoneNumbers": [
        "+14155552671",
        "+442071838750"
    ],
    "defaultRegion": "US",
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/phone-number-intelligence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "phoneNumbers": [
        "+14155552671",
        "+442071838750",
    ],
    "defaultRegion": "US",
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/phone-number-intelligence").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 '{
  "phoneNumbers": [
    "+14155552671",
    "+442071838750"
  ],
  "defaultRegion": "US",
  "maxResults": 1000
}' |
apify call lentic_clockss/phone-number-intelligence --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Phone Number Validator - Bulk Format & Carrier Lookup",
        "description": "Bulk phone number validation API for CRM and lead lists. Normalize to E.164; return country, line type, carrier, location, and timezone. Format checks only — not live reachability, ownership, or OTP verification.",
        "version": "0.1",
        "x-build-id": "q1ErOKRK3JTXawlw0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~phone-number-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-phone-number-intelligence",
                "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/lentic_clockss~phone-number-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-phone-number-intelligence",
                "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/lentic_clockss~phone-number-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-phone-number-intelligence",
                "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": [
                    "phoneNumbers"
                ],
                "properties": {
                    "phoneNumbers": {
                        "title": "Phone numbers",
                        "minItems": 1,
                        "maxItems": 100000,
                        "type": "array",
                        "description": "Phone numbers to parse and validate. Prefer E.164 (+countrycode...). For national formats without '+', set defaultRegion. Schema allows up to 100,000; recommended batches are 100–5,000 for Console UX.",
                        "items": {
                            "type": "string",
                            "maxLength": 64
                        }
                    },
                    "defaultRegion": {
                        "title": "Default region (ISO alpha-2)",
                        "maxLength": 2,
                        "type": "string",
                        "description": "Used when a number has no international prefix (no '+'). Example: US, GB, AU, DE. Leave empty if all numbers are E.164."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of output rows to write. Free-plan users are capped at 1,000.",
                        "default": 1000
                    },
                    "includeCarrier": {
                        "title": "Include original carrier metadata",
                        "type": "boolean",
                        "description": "When true, include originalCarrier from libphonenumber number-range metadata. This is NOT a live HLR / current-carrier lookup (portability may differ).",
                        "default": true
                    },
                    "includeGeocoding": {
                        "title": "Include geographic description",
                        "type": "boolean",
                        "description": "When true, include geographicDescription for the number range (not GPS / user location).",
                        "default": true
                    },
                    "includeTimezone": {
                        "title": "Include timezones",
                        "type": "boolean",
                        "description": "When true, include possible timezones for the number range.",
                        "default": true
                    },
                    "dedupe": {
                        "title": "Dedupe by E.164",
                        "type": "boolean",
                        "description": "When true, skip later duplicates that normalize to the same E.164. inputIndex still reflects the first kept occurrence.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
