Zillow Agents Scraper avatar

Zillow Agents Scraper

Pricing

from $6.70 / 1,000 item extracteds

Go to Apify Store
Zillow Agents Scraper

Zillow Agents Scraper

Build and refresh public Zillow agent lead lists from market, directory, and profile URLs.

Pricing

from $6.70 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Categories

Share

Build and refresh real estate agent lead lists from public Zillow pages. Zillow Agents Scraper accepts Zillow market, agent-directory, and individual profile URLs, then returns structured contact, brokerage, rating, service-area, specialty, and source data.

Use the dataset in a CRM, spreadsheet, recruiting workflow, market analysis, or scheduled monitoring job. No Zillow account is required, and the Actor does not access private messages or account-only data.

What does Zillow Agents Scraper do?

The Actor supports three practical input routes:

  • Market URL — for example, https://www.zillow.com/miami-fl/.
  • Agent-directory URL — for example, https://www.zillow.com/professionals/real-estate-agent-reviews/miami-fl/.
  • Agent profile URL — for example, https://www.zillow.com/profile/PearsonSmithRealty.

Market URLs are converted to the corresponding public agent directory. Directory cards are discovered first, and each profile is opened to collect the richer public fields Zillow provides. Results from all inputs are deduplicated by profile URL.

Who is this Zillow agents data for?

  • Brokerage recruiters building market-specific agent shortlists.
  • Real estate teams researching potential referral partners.
  • Lenders and vendors preparing compliant business-development lists.
  • Proptech teams enriching existing public agent records.
  • Analysts comparing brokerage presence and agent ratings across markets.
  • Operations teams refreshing CRM records on an Apify schedule.

Why use this Actor?

Zillow agent pages are protected by browser challenges. A normal HTTP request or basic automated browser can return a challenge instead of data. This Actor uses a residential browser session with a coherent fingerprint, proxy identity, and cookie context, and rotates the session only after a verified block or transient failure.

The output is designed as lead-list data rather than raw HTML:

  • one default-dataset item per unique agent;
  • stable source and profile URLs;
  • explicit recordStatus when only directory-level data was available;
  • bounded retries and pagination;
  • a non-zero failed run when every input produces no useful records.

What Zillow agent data can I extract?

FieldDescription
namePublic agent or team name
screenNameZillow profile screen name
profileUrlCanonical public Zillow profile URL
zillowIdEncoded public Zillow user identifier when present
brokeragePublic brokerage or team name
businessAddressPublic business address shown on the profile
phonePreferred public phone number
phoneNumbersAvailable cell, business, and brokerage phone values
publicEmailPublic email when Zillow includes it in profile data
websitePublic external website
ratingZillow average rating
reviewCountNumber of profile ratings/reviews shown by Zillow
serviceAreasPublic service-area labels
specialtiesPublic specialties such as buyer's agent or property management
languagesPublic languages listed on the profile
yearsInIndustryPublic years-in-industry value when available
licenseNumbersPublic license lines shown by Zillow
isTopAgentWhether Zillow marks the result as a Top Agent
marketMarket associated with a directory result
recordStatusprofile for enriched records or directory for bounded fallback records
sourceUrlInput or directory page that produced the record
scrapedAtISO 8601 collection timestamp

Fields that Zillow does not publish for a particular profile are omitted or empty. The Actor does not infer missing contact information.

How to run Zillow Agents Scraper

  1. Open the Actor in Apify Console.
  2. Add one or more Zillow market, directory, or profile URLs.
  3. Set Maximum agents for the total output size.
  4. Optionally limit directory pages and residential session retries.
  5. Click Start.
  6. Open the Zillow agents dataset view.
  7. Export JSON, CSV, Excel, XML, or connect the dataset to another integration.

A useful first run is one profile with maxItems set to 1. For lead-list discovery, start with one market and maxItems between 10 and 25.

Input parameters

InputTypeDefaultPurpose
startUrlsarrayMiami agent directoryZillow market, directory, or profile URLs
maxItemsinteger25Maximum unique records across all URLs; allowed range 1–1,000
maxPagesinteger5Maximum directory pages per market; allowed range 1–20
maxRetriesinteger2Fresh residential sessions after a challenge; allowed range 0–3

Example input:

{
"startUrls": [
{ "url": "https://www.zillow.com/miami-fl/" },
{ "url": "https://www.zillow.com/austin-tx/" }
],
"maxItems": 20,
"maxPages": 2,
"maxRetries": 2
}

When several market URLs are supplied, the Actor distributes the remaining result budget across them so one large directory does not consume the entire maxItems limit.

Output example

This shortened record reflects current profile output:

{
"name": "Eric Pearson",
"screenName": "PearsonSmithRealty",
"profileUrl": "https://www.zillow.com/profile/PearsonSmithRealty",
"brokerage": "Pearson Smith Realty",
"businessAddress": "43777 Central Station Drive, Suite 390, Ashburn, VA 20147",
"phone": "(540) 454-1551",
"website": "http://pearsonsmithrealty.com/",
"rating": 5,
"reviewCount": 2636,
"serviceAreas": ["Centreville, VA", "Fairfax, VA", "Ashburn, VA"],
"specialties": ["Buyer's Agent", "Listing Agent", "Foreclosure", "Property Management"],
"recordStatus": "profile",
"sourceUrl": "https://www.zillow.com/profile/PearsonSmithRealty",
"scrapedAt": "2026-08-01T09:01:48.922581+00:00"
}

Primary results always go to the run's default dataset, which keeps Apify API, scheduling, webhooks, and export integrations straightforward.

How much does it cost to build Zillow agent lead lists?

