# Zillow Phone Number Scraper - Keyword Search, Verified Numbers (`scrapido/zillow-phone-number-scraper`) Actor

📞 Zillow Phone Number Scraper finds agent and broker numbers via keyword and location search. ✅ Validated results with country code, line type and carrier. 🔑 Built for real estate cold calling & proptech sales.

- **URL**: https://apify.com/scrapido/zillow-phone-number-scraper.md
- **Developed by:** [Scrapido](https://apify.com/scrapido) (community)
- **Categories:** Lead generation, Real estate, 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

### Zillow Phone Number Scraper

**Zillow Phone Number Scraper** is an Apify automation actor that saves you hours of manual research by extracting phone numbers from Zillow profiles, bios, and post content using your keywords and country targeting. It’s built for sales professionals, marketers, and researchers who need a ready-to-use property contact details dataset fast—so you can move from prospecting to outreach with less friction using a Zillow phone number scraper or a scrape Zillow listings workflow.

***

### What is Zillow Phone Number Scraper? 🔍

**Zillow Phone Number Scraper** is an Apify actor that automates extraction of phone numbers from Zillow using keywords and country targeting. It functions as a Zillow phone number scraper and “Zillow data extraction” tool—helping you assemble a focused list of real estate contact scraper style leads without spending your day clicking through individual profiles. Whether you’re building a property leads list or enriching contact data for real estate marketing automation, this automated Zillow scraping helps you structure results into clean records. It’s also useful as a Zillow API alternatives option when you want a simple web scraping approach for contact data enrichment.

***

### What Does Zillow Phone Number Scraper Do? ⚙️

It takes your input (keywords, optional location filter, and a selected country dialing context), scrapes matching Zillow pages, and outputs a structured dataset of phone numbers and the source context for each record. Use it as a Zillow lead generator to find property contact details for outreach and segmentation.

- 🔍 **Searches** Zillow using your keywords and country targeting to identify relevant profiles and public content
- 📞 **Extracts** phone numbers from publicly available Zillow bios, profiles, and post content
- 🌍 **Targets** results by country dialing context (dial code) and optionally filters by location
- 📊 **Structures** output as clean dataset records with the keyword and source page URL included
- 💾 **Stops** at a controlled result cap using **maxPhoneNumbers** to manage run duration

***

### What Would Results from Zillow Phone Number Scraper Look Like? 👀

You’ll get a dataset row per scraped contact entry, including the keyword context and the matched phone number.

```json
{
  "keyword": "founder",
  "title": "Alex Morgan",
  "description": "Contact details on Zillow profile bio mentioning founder/marketing",
  "url": "https://www.zillow.com/profile/alex-morgan/",
  "phone_number": "+447700900123",
  "country": "United Kingdom",
  "dial_code": "+44"
}
```

After the run, export the Apify dataset (JSON/CSV) from the Dataset tab.

***

### Capabilities of Zillow Phone Number Scraper 🛠️

| Capability | What It Means for You |
|---|---|
| ✅ **Keyword targeting** | Use specific keywords to improve relevance when you scrape Zillow listings for lead generation |
| ✅ **Country selection** | Target the country whose phone numbers you care about (dial code is included in the output) |
| ✅ **Location filter (optional)** | Narrow results to a specific city/region/country when building a property leads list |
| ✅ **Smart maxPhoneNumbers cap** | Control runtime by stopping after a defined number of phone numbers are found |
| ✅ **Built-in proxy support** | Helps maintain scraping reliability for larger tasks with Apify Proxy support |
| ✅ **Resumable progress** | Supports continuing a run so you don’t have to restart from scratch if you pause or stop |
| ✅ **Structured dataset output** | Results are stored immediately into the **Zillow Phone Numbers Dataset** as clean JSON records |
| ✅ **Designed for bulk extraction** | Useful for repeatable Zillow data extraction workflows and contact data enrichment |

***

### Launch Your First Zillow Phone Number Scraper Task 🚀

Below is the fastest way to get your first Zillow owner contact info results.

#### Required Input Fields

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | array | ✅ Yes | `["marketing","founder"]` | Search terms used to target relevant Zillow profiles/bios/post content |
| `location` | string | No | `""` | Optional location filter (for example, a city, region, or country). Leave empty for global search |
| `country` | string | ✅ Yes | `United Kingdom (+44)` | Select the country to target for phone numbers (phone dial code is derived from this selection) |
| `maxPhoneNumbers` | integer | No | `20` | Stop scraping after this many phone numbers are found to control run duration |

#### Required Output Fields

Each dataset record includes the following fields:

| Field | Type | Description |
|---|---|---|
| `keyword` | text | The keyword that matched this record |
| `title` | text | The name/title associated with the Zillow contact/source |
| `description` | text | Text context from the source page (bio/profile/post content) |
| `url` | link | The Zillow page URL where the phone number was found |
| `phone_number` | text | Extracted phone number in the selected country context (includes dial formatting) |
| `country` | text | Country name used for targeting |
| `dial_code` | text | Dial code derived from the selected country |

**Step-by-step launch guide:**

1. **Open** the actor in Apify and go to **Input**
2. **Add your `keywords`** (try variants that match real estate contact and property context)
3. **Set `country`** to the phone number destination you’re targeting
4. **Optional:** set `location` to narrow the property contact details you want
5. **Optional:** set `maxPhoneNumbers` to control run time
6. **Click Start** and monitor progress in live logs
7. **Export results** from the Dataset tab

***

### Solving Real Problems with Zillow Phone Number Scraper 💼

- 🎯 **Sales Prospecting** — quickly scrape Zillow leads for outreach without hours of manual searching
- 📣 **Campaign Targeting** — build segments using phone and source context from Zillow for real estate marketing automation
- 🤝 **Hiring & Networking** — reach out to people tied to properties and local businesses
- 🔬 **Competitive Research** — map contact availability and positioning across a region
- ⚙️ **Automated Pipelines** — schedule recurring Zillow data extraction runs for ongoing lead flow

***

### What Sets Zillow Phone Number Scraper Apart? 🏆

- ✅ **Focused output for phone numbers** — designed specifically for phone number extraction from Zillow profiles/bios/post content
- 🔎 **Audience-relevant targeting** — your keywords plus country selection help you find the right phone contacts faster
- 📊 **Dataset-first workflow** — results land in a structured Zillow Phone Numbers Dataset ready for analysis or enrichment
- 🧰 **Proxy support for reliability** — helps keep larger tasks running smoothly with built-in proxy support

***

### Search Limits and Capacity 📈

Use **maxPhoneNumbers** to cap results per run (minimum 1, maximum 10,000; default is 20). The dataset grows based on how many matching public phone numbers are discoverable for your keyword set and country targeting. For larger tasks, plan for longer runtimes and rely on proxy support. The actor stores results in the dataset incrementally as they’re found, making it easier to iterate on a Zillow phone number scraper workflow.

***

### Is It Legal to Scrape Zillow? ⚖️

This actor collects data only from **publicly available sources**. It does not require logins or access restricted content. Public web scraping is generally considered lawful, but compliance depends on your jurisdiction and use case—especially for GDPR/CCPA and anti-spam rules. Always follow Zillow’s Terms of Service and applicable data privacy regulations. For any data-removal or compliance inquiries, contact <scrapidocontact@gmail.com>.

***

### Ending Note ✉️

Stop spending hours manually chasing property contact details on Zillow. **Zillow Phone Number Scraper** helps you extract phone numbers with keyword and country targeting, then deliver structured results directly into your Apify dataset—so you can test outreach and enrichment faster with less effort.

***

### FAQ — Zillow Phone Number Scraper ❓

#### How Does the Zillow Phone Number Scraper Work?

You provide `keywords` (and a required `country`, with an optional `location` filter). The actor searches Zillow for matching public content and extracts phone numbers. Each match is saved immediately as a dataset record in the **Zillow Phone Numbers Dataset**.

#### What Types of Zillow Profiles Can I Target?

The actor is designed to scrape phone numbers from Zillow bios, profiles, and post content. It focuses on public information and returns records only when phone numbers are found within the scraped content.

#### What Determines the Volume of Results I Get?

Result volume depends on how many Zillow pages match your `keywords` and how relevant phone numbers are for the selected `country` (dial code). If you see fewer results than expected, try broader keywords or adjust country/location targeting to improve coverage.

#### Why Use a Zillow Phone Number Scraper Instead of Manual Research?

Manual research is slow and inconsistent—especially when you need property contact details across multiple accounts. A Zillow data extraction tool automates the collection process and structures the output for easier import into your outreach and enrichment pipeline.

#### How Do I Control Run Time and Output Size?

Use `maxPhoneNumbers` to stop the run after the actor finds a specific number of phone numbers. This is the key control to manage duration and output size for a Zillow lead generator workflow.

#### What Dataset Output Will I Receive?

You’ll receive dataset items with these fields (in this exact order): `keyword`, `title`, `description`, `url`, `phone_number`, `country`, `dial_code`. This makes it straightforward to clean, deduplicate, and analyze your Zillow owner contact info.

#### How Do I Get Support or Request Improvements?

If you need help with custom scraping needs or want to request an improvement, contact <scrapidocontact@gmail.com>.

***

### 🆘 Support & Feedback

Have a question or found an issue with the Zillow Phone Number Scraper?

For support, feature requests, or data-related concerns, email <scrapidocontact@gmail.com>.

### 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": [
    "real estate agent",
    "realtor"
  ],
  "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": [
        "real estate agent",
        "realtor"
    ],
    "phoneTypes": [
        "Mobile"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/zillow-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": [
        "real estate agent",
        "realtor",
    ],
    "phoneTypes": ["Mobile"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapido/zillow-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": [
    "real estate agent",
    "realtor"
  ],
  "phoneTypes": [
    "Mobile"
  ]
}' |
apify call scrapido/zillow-phone-number-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapido/zillow-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/M3gYMsUQVn19X9djn/builds/TkrVpc91xT075Iuap/openapi.json
