Zillow Agents Scraper
Pricing
from $6.70 / 1,000 item extracteds
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
Maintained by CommunityActor 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
recordStatuswhen 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?
| Field | Description |
|---|---|
name | Public agent or team name |
screenName | Zillow profile screen name |
profileUrl | Canonical public Zillow profile URL |
zillowId | Encoded public Zillow user identifier when present |
brokerage | Public brokerage or team name |
businessAddress | Public business address shown on the profile |
phone | Preferred public phone number |
phoneNumbers | Available cell, business, and brokerage phone values |
publicEmail | Public email when Zillow includes it in profile data |
website | Public external website |
rating | Zillow average rating |
reviewCount | Number of profile ratings/reviews shown by Zillow |
serviceAreas | Public service-area labels |
specialties | Public specialties such as buyer's agent or property management |
languages | Public languages listed on the profile |
yearsInIndustry | Public years-in-industry value when available |
licenseNumbers | Public license lines shown by Zillow |
isTopAgent | Whether Zillow marks the result as a Top Agent |
market | Market associated with a directory result |
recordStatus | profile for enriched records or directory for bounded fallback records |
sourceUrl | Input or directory page that produced the record |
scrapedAt | ISO 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
- Open the Actor in Apify Console.
- Add one or more Zillow market, directory, or profile URLs.
- Set Maximum agents for the total output size.
- Optionally limit directory pages and residential session retries.
- Click Start.
- Open the Zillow agents dataset view.
- 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
| Input | Type | Default | Purpose |
|---|---|---|---|
startUrls | array | Miami agent directory | Zillow market, directory, or profile URLs |
maxItems | integer | 25 | Maximum unique records across all URLs; allowed range 1–1,000 |
maxPages | integer | 5 | Maximum directory pages per market; allowed range 1–20 |
maxRetries | integer | 2 | Fresh 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:
| Agents | Pricing formula |
|---|---|
| 1 | 1 start event + 1 agent event |
| 10 | 1 start event + 10 agent events |
| 100 | 1 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:
- run one Task per territory;
- send the dataset to a webhook, Make, Zapier, Google Sheets, or a database;
- upsert on
profileUrl; - store
scrapedAtas the observation time; - 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, andwebsiteinto CRM columns; - use
serviceAreasandspecialtiesas qualification filters; - retain
sourceUrlandscrapedAtfor 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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
directoryfallback 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.
Related automation-lab Actors
- Zillow Scraper — Zillow property listing search and detail records.
- Redfin Real Estate Agents Scraper — a complementary public source for agent research.
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.
