# Zillow Agents Scraper — Profiles & Leads (`khadinakbar/zillow-agents-scraper`) Actor

Scrape Zillow real estate agents by city, ZIP, directory URL, or profile URL. Returns contacts, brokerage, ratings, sales stats, specialties, languages, and source URLs.

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

## Pricing

from $30.00 / 1,000 agent returneds

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.

- **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 Agents Scraper — Profiles, Contacts & Sales Stats

Scrape Zillow real estate agent and team profiles for brokerage recruiting, lead generation, CRM enrichment, and market research. Search by city or ZIP, or paste Zillow agent directory/profile URLs, and get one clean JSON row per agent with profile URL, brokerage, visible contact details, ratings, review counts, sales stats, specialties, languages, and source timestamps.

**Use when:** you need a bounded list of Zillow real estate agents in a market, or you need to enrich known Zillow profile URLs. Default runs return faster directory rows; set `fetchProfiles` to `true` when you want full profile-page contact and bio enrichment.

**Do not use when:** you need Zillow property listings or home details. Use a Zillow property/listings actor for property inventory.

### What Data Can You Extract?

| Field | Description |
| --- | --- |
| `profileUrl`, `profileSlug` | Canonical Zillow profile URL and profile slug |
| `name`, `profileType`, `brokerage` | Agent/team identity and brokerage affiliation |
| `phone`, `email`, `website` | Contact fields visible on Zillow profile pages |
| `rating`, `reviewCount` | Zillow review score and review count |
| `salesLast12Months`, `totalSales`, `priceRange`, `averagePriceUsd` | Sales performance signals visible on Zillow |
| `specialties`, `languages`, `yearsExperience`, `teamMemberCount` | Profile positioning and coverage details |
| `about` | Short profile/about text when visible |
| `sourceQuery`, `sourceUrl`, `scrapedAt` | Provenance and freshness for audits and CRM imports |

### Input Examples

#### Search Agents By Location

```json
{
  "locations": ["Austin, TX", "10001"],
  "maxResults": 10,
  "maxPagesPerLocation": 2,
  "fetchProfiles": false
}
```

#### Scrape Specific Zillow Profile URLs

```json
{
  "startUrls": [
    { "url": "https://www.zillow.com/profile/REMAX%20EDGE" }
  ],
  "maxResults": 10,
  "fetchProfiles": true
}
```

### Output Example

```json
{
  "profileUrl": "https://www.zillow.com/profile/REMAX%20EDGE",
  "profileSlug": "REMAX EDGE",
  "name": "REMAX EDGE",
  "profileType": "team",
  "brokerage": "RE/MAX EDGE",
  "phone": null,
  "email": null,
  "website": "https://www.remaxedgeny.com",
  "rating": 5,
  "reviewCount": 2672,
  "salesLast12Months": 830,
  "totalSales": 5760,
  "priceRange": "$105K-$8M",
  "averagePriceUsd": 885000,
  "specialties": ["Buyer's Agent", "Listing Agent", "Relocation"],
  "languages": ["English", "Spanish"],
  "yearsExperience": 27,
  "teamMemberCount": 109,
  "sourceType": "profile",
  "sourceQuery": "New York, NY",
  "sourceUrl": "https://www.zillow.com/professionals/real-estate-agent-reviews/new-york-ny/",
  "scrapedAt": "2026-07-15T15:00:00.000Z"
}
```

### Pricing

This actor uses Pay per event pricing with platform usage pass-through.

| Event | Price |
| --- | ---: |
| Actor start | $0.00005 |
| Agent returned | $0.03 per validated agent row |

Examples: the default 5-agent run costs up to $0.15 in agent events; 10 agents costs up to $0.30 in agent events; 50 agents costs up to $1.50 in agent events. Apify platform compute and proxy usage are charged separately by Apify under Pay per event + usage.

### Reliability Notes

Zillow uses bot protection, so the actor runs with Apify Residential US proxies by default, persistent browser sessions, profile-link deduplication, strict result caps, and terminal `OUTPUT` / `RUN_SUMMARY` records. Directory-only runs are faster and more tolerant; profile enrichment is slower because each agent profile must load in a browser. Valid empty results and input mistakes are reported as warnings, while complete upstream blocking is reported honestly as an upstream failure.