Pay-per-event pricing has two events:

  • Start: $0.02 once per run.
  • Zillow agent: tiered per saved dataset item. The current FREE-tier price is $0.012834 per agent and decreases across higher usage tiers.

At the FREE tier, calculate each run as one start event plus one agent event for every saved record:

AgentsPricing formula
11 start event + 1 agent event
101 start event + 10 agent events
1001 start event + 100 agent events

You are charged for saved records, not for blocked pages or duplicates. Residential proxy and browser infrastructure are included in event pricing. Apify plan limits and any platform-level taxes are separate.

Scheduling and recurring lead-list refreshes

Use an Apify Schedule to rerun the same market inputs daily, weekly, or monthly. Keep profileUrl or zillowId as the stable join key in your destination system, then compare fields such as brokerage, rating, review count, phone, specialties, and service areas.

A common workflow is:

  1. run one Task per territory;
  2. send the dataset to a webhook, Make, Zapier, Google Sheets, or a database;
  3. upsert on profileUrl;
  4. store scrapedAt as the observation time;
  5. alert only on fields relevant to your business process.

The Actor returns current observations. It does not maintain change history or send alerts by itself.

CRM and spreadsheet integrations

For recruiting or partnership outreach:

  • export CSV for manual review;
  • map name, brokerage, phone, publicEmail, and website into CRM columns;
  • use serviceAreas and specialties as qualification filters;
  • retain sourceUrl and scrapedAt for provenance;
  • review your outreach rules before contacting anyone.

For analytics, aggregate by brokerage or market and treat ratings as source observations rather than endorsements.

Run with the Apify API

Replace APIFY_TOKEN with your token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~zillow-agents-scraper/runs?token=APIFY_TOKEN&waitForFinish=180" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.zillow.com/profile/PearsonSmithRealty"}],
"maxItems": 1
}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/zillow-agents-scraper').call({
startUrls: [{ url: 'https://www.zillow.com/professionals/real-estate-agent-reviews/miami-fl/' }],
maxItems: 10,
maxPages: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/zillow-agents-scraper').call(run_input={
'startUrls': [{'url': 'https://www.zillow.com/miami-fl/'}],
'maxItems': 10,
'maxPages': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI agents

Add this Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/zillow-agents-scraper"

Use the same configuration in Claude Desktop, Cursor, or VS Code. Add an HTTP MCP server named apify with this Actor-specific URL:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/zillow-agents-scraper"
}
}
}

Example prompts:

  • “Find five public Zillow agents in Miami and return name, brokerage, phone, website, rating, and specialties.”
  • “Extract this Zillow profile into a normalized CRM record.”
  • “Run my saved Miami and Austin agent Task, then compare the dataset with last week's export.”

The MCP client still needs authorization to your Apify account and may ask you to confirm paid tool calls.

Reliability, retries, and limits

Zillow can change page structures or issue browser challenges. The Actor:

  • uses US residential proxy sessions because direct and datacenter routes are not reliable for this workflow;
  • keeps each proxy, fingerprint, and cookie context coherent;
  • processes browser pages conservatively rather than launching high concurrency;
  • blocks non-document assets after validating that Zillow's server-rendered payload contains the complete product fields;
  • retires a challenged session and retries within the configured bound;
  • fails the run when all inputs return no useful records;
  • can emit a directory fallback record after profile enrichment exhausts its retries.

A directory record still includes the public name, profile URL, brokerage, rating, review count, market, and directory metrics, but it may not include profile-only phone, website, service-area, or specialty fields.

Troubleshooting

Why did my run fail with no records?

Check that every URL is public, belongs to www.zillow.com, and is a supported market, directory, or profile path. Increase maxRetries only when the logs show a transient challenge. Do not use listing-detail or private account URLs.

Why is a field missing?

Zillow does not publish every field for every agent. Check recordStatus. A profile record reflects fields available on the public profile; a directory record means profile enrichment remained blocked after bounded rotation.

Why did the run stop before every directory result?

maxItems, maxPages, user spending limits, and the number of supplied markets all bound the run. Increase them deliberately, keeping expected pay-per-event cost in mind.

Responsible use and legality

This Actor collects information displayed on public Zillow pages. It does not log in, access private communications, or bypass customer account controls.

You are responsible for:

  • complying with applicable law, Zillow's terms, and Apify's policies;
  • establishing a lawful purpose and retention period;
  • honoring privacy, opt-out, telemarketing, and anti-spam requirements;
  • avoiding harassment, discrimination, deceptive outreach, or sensitive profiling;
  • securing exports and limiting access to people who need the data.

Public availability does not automatically authorize every use. Obtain legal advice for your specific jurisdiction and workflow.

FAQ

Does the Actor require a Zillow account?

No. It is limited to public agent-directory and profile data.

Can it scrape Zillow property listings?

No. Use Zillow Scraper for public listing search and property-detail workflows.

Can I run several markets together?

Yes. Add several market or directory URLs. The Actor deduplicates profiles and distributes the result budget across inputs.

Does it return every agent in a market?

It follows the public directory within your maxPages and maxItems limits. Zillow ranking, availability, challenges, and page changes can affect coverage, so do not treat the output as an official registry.

Can I schedule recurring runs?

Yes. Save the input as an Apify Task and attach a Schedule. Change detection or notifications should be implemented in the downstream workflow.

These Actors are separate products with separate inputs, outputs, and pricing.

Support

If a supported public URL repeatedly fails, open an Actor issue and include:

  • the input URL and redacted input;
  • run ID;
  • approximate failure time;
  • whether the log reported a challenge, empty payload, or profile fallback.

Do not include Apify tokens, private account details, or unrelated personal data.