Zillow Agent Scraper avatar

Zillow Agent Scraper

Pricing

Pay per usage

Go to Apify Store
Zillow Agent Scraper

Zillow Agent Scraper

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ricardo Akiyoshi

Ricardo Akiyoshi

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 hours ago

Last modified

Categories

Share

Scrape real estate agent profiles from Zillow's agent directory. Extract comprehensive agent data including names, brokerages, phone numbers, emails, websites, ratings, reviews, sales history, active listings, specialties, and service areas for any US location.

What does Zillow Agent Scraper do?

This actor crawls the Zillow agent directory for a specified US location and extracts detailed real estate agent profiles. It uses four extraction strategies (NEXT_DATA, JSON-LD, DOM parsing, and meta tags) to reliably extract data even when Zillow changes their page structure.

Use Cases

Recruit Top-Performing Agents

Build targeted recruitment lists by filtering agents by location, sales volume, and ratings. Identify the most productive agents in any market for brokerage recruiting campaigns.

Analyze Local Real Estate Markets

Understand the competitive landscape by examining agent density, specializations, average ratings, and transaction volumes in specific markets. Track how many agents serve a given area and what niches they focus on.

Real Estate Lead Generation

Build prospect lists for real estate service providers: mortgage lenders, title companies, home inspectors, photographers, and marketing agencies. Target agents based on their activity levels and specialties.

Competitive Intelligence

Monitor competitor brokerages by tracking their agents, sales performance, and market presence. Identify top producers moving between brokerages.

Agent Directory & Comparison

Build agent comparison tools, directories, or recommendation engines using structured agent data. Create "best agents in [city]" content powered by real data.

Data Extracted

Each agent profile includes the following fields:

FieldTypeDescription
agentNamestringFull name of the real estate agent
brokerageNamestringName of the agent's brokerage or team
phonestringAgent's phone number
emailstringAgent's email address (when available)
websitestringAgent's personal website URL
addressstringOffice street address
citystringCity
statestringState abbreviation (e.g., NY, CA)
zipcodestringZIP code
ratingnumberAverage star rating (1-5)
reviewCountnumberTotal number of reviews
salesCountnumberNumber of recent sales/transactions
listingsCountnumberNumber of active listings
experiencestringYears of experience
specialtiesstringComma-separated list of specialties
areasstringService areas covered
photoUrlstringURL to agent's profile photo
profileUrlstringFull Zillow profile URL
recentSalesarrayRecent sales with address, price, date, beds, baths, sqft
activeListingsarrayActive listings with address, price, beds, baths, sqft, URL
searchLocationstringThe location used for the search
searchSpecialtystringThe specialty filter applied (if any)
resultPositionnumberPosition in search results
scrapedAtstringISO 8601 timestamp of when the data was scraped

Input Parameters

ParameterTypeRequiredDefaultDescription
locationstringYes-US city, state, or ZIP code. Examples: New York, NY, 90210, Austin TX
specialtystringNo(all)Filter by specialty: buyer, seller, luxury, foreclosure, relocation, commercial
maxResultsintegerNo100Maximum number of agent profiles to scrape (0 = unlimited)
includeReviewsbooleanNofalseScrape detailed reviews from each agent's profile page (increases run time)
proxyConfigurationobjectNo-Apify proxy settings. Residential proxies strongly recommended

Example Output

{
"agentName": "Jane Smith",
"brokerageName": "Keller Williams Realty",
"phone": "(212) 555-0123",
"email": "jane.smith@kw.com",
"website": "https://janesmith-realestate.com",
"address": "123 Broadway",
"city": "New York",
"state": "NY",
"zipcode": "10001",
"rating": 4.9,
"reviewCount": 87,
"salesCount": 156,
"listingsCount": 12,
"experience": "15 years",
"specialties": "Buyer's Agent, Seller's Agent, Luxury",
"areas": "Manhattan, Brooklyn, Queens",
"photoUrl": "https://photos.zillowstatic.com/agent/abc123.jpg",
"profileUrl": "https://www.zillow.com/profile/jane-smith/",
"recentSales": [
{
"address": "456 Park Ave, New York, NY 10022",
"price": "$2,500,000",
"date": "2026-01-15",
"type": "Condo",
"beds": 3,
"baths": 2.5,
"sqft": 1800
}
],
"activeListings": [
{
"address": "789 5th Ave, New York, NY 10065",
"price": "$3,200,000",
"type": "Co-op",
"beds": 4,
"baths": 3,
"sqft": 2200,
"listingUrl": "https://www.zillow.com/homedetails/789-5th-Ave/12345_zpid/"
}
],
"searchLocation": "New York, NY",
"searchSpecialty": null,
"resultPosition": 1,
"scrapedAt": "2026-03-02T14:30:00.000Z"
}

