Zillow Agent Scraper
Pricing
Pay per usage
Zillow Agent Scraper
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ricardo Akiyoshi
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:
| Field | Type | Description |
|---|---|---|
agentName | string | Full name of the real estate agent |
brokerageName | string | Name of the agent's brokerage or team |
phone | string | Agent's phone number |
email | string | Agent's email address (when available) |
website | string | Agent's personal website URL |
address | string | Office street address |
city | string | City |
state | string | State abbreviation (e.g., NY, CA) |
zipcode | string | ZIP code |
rating | number | Average star rating (1-5) |
reviewCount | number | Total number of reviews |
salesCount | number | Number of recent sales/transactions |
listingsCount | number | Number of active listings |
experience | string | Years of experience |
specialties | string | Comma-separated list of specialties |
areas | string | Service areas covered |
photoUrl | string | URL to agent's profile photo |
profileUrl | string | Full Zillow profile URL |
recentSales | array | Recent sales with address, price, date, beds, baths, sqft |
activeListings | array | Active listings with address, price, beds, baths, sqft, URL |
searchLocation | string | The location used for the search |
searchSpecialty | string | The specialty filter applied (if any) |
resultPosition | number | Position in search results |
scrapedAt | string | ISO 8601 timestamp of when the data was scraped |
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
location | string | Yes | - | US city, state, or ZIP code. Examples: New York, NY, 90210, Austin TX |
specialty | string | No | (all) | Filter by specialty: buyer, seller, luxury, foreclosure, relocation, commercial |
maxResults | integer | No | 100 | Maximum number of agent profiles to scrape (0 = unlimited) |
includeReviews | boolean | No | false | Scrape detailed reviews from each agent's profile page (increases run time) |
proxyConfiguration | object | No | - | 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 ApifyClientclient = 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 resultsfor 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
-
Use residential proxies -- Zillow has strong anti-bot protection. Residential proxies from the RESIDENTIAL group are strongly recommended for reliable results.
-
Start with smaller batches -- Test with
maxResults: 20first to verify the location works, then scale up. -
Location format matters -- Use
"City, ST"format (e.g.,"New York, NY") or a 5-digit ZIP code for best results. -
Reviews increase cost -- Enabling
includeReviewsvisits each agent's profile page individually, which significantly increases run time and compute costs. -
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.
Related Actors
- Zillow Scraper -- Scrape Zillow property listings (homes for sale, rentals, sold properties)
- Zillow Sold Scraper -- Scrape recently sold properties from Zillow
- Realtor Scraper -- Scrape property listings from Realtor.com
- Real Estate Agents Scraper -- Scrape agents from multiple platforms (Zillow + Realtor.com)
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.