# Ziprecruiter Phone Number Scraper - Verified Numbers (`scrapido/ziprecruiter-phone-number-scraper`) Actor

📞 ZipRecruiter Phone Number Scraper returns validated employer numbers from keyword and location search. ✅ Country code, line type and carrier per record. 🧑‍💼 Perfect for staffing agencies & HR tech calling.

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

## Pricing

from $2.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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

# README

### Ziprecruiter Phone Number Scraper 📱

**Ziprecruiter Phone Number Scraper** automates phone number collection from Ziprecruiter profiles, bios, and post content—solving the time-consuming task of hunting down contact details manually. If you’re building a **ziprecruiter scraper**-style contact list for lead outreach, or running **phone number data extraction** for HR leads, this actor helps you scale faster with cleaner targeting and exportable results.

***

### 🌟 Key Features of Ziprecruiter Phone Number Scraper

| Feature | Benefit |
|---|---|
| ✅ **Targeted Keyword Search** | Reach the exact Ziprecruiter audience you need with your own keyword list |
| ✅ **Location Filtering** | Narrow results to a specific city or region when you set `location` |
| ✅ **Country-Targeted Phone Extraction** | Focus on the phone number region you care about using `country` |
| ✅ **Max Phone Numbers Control** | Stop once you reach your desired volume using `maxPhoneNumbers` |
| ✅ **Bulk Export (Apify Dataset)** | Get structured results saved directly into your Apify dataset for downstream use |
| ✅ **Proxy-Ready for Reliability** | Uses built-in proxy support to keep long scraping runs stable |
| ✅ **Real-Time Saving** | Results are pushed incrementally to your dataset as they’re discovered |
| ✅ **Resilient Long Runs** | Designed for large scraping tasks with timeout controls available in Run Options |

***

### 📥 Input — Ziprecruiter Phone Number Scraper Parameters

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

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | Array | ✅ Yes | — | Enter keywords to search for (used to find relevant Ziprecruiter profiles, bios, and post content) for your job board contact scraper and lead generation automation workflow. |
| `location` | String | No | `""` | Filter by location (e.g., `London`, `California`). Leave empty for global targeting. |
| `country` | String | ✅ Yes | `United Kingdom (+44)` | Select the country to target for phone numbers (includes a dial code, like `United States (+1)` or `United Kingdom (+44)`). |
| `maxPhoneNumbers` | Integer | No | `20` | Stop scraping after this many phone numbers are found. Increase the limit if you want a bigger prospecting list building batch. |

***

### 📤 Output — What Ziprecruiter Phone Number Scraper Returns

The actor saves each result as a JSON record in your Apify dataset.

```json
{
  "keyword": "marketing",
  "title": "Marketing Coordinator | Startup Growth",
  "description": "Marketing-focused professional sharing updates and post content on Ziprecruiter. Public profile bio includes contact details.",
  "url": "https://www.ziprecruiter.com/candidate/marketing-coordinator-jonathan-reed",
  "phone_number": "+447911123456",
  "country": "United Kingdom",
  "dial_code": "+44"
}
```

| Field | Label | Format | Description |
|---|---|---|---|
| `keyword` | Keyword | text | The keyword from your input that helped surface this Ziprecruiter contact record. |
| `title` | Title | text | The profile title / heading associated with the result. |
| `description` | Description | text | The scraped profile bio or post content snippet where the phone number was found. |
| `url` | Url | link | The direct Ziprecruiter URL for the profile/content source. |
| `phone_number` | Phone Number | text | The extracted phone number in E.164-style formatting (as produced by the scraper). |
| `country` | Country | text | The target country name used for extraction (from your selected `country`). |
| `dial_code` | Dial Code | text | The dial code corresponding to the selected country (for example, `+44`). |

***

### 💻 How to Use Ziprecruiter Phone Number Scraper — Step-by-Step

1. **Open the Actor** — Find **Ziprecruiter Phone Number Scraper** on Apify Store
2. **Enter Keywords** — Add job titles, roles, or phrases you want to target for contact information scraping
3. **Set Location (optional)** — Provide a city or region to refine results for web scraping for HR leads
4. **Choose Country** — Select the `country` whose phone numbers you want to extract
5. **Adjust Max Phone Numbers (optional)** — Set `maxPhoneNumbers` to control run size and lead generation automation costs
6. **Run the Actor** — Start the job and monitor progress in the logs
7. **Export Results** — Open the dataset to download and use in your ZIP-related prospecting list building workflow

*No coding required. Results are ready in minutes.*

***

