# Zillow Agent Leads Scraper — Phone, Email & License (`scrapersdelight/zillow-agent-leads-scraper`) Actor

Scrape Zillow listings WITH the listing agent's contact the others skip: agent name, direct phone, email, license number and broker, plus property core (address, price, beds/baths, zpid). By location, ZIP, a search URL, or a list of zpids. US residential, no login.

- **URL**: https://apify.com/scrapersdelight/zillow-agent-leads-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.50 / 1,000 per agent lead returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 🏠 Zillow Agent Leads Scraper — Phone, Email & License the Others Skip

**Scrape Zillow listings *with the listing agent's contact* — agent name, direct phone, email, license number, and broker — plus the property core (address, price, beds/baths, zpid). Search by city/ZIP, paste Zillow URLs, or pass a list of zpids. US residential, no login.**

> 🕒 Last updated: 2026-07-09 · 🧑‍💼 Listing-agent contact on every row · 🇺🇸 US listings · 🚫 No login or API key · 🔌 Straight from Zillow's own page data

Most Zillow scrapers hand you the listing — price, beds, baths, an address — and stop right where the money is. **This one keeps going and pulls the listing agent's actual contact details**: name, the direct phone shown on the listing, email when Zillow exposes it, state license number, and the brokerage. Turn any Zillow search into a clean, agent-level lead list for outreach, recruiting, or CRM enrichment. Export to JSON, CSV, Excel, or Google Sheets, or pull it via API.

---

### What it does

- 🧑‍💼 **The agent fields others omit** — `agentName`, `agentPhoneNumber` (the direct number on the listing), `agentEmail`, `agentLicenseNumber`, plus `brokerName` and broker phone, and any co-agent.
- 🏠 **Full property core** — address, price, beds, baths, living area, home type, status, year built, days on Zillow, lat/long, and the `zpid`.
- 🔎 **Search any way** — by **location** (`"Austin, TX"`, `"Miami, FL"`, `"90210"`), by pasting **Zillow search or listing URLs**, or by a list of **zpids**.
- 🏷️ **For sale, for rent, or recently sold** — pick the listing status for a location search.
- 🇺🇸 **Built for Zillow's anti-bot** — runs on Apify **US residential** proxies with session seeding + automatic IP rotation, so listings come back populated, not blocked.

### 📊 Output — agent + property in one flat record

Every listing comes back as a flat JSON record. The fields that matter:

| Field | Type | Example |
|---|---|---|
| 🧑‍💼 `agentName` | text | `Kristie Bryant` |
| 📞 `agentPhoneNumber` | text | `(512) 994-9206` |
| ✉️ `agentEmail` | text | `agent@brokerage.com` |
| 🪪 `agentLicenseNumber` | text | `0654321` |
| 🏢 `brokerName` | text | `Keller Williams Realty` |
| 🏠 `address` | text | `4907 Watusi Bnd #2, Austin, TX 78732` |
| 💵 `price` | number | `750000` |
| 🛏️ `beds` / 🛁 `baths` | number | `4` / `3` |
| 🔢 `zpid` | text | `337141915` |
| 🔗 `url` | link | `https://www.zillow.com/homedetails/.../337141915_zpid/` |

Plus `coAgentName`, `coAgentPhoneNumber`, `coAgentLicenseNumber`, `brokerPhoneNumber`, `mlsId`, `mlsName`, `city`, `state`, `zipcode`, `livingArea`, `homeType`, `homeStatus`, `yearBuilt`, `daysOnZillow`, `latitude`, `longitude`.

<details><summary>🏠 Sample record</summary>