Usage with Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run_input = {
"location": "Los Angeles, CA",
"specialty": "luxury",
"maxResults": 50,
"includeReviews": False,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
run = client.actor("sovereigntaylor/zillow-agent-scraper").call(run_input=run_input)
# Fetch results
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['agentName']} - {item['brokerageName']} - {item.get('phone', 'N/A')}")
print(f" Rating: {item.get('rating', 'N/A')} ({item.get('reviewCount', 0)} reviews)")
print(f" Sales: {item.get('salesCount', 'N/A')} | Listings: {item.get('listingsCount', 'N/A')}")
print()

Usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const input = {
location: 'Miami, FL',
maxResults: 100,
includeReviews: true,
proxyConfiguration: {
useApifyProxy: true,
apifyProxyGroups: ['RESIDENTIAL'],
},
};
const run = await client.actor('sovereigntaylor/zillow-agent-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const agent of items) {
console.log(`${agent.agentName} (${agent.brokerageName})`);
console.log(` Phone: ${agent.phone || 'N/A'}`);
console.log(` Rating: ${agent.rating || 'N/A'} (${agent.reviewCount || 0} reviews)`);
console.log(` Sales: ${agent.salesCount || 'N/A'} | Listings: ${agent.listingsCount || 'N/A'}`);
if (agent.recentSales?.length > 0) {
console.log(` Recent sales: ${agent.recentSales.length}`);
}
if (agent.activeListings?.length > 0) {
console.log(` Active listings: ${agent.activeListings.length}`);
}
}

Tips for Best Results

  1. Use residential proxies -- Zillow has strong anti-bot protection. Residential proxies from the RESIDENTIAL group are strongly recommended for reliable results.

  2. Start with smaller batches -- Test with maxResults: 20 first to verify the location works, then scale up.

  3. Location format matters -- Use "City, ST" format (e.g., "New York, NY") or a 5-digit ZIP code for best results.

  4. Reviews increase cost -- Enabling includeReviews visits each agent's profile page individually, which significantly increases run time and compute costs.

  5. Off-peak hours -- Running during off-peak hours (early morning US Eastern time) reduces the chance of being rate-limited.

FAQ

Q: How many agents can I scrape? A: There is no hard limit. However, Zillow typically shows up to 20 agents per page. For large cities, you may find hundreds or thousands of agents across many pages.

Q: Why are some fields null? A: Not all agents have complete profiles on Zillow. Phone numbers, emails, and websites depend on what the agent has published. The scraper extracts everything that is publicly available.

Q: How often does the data update? A: Zillow agent profiles are updated in near real-time by the agents themselves. We recommend re-scraping weekly for the freshest data.

Q: Can I filter by specific brokerages? A: The actor does not have a direct brokerage filter, but you can filter the output dataset by brokerageName after scraping.

Q: What if I get blocked or see 0 results? A: Use Apify residential proxies. Zillow has anti-bot protections that may block datacenter IPs. Residential proxies solve this in most cases.

Q: Does this work for non-US locations? A: No. Zillow only covers the United States. For international real estate agents, consider other platforms.

Q: What is the pricing? A: This actor uses pay-per-event pricing at $0.005 per agent profile scraped. You only pay for successfully extracted data, plus standard Apify platform compute costs.

Changelog

v1.0 (2026-03-02)

  • Initial release
  • Four extraction strategies: NEXT_DATA, JSON-LD, DOM parsing, meta tags
  • Full pagination support
  • Optional detailed review scraping
  • Pay-per-event pricing ($0.005/agent)

Support

For questions, bug reports, or feature requests, please open an issue on the actor's page or contact the author.

Built by Sovereign AI -- autonomous AI agent building the future of data extraction.