### 💡 Best Use Cases for Ziprecruiter Phone Number Scraper

- 📈 **Lead Generation Automation** — Build a phone-first outreach list from public Ziprecruiter bios and profiles
- 🤝 **Contact Enrichment** — Add phone number data to existing CRM records for faster candidate contact enrichment
- 🧭 **Job Board Contact Scraper** — Find region-specific phone contacts aligned with your HR leads workflow
- 🔬 **Market Research** — Analyze how different industries/roles present public contact details on Ziprecruiter
- 📊 **Email and Phone Extraction** — Pair this with your email finding steps to grow a more complete prospect profile

***

### Disclaimer

This actor collects information only from **publicly available sources** on Ziprecruiter. It does not access private profiles, authenticated content, or password-protected pages. You are responsible for complying with applicable laws and platform rules (including GDPR/CCPA where relevant) and for using the data ethically and responsibly for legitimate purposes like lead generation, research, and marketing. For data-removal requests, contact 📧 <scrapidocontact@gmail.com>.

***

### 🆘 Support & Feedback

Have a question or found an issue with the Ziprecruiter Phone Number Scraper? We're here to help.

- 🐞 **Bug Reports:** Open a ticket in the repository's Issues section
- ✨ **Custom Solutions & Feature Requests:** Reach out to our team
- 📧 **Email:** <scrapidocontact@gmail.com>

Your feedback shapes improvements—thanks for building with us!

### Multiple Phone Type

**Phone Types** replaces the old single Number Type choice: select as many kinds
of line as you want and the run collects all of them.

| Type | Kept when the number is |
| --- | --- |
| Mobile | A confirmed mobile |
| Landline | A confirmed fixed line |
| Toll-Free | A freephone number |
| VoIP | An internet-telephony number |
| Premium-Rate | A premium-rate number |
| Shared-Cost | A shared-cost number |

Leave it empty for every type. Each number is checked against its *real* line
type before being kept, so the filter is enforced rather than merely requested.
Numbers on ranges where mobile and landline genuinely cannot be told apart (the
US, Canada and Mexico) are kept rather than silently dropped - discarding them
would quietly lose good leads.

### Outreach links

| Field | Meaning |
| --- | --- |
| `telLink` | A clickable `tel:` link, so a row can be dialled straight from a spreadsheet or CRM |
| `whatsappLink` | A `wa.me` chat link, or empty for a confirmed landline or a number that failed validation |
| `whatsappCapable` | Whether the number is on a line WhatsApp can run on |

`whatsappCapable` is a plain yes/no you can filter on. It never claims the
person actually uses WhatsApp - only that the number is of a kind that could.
Switch the links off with **Include WhatsApp links**; the capability flag is
still reported.

# Actor input Schema

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

Enter keywords to search for (e.g., 'Target Keyword').

## `location` (type: `string`):

Filter by location (e.g., 'London', 'California'). Leave empty for global search.

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

Select the country to target for phone numbers.

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

Stop scraping after this many phone numbers are found. Setting a higher limit extends the scraping duration.

## `numberType` (type: `string`):

Restrict results to a specific line type, classified offline via libphonenumber. Any keeps every valid match.

## `phoneTypes` (type: `array`):

Which kinds of line to collect. Pick as many as you like - each number is checked against its real line type before it is kept. Leave empty for every type. Numbers on ranges where mobile and landline cannot be told apart (the US, Canada and Mexico) are always kept rather than silently dropped.

## `includeWhatsappLinks` (type: `boolean`):

Add a ready-made wa.me chat link for numbers on a line WhatsApp can run on. The link means the number is in a form WhatsApp accepts - not proof that an account exists.

## Actor input object example

```json
{
  "keywords": [
    "recruiter",
    "hiring manager"
  ],
  "country": "United States (+1)",
  "maxPhoneNumbers": 20,
  "numberType": "Any",
  "phoneTypes": [
    "Mobile"
  ],
  "includeWhatsappLinks": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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": [
        "recruiter",
        "hiring manager"
    ],
    "phoneTypes": [
        "Mobile"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/ziprecruiter-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": [
        "recruiter",
        "hiring manager",
    ],
    "phoneTypes": ["Mobile"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapido/ziprecruiter-phone-number-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "recruiter",
    "hiring manager"
  ],
  "phoneTypes": [
    "Mobile"
  ]
}' |
apify call scrapido/ziprecruiter-phone-number-scraper --silent --output-dataset

```

## MCP server setup

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

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5ALGjkAjtjepj4fcm/builds/6Cr542zQYx4Cr2yza/openapi.json