```json
{
  "zpid": "337141915",
  "url": "https://www.zillow.com/homedetails/4907-Watusi-Bnd-2-Austin-TX-78732/337141915_zpid/",
  "agentName": "Kristie Bryant",
  "agentPhoneNumber": "(512) 994-9206",
  "agentEmail": null,
  "agentLicenseNumber": null,
  "brokerName": "Keller Williams Realty",
  "address": "4907 Watusi Bnd #2, Austin, TX 78732",
  "price": 750000, "beds": 4, "baths": 3, "livingArea": 2586,
  "homeType": "SINGLE_FAMILY", "homeStatus": "FOR_SALE",
  "city": "Austin", "state": "TX", "zipcode": "78732",
  "scraped_at": "2026-07-09T00:00:00.000Z"
}
````

</details>

> 💡 `agentEmail` and `agentLicenseNumber` are populated by Zillow on a subset of listings (some MLS feeds withhold them). When present, you get them; the agent name, direct phone, and brokerage come back on virtually every listing.

***

### Who it's for

- 📇 **Real-estate recruiters & brokerages** building agent outreach lists by market.
- 🛠️ **PropTech / SaaS sales** targeting active listing agents with a real buying signal (a live listing).
- 📈 **Mortgage, title, insurance & staging vendors** sourcing the agent behind each new listing.
- 🔄 **CRM enrichment** — turn a location or a batch of zpids into agent-level contacts.

### How to use it

1. Click **Try for free**.
2. Enter a **Search location** (e.g. `Austin, TX`) and pick a **Listing status** — *or* paste **Start URLs** / **zpids**.
3. Set **Max results** and click **Start**.
4. Export from the **Dataset** tab (JSON, CSV, Excel, Google Sheets) or via API.

#### Examples

Every for-sale listing + agent in a city:

```json
{ "searchLocation": "Austin, TX", "listingStatus": "for_sale", "maxResults": 100 }
```

Specific listings by zpid:

```json
{ "zpids": ["337141915", "29466492"] }
```

From a Zillow search URL you already have:

```json
{ "startUrls": ["https://www.zillow.com/homes/for_sale/Miami,-FL_rb/"], "maxResults": 200 }
```

***

### ❓ FAQ

**What contact details do I actually get?** The agent name, the direct phone number shown on the listing, the brokerage, and — when Zillow exposes them — the agent's email and state license number, plus any co-agent.

**Why do some rows have a null email or license?** Zillow only publishes those for a subset of listings (the source MLS decides). The name, phone, and brokerage are near-universal.

**Do I need a login or API key?** No. It reads Zillow's public listing data — no account, no key.

**Why residential proxies?** Zillow fronts PerimeterX and blocks datacenter IPs. The Actor defaults to Apify **US residential** with session seeding and IP rotation so pages return populated data.

**Can I scrape for-rent or sold listings?** Yes — set `listingStatus` to `for_rent` or `sold` for a location search.

**Can I export to Excel or Google Sheets?** Yes — the dataset exports to JSON, CSV, Excel, or Google Sheets, or via API.

**How much does it cost?** Pay-per-result — you only pay for the listings returned. It's free to try.

### Notes & fair use

You are responsible for complying with Zillow's Terms of Service and all applicable laws. This Actor reads publicly available real-estate listing data (the same agent contact Zillow shows on each listing page). Use the contact data responsibly and in line with anti-spam and privacy rules in your jurisdiction.

# Actor input Schema

## `searchLocation` (type: `string`):

City + state, ZIP, or neighborhood to search on Zillow, e.g. "Austin, TX", "Miami, FL" or "90210". Every matching listing is scraped and enriched with its agent's contact. Leave blank if you use Start URLs or zpids instead.

## `listingStatus` (type: `string`):

Which listings to pull for the Search location above: for-sale, for-rent, or recently sold.

## `startUrls` (type: `array`):

Optional. Paste Zillow URLs directly — either search-results pages (e.g. https://www.zillow.com/homes/for\_sale/Austin,-TX\_rb/) or individual listing pages (https://www.zillow.com/homedetails/.../<zpid>\_zpid/). Each type is auto-detected.

## `zpids` (type: `array`):

Optional. Scrape specific listings by their Zillow property id (zpid), e.g. "337141915". Each is fetched directly and enriched with the listing agent's contact.

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

Cap on the number of listings returned this run (cost/speed guard). Default 100; set 0 to pull the whole search scope (up to a safety cap).

## `requestConcurrency` (type: `integer`):

How many listing pages to fetch in parallel. Higher = faster; keep modest so Zillow's anti-bot doesn't throttle the run.

## `proxyConfiguration` (type: `object`):

Proxy settings. Zillow blocks datacenter IPs (PerimeterX), so US RESIDENTIAL is the default and strongly recommended for reliable results.

## Actor input object example

```json
{
  "searchLocation": "Austin, TX",
  "listingStatus": "for_sale",
  "maxResults": 5,
  "requestConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `records` (type: `string`):

The dataset of scraped Zillow listings + agent contact (one item per listing).

# 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 = {
    "searchLocation": "Austin, TX",
    "listingStatus": "for_sale",
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/zillow-agent-leads-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 = {
    "searchLocation": "Austin, TX",
    "listingStatus": "for_sale",
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/zillow-agent-leads-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 '{
  "searchLocation": "Austin, TX",
  "listingStatus": "for_sale",
  "maxResults": 5
}' |
apify call scrapersdelight/zillow-agent-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapersdelight/zillow-agent-leads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Agent Leads Scraper — Phone, Email & License",
        "description": "Scrape Zillow listings WITH the listing agent's contact the others skip: agent name, direct phone, email, license number and broker, plus property core (address, price, beds/baths, zpid). By location, ZIP, a search URL, or a list of zpids. US residential, no login.",
        "version": "0.1",
        "x-build-id": "ybBD5AwJ3Kzz1uWyE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapersdelight~zillow-agent-leads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapersdelight-zillow-agent-leads-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/scrapersdelight~zillow-agent-leads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapersdelight-zillow-agent-leads-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/scrapersdelight~zillow-agent-leads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapersdelight-zillow-agent-leads-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",
                "properties": {
                    "searchLocation": {
                        "title": "Search location",
                        "type": "string",
                        "description": "City + state, ZIP, or neighborhood to search on Zillow, e.g. \"Austin, TX\", \"Miami, FL\" or \"90210\". Every matching listing is scraped and enriched with its agent's contact. Leave blank if you use Start URLs or zpids instead."
                    },
                    "listingStatus": {
                        "title": "Listing status",
                        "enum": [
                            "for_sale",
                            "for_rent",
                            "sold"
                        ],
                        "type": "string",
                        "description": "Which listings to pull for the Search location above: for-sale, for-rent, or recently sold.",
                        "default": "for_sale"
                    },
                    "startUrls": {
                        "title": "Start URLs (search or listing pages)",
                        "type": "array",
                        "description": "Optional. Paste Zillow URLs directly — either search-results pages (e.g. https://www.zillow.com/homes/for_sale/Austin,-TX_rb/) or individual listing pages (https://www.zillow.com/homedetails/.../<zpid>_zpid/). Each type is auto-detected.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "zpids": {
                        "title": "Zillow property IDs (zpids)",
                        "type": "array",
                        "description": "Optional. Scrape specific listings by their Zillow property id (zpid), e.g. \"337141915\". Each is fetched directly and enriched with the listing agent's contact.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on the number of listings returned this run (cost/speed guard). Default 100; set 0 to pull the whole search scope (up to a safety cap).",
                        "default": 100
                    },
                    "requestConcurrency": {
                        "title": "Request concurrency",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "How many listing pages to fetch in parallel. Higher = faster; keep modest so Zillow's anti-bot doesn't throttle the run.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Proxy settings. Zillow blocks datacenter IPs (PerimeterX), so US RESIDENTIAL is the default and strongly recommended for reliable results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