### API Usage

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('khadinakbar/zillow-agents-scraper').call({
  locations: ['Austin, TX'],
  maxResults: 10,
  fetchProfiles: false
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

### Related Actors

- [Zillow Search Scraper](https://apify.com/khadinakbar/zillow-search-scraper) extracts Zillow property listings by city, ZIP, URL, or map bounds.
- [Redfin All-in-One Scraper](https://apify.com/khadinakbar/redfin-all-in-one-scraper) provides a sibling real-estate inventory dataset from Redfin.

### Legal And Compliance

This actor extracts publicly available Zillow pages. Use the data in compliance with Zillow's Terms of Use, applicable privacy laws, fair housing rules, MLS/real-estate licensing rules, and your outreach platform policies. The maintainer is not affiliated with Zillow Group, Inc.

# Actor input Schema

## `locations` (type: `array`):

Use this when the user wants Zillow real estate agents in one or more US cities or ZIP codes. Accepts values like \["Austin, TX"] or \["10001", "Miami, FL"]. Defaults to \["Austin, TX"] when no start URLs are supplied. NOT a property address or listing URL.

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

Use this when the user already has Zillow agent directory or profile URLs. Accepts URLs like https://www.zillow.com/professionals/real-estate-agent-reviews/new-york-ny/ or https://www.zillow.com/profile/agent-name. Leave empty to search by locations. NOT for Zillow home listing URLs.

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

Use this to cap the number of Zillow agent records returned and billed. Accepted range is 1 to 500; for example, 25 costs at most $0.75 in agent events. Defaults to 5 for a fast first run. NOT a page count; the actor stops when this many validated agent rows are persisted.

## `maxPagesPerLocation` (type: `integer`):

Use this when a location has many Zillow directory pages and you want to control breadth. Accepted range is 1 to 25; each page usually lists about 10-15 agents. Defaults to 3 for fast, bounded runs. NOT the max profile count; use Max agents for billing control.

## `fetchProfiles` (type: `boolean`):

Use this when you need richer fields from each Zillow profile, including phone, website, about text, specialties, languages, experience, and sales stats. Defaults to false for faster, more reliable directory rows. Set true for profile enrichment. NOT a paid email enrichment service; it only returns data visible on Zillow pages.

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

Use this only when you need to override the default Apify Residential US proxy used for Zillow. Defaults to Apify Proxy with RESIDENTIAL group and US country targeting. Most users should leave it unchanged. NOT a place for API keys or credentials.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX",
    "10001"
  ],
  "startUrls": [
    {
      "url": "https://www.zillow.com/professionals/real-estate-agent-reviews/new-york-ny/"
    }
  ],
  "maxResults": 10,
  "maxPagesPerLocation": 2,
  "fetchProfiles": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `agents` (type: `string`):

Default dataset containing one Zillow agent/team per item with profile URL, brokerage, visible contact data, ratings, sales stats, specialties, languages, and source metadata.

## `overview` (type: `string`):

Same dataset filtered to the lead-list fields declared in the dataset schema overview view.

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

Machine-readable terminal outcome, warnings, counts, and billing diagnostics.

## `output` (type: `string`):

Compact run outcome with item counts, charged event counts, and warnings for automated readback.

# 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 = {
    "locations": [
        "Austin, TX"
    ],
    "maxResults": 10,
    "maxPagesPerLocation": 2,
    "fetchProfiles": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/zillow-agents-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 = {
    "locations": ["Austin, TX"],
    "maxResults": 10,
    "maxPagesPerLocation": 2,
    "fetchProfiles": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/zillow-agents-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 '{
  "locations": [
    "Austin, TX"
  ],
  "maxResults": 10,
  "maxPagesPerLocation": 2,
  "fetchProfiles": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call khadinakbar/zillow-agents-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/XR7PfocvfpzuBLQ6A/builds/fSpfwm1XKqrura1fj/openapi.json
