Zillow Agent Scraper — Licenses, Contacts, Sales Stats
Pricing
from $19.00 / 1,000 agent extracteds
Zillow Agent Scraper — Licenses, Contacts, Sales Stats
Scrape Zillow agent profiles at scale — search by city or lookup by username, URL, or zuid. Returns verified contacts, license numbers + expiry, MLS IDs, service areas, sales stats, active for-sale + sold portfolios, and reviews. Built for brokerage recruiting, lead gen, and CRM enrichment.
Pricing
from $19.00 / 1,000 agent extracteds
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Zillow Agent Scraper — Licenses, Contacts, Sales Stats 🏠
🎉 The only Zillow agent scraper that exposes license #, expiry, and MLS IDs — compliance-grade data at $25 per 1,000 agents on the Apify Standard plan.
Built for brokerage recruiters, lead-gen SaaS founders, and MLS/CRM data engineers — get the fields competitors strip out.
📋 Overview
Pull thousands of Zillow real-estate agents at scale — search by city, lookup by URL/username, get license #, expiry date, MLS IDs, service areas, parsed sales stats, contacts, sold history, and reviews in one clean structured dataset.
Why brokerage recruiters and lead-gen teams choose us:
- ✅ Compliance-grade data: license number, state, status, expiration date per agent — every other Zillow agent scraper strips this out
- 🆔 MLS Organisation UID + Agent MLS ID: direct internal-MLS matching, no fuzzy joins, no string fights
- 🗺 Service-area mapping: Zillow
regionId+ URL for every market the agent works — perfect territory targeting - 📈 Parsed numeric sales stats:
totalSales,salesLastTwelveMonths,averagePrice,priceRange.min/max— competitors return Zillow's raw"$1.3M"string - 💎 Optional deep-enrichment: paginated for-sale, for-rent, full sold history (1,000+ rows per agent), and reviews — one toggle each
- ✨ NEW: HTML cohort report with top-brokerage breakdown, license-state coverage, median sales/agent, and Premier-Agent ratio
Built by SIÁN Agency — independent tool, not affiliated with Zillow Group, Inc.
✨ Features
- 🧭 Two search modes: city/state directory search OR direct lookup by profile URL/username/encodedZuid
- 📜 License compliance fields — number, state, status, license type, expiration date
- 🆔 MLS identifiers —
mls_ouid+mls_agent_idarrays - 🏠 Business address + brokerage — address1, city, state, postal code, brokerage name
- 📞 Full contact — cell, business, brokerage phones + email
- 📊 Parsed sales stats — totalSales, salesLastTwelveMonths, averagePrice (USD), priceRange
- 🗺 Service areas — regionIds + Zillow region URLs for every market covered
- 💰 For-sale + for-rent portfolios — paginated, with zpid, price, beds/baths, address, home type
- 📈 Sold history — past transactions with sold_date, price, represented side (buyer/seller/both)
- ⭐ Reviews — paginated client reviews with rating, comment, work description, agent rebuttal
- 📄 HTML cohort report — saved to key-value store with brokerage breakdown, state coverage, and sales KPIs
🎬 Quick Start
Run a search for Miami real-estate agents and get back full agent records with license, MLS, and contact data — in under a minute.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~zillow-agent-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"searchMode":"search","location":"Miami, FL","maxAgentsPerQuery":25,"fetchAgentDetails":true}'
🚀 Getting Started (3 Simple Steps)
Step 1: Pick your input mode
- search: enter a city + state like
"Miami, FL"to paginate the agent directory - lookup: paste profile URLs, usernames, or encodedZuids to fetch specific agents directly
Step 2: Toggle the enrichments you need
Set includeForSale, includeForRent, includeSoldProperties, includeReviews to true to paginate each agent's full portfolio. Skip them all to keep runs lean and cheap.
Step 3: Run the actor
Hit "Start" in the Apify Console, or POST to the API. Results stream to the dataset; the HTML cohort report lands in the key-value store as report.html.
That's it! In under a minute, you'll have:
- Clean structured agent records with compliance-grade fields
- An HTML market report ready to share with stakeholders
- A dataset exportable as JSON, CSV, or Excel directly from Apify
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
searchMode | string | Yes | search or lookup |
location | string | search mode | City + state, e.g. "Miami, FL" |
language | string | No | Optional language filter, e.g. "Spanish" |
lookupTargets | array | lookup mode | Profile URLs, usernames, or encodedZuids |
fetchAgentDetails | boolean | No | Fetch full /agent/details per row (default true in search; always true in lookup) |
includeForSale | boolean | No | Paginate active for-sale portfolio per agent |
includeForRent | boolean | No | Paginate active rental portfolio per agent |
includeSoldProperties | boolean | No | Paginate full sold history per agent |
includeReviews | boolean | No | Paginate client reviews per agent |
maxAgentsPerQuery | integer | No | Default 50, max 500 |
maxListingsPerAgent | integer | No | Default 50, max 500 |
maxSoldPerAgent | integer | No | Default 50, max 2,000 |
maxReviewsPerAgent | integer | No | Default 25, max 500 |
Example (search mode):
{"searchMode": "search","location": "Austin, TX","maxAgentsPerQuery": 100,"fetchAgentDetails": true,"includeSoldProperties": true,"maxSoldPerAgent": 100}
Example (lookup mode):
{"searchMode": "lookup","lookupTargets": ["https://www.zillow.com/profile/RESalesForce","ChrisLollipop"],"includeReviews": true,"includeForSale": true}
📤 Output
Results are saved to the Apify dataset with 28 fields per agent including:
| Field | Type | Description |
|---|---|---|
encodedZuid | string | Zillow's stable agent ID (e.g. X1-ZUx6y02vup6io9_88dzc) |
username | string | Zillow profile slug |
profileUrl | string | Full Zillow profile page URL |
agentName | string | Display name (e.g. "Dinorah de Cardenas - RESF") |
businessName | string | Brokerage / team name |
licenses | array | License #, state, status, type, expiration date |
mlsIds | array | mls_ouid + mls_agent_id per active MLS |
serviceAreas | array | regionId + text + Zillow URL for each market covered |
contact | object | phoneNumbers (cell/business/brokerage), primaryPhone, email |
businessAddress | object | Brokerage address (address1, city, state, postalCode) |
salesStats | object | totalSales, salesLastTwelveMonths, averagePrice (USD), priceRange.min/max |
ratings | object | average (1-5), count |
isPremierAgent | boolean | Paid Zillow tier flag |
isTopAgent | boolean | Zillow Top Agent flag |
forSaleListings | array | Active sale listings (when enriched) |
forRentListings | array | Active rental listings (when enriched) |
pastSales | array | Sold properties with sold_date + represented side |
reviews | array | Client reviews with rating, comment, work description |
counts | object | Counts + Zillow-reported totals for all bundles |
Example record:
{"encodedZuid": "X1-ZUx6y02vup6io9_88dzc","username": "RESalesForce","agentName": "Dinorah de Cardenas - RESF","businessName": "Real Estate Sales Force","licenses": [{"text":"3160356","state":"FL","status":"active","license_type":"agent","expiration":"2027-09-30"}],"mlsIds": [{"mls_ouid":"M00000151","mls_agent_id":"3160356"}],"salesStats": {"totalSales": 1253,"salesLastTwelveMonths": 23,"averagePrice": 1300000,"priceRange": {"min":144000,"max":19000000}},"contact": {"phoneNumbers":{"cell":"(305) 305-0300","business":"(305) 392-1497"},"primaryPhone":"(305) 305-0300","email":"thedinorahgroup@gmail.com"},"ratings": {"average":5,"count":840},"counts": {"forSale":8,"forRent":0,"pastSales":10,"reviews":5,"pastSalesTotal":1253}}
💼 Use Cases & Examples
1. Brokerage Recruiting
Recruiting teams at Compass, Keller Williams, and eXp Realty pulling top-producing agents in a target market.
Input: searchMode: "search", location: "Austin, TX", maxAgentsPerQuery: 200, fetchAgentDetails: true
Output: 200 agents with license #, sales/year, average deal price, brokerage, email, phone
Use: Feed CRM, filter by salesLastTwelveMonths > 15, run outreach sequences
2. Lead-Gen SaaS
B2B SaaS founders building real-estate agent contact-enrichment products.
Input: Bulk lookupTargets array of usernames from your own pipeline
Output: Verified licenses, contact info, MLS IDs ready to ship as API responses to your customers
Use: Power your own product without maintaining Zillow scrapers or proxy fleets
3. Real-Estate Analytics
Analytics teams tracking agent productivity and top-producer concentration by region.
Input: searchMode: "search", run weekly across 20 metro areas
Output: Time-series of salesLastTwelveMonths per agent, with brokerage attribution
Use: Build market-share dashboards, top-100-agent leaderboards, brokerage productivity reports
4. MLS / CRM Integration
Data engineers matching Zillow agent profiles to internal MLS feeds.
Input: searchMode: "lookup", push every agent in your CRM as a lookupTarget
Output: mlsIds[] arrays for direct join keys, plus reviews + service areas for enrichment
Use: Stitch internal-source-of-truth agent records to Zillow's public profile data
5. Compliance & Due-Diligence
Compliance teams at ad networks, mortgage lenders, and relocation platforms vetting agents.
Input: lookupTargets: individual agent URLs as deals come in
Output: Current license status + expiration date per agent
Use: Block partnerships where licenses[0].status != "active" or expiration is within 30 days
6. Real-Estate Lead Generation
Lead-gen agencies building "top agents in your city" pages for SEO.
Input: searchMode: "search" per city, includeReviews: true
Output: Agent rankings by rating + sales volume, with embedded reviews for testimonials
Use: Programmatic SEO pages, agent directories, "find a top realtor" widgets
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/zillow-agent-scraper').call({searchMode: 'search',location: 'Miami, FL',maxAgentsPerQuery: 50,fetchAgentDetails: true,includeSoldProperties: true,maxSoldPerAgent: 100});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Pulled ${items.length} agents`);console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/zillow-agent-scraper').call(run_input={'searchMode': 'search','location': 'Austin, TX','maxAgentsPerQuery': 100,'fetchAgentDetails': True,'includeReviews': True})for agent in client.dataset(run['defaultDatasetId']).iterate_items():print(agent['agentName'], agent.get('salesStats', {}).get('salesLastTwelveMonths'))
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zillow-agent-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchMode":"lookup","lookupTargets":["https://www.zillow.com/profile/RESalesForce"],"includeReviews":true}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: Schedule weekly per target metro area, or webhook from your CRM when a new agent record needs enrichment
- HTTP Request: Call the actor API with the search query or lookup targets
- Process: Parse the JSON dataset; filter by license status, sales volume, or brokerage
- Action: Push to HubSpot/Salesforce/Airtable, trigger outreach sequences, or write to your data warehouse
📊 Performance & Pricing
FREE Tier (Try It Now)
- 5 agents per run — full feature access with license, MLS, contact data
- 1 query per run
- Enrichment toggles disabled (upgrade to unlock for-sale, for-rent, sold, reviews)
- No credit card required
- Perfect for evaluating data quality before bulk runs
PAID Tier (Production Ready)
- Unlimited agents per run
- Unlimited queries per run
- All enrichment toggles available (for-sale, for-rent, sold, reviews)
- Pay-per-event: only charged for agents successfully extracted + enriched
Live Pricing (per-event)
| Tier | Actor Start | Agent Extracted | Agent Enriched |
|---|---|---|---|
| FREE | $0.050 | $0.075 | $0.240 |
| BRONZE | $0.005 | $0.025 | $0.080 |
| SILVER | $0.005 | $0.022 | $0.070 |
| GOLD | $0.005 | $0.019 | $0.060 |
| PLATINUM | $0.005 | $0.013 | $0.040 |
| DIAMOND | $0.005 | $0.008 | $0.024 |
Agent Extracted fires once per agent record returned (includes license, MLS, contact, sales stats, reviews summary). Agent Enriched fires once per agent when at least one enrichment endpoint (for-sale, for-rent, sold history, reviews) successfully paginated.
💰 Mid-premium positioning — significantly cheaper than premium lead-enrichment competitors ($0.05-$0.08 per agent), and the only scraper at any price point that exposes license #, expiry, and MLS IDs.
❓ Frequently Asked Questions
Q: How many agents can I pull per run? A: FREE tier: 5 agents, 1 query, no enrichment. PAID tier: unlimited agents, unlimited queries, all enrichment toggles available.
Q: What's the difference between search and lookup mode?
A: search paginates Zillow's agent directory by city/state (e.g. all agents in Miami, FL). lookup fetches specific agents by profile URL, username, or encodedZuid — useful for enriching agents you already have.
Q: Why does the search mode return ~15 agents per page?
A: Zillow's /agent/search endpoint paginates at 15 agents per page. The actor handles pagination automatically up to maxAgentsPerQuery.
Q: Why are some agents missing license data? A: Team profiles (e.g. "ONEPATH Team") often have no individual license registered on Zillow. Individual agent profiles consistently return license #, state, status, and expiration date.
Q: Can I bypass Zillow's 500-result limit?
A: The agent directory typically caps at ~500 results per query. Use multiple city searches (e.g. by neighbourhood: "Brickell, Miami, FL", "Coral Gables, FL") to enumerate beyond that cap.
Q: What output formats are available? A: JSON, CSV, Excel, RSS, HTML, XML — export directly from the Apify dataset UI or via the API.
Q: How accurate is the data?
A: Data comes from public Zillow agent profiles. Licenses + MLS IDs are sourced directly from Zillow's API and reflect Zillow's current snapshot. Sales stats are parsed from Zillow's formatted strings (e.g. "$1.3M" → 1300000 USD).
Q: How long does processing take? A: ~1 second per agent in search mode without enrichment. With full enrichment (for-sale + for-rent + sold + reviews), expect ~5-15 seconds per agent depending on portfolio size.
🐞 Troubleshooting
"Zillow returned an empty profile for [URL]"
- Verify the username or URL is correct — paste the URL from the address bar of the agent's Zillow profile page
- Zillow's upstream is occasionally flaky and returns empty payloads (~20% rate); the actor automatically retries up to 3 times
- Some profile slugs require the exact case used by Zillow
"Missing ZILLOW_API_KEY environment variable"
- This shouldn't happen on the Apify platform — secrets are pre-configured
- For local development, export
ZILLOW_API_KEYbefore running
Empty licenses[] for some agents
- Team profiles typically don't carry an individual license — Zillow only displays licenses tied to the named individual
- Switch to individual agent lookups for compliance use cases
Enrichment endpoints return fewer rows than counts.*Total
- Zillow limits
/agent/for_sale,/agent/for_rent, etc. to 4-5 rows per page; raisemaxListingsPerAgent/maxSoldPerAgentand the actor will paginate further - For agents with 1,000+ sold properties, set
maxSoldPerAgent: 1000(default is 50)
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as personal email addresses of consumers, gender, or location. They only extract what the agent has chosen to share publicly on their Zillow profile page (the same fields any visitor can see). We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
⚠️ Trademark Disclaimer
This is an independent tool — not affiliated with, endorsed by, sponsored by, or in any way officially connected with Zillow Group, Inc. or any of its subsidiaries or affiliates. "Zillow" is a registered trademark of Zillow, Inc. All product names, logos, and brands are property of their respective owners. Data is sourced from publicly available agent profile pages.
🤝 Support
Join our active support community
- Report issues or request features via the Apify Console Issues tab
- Check the SIÁN Agency Store for more real-estate and lead-gen automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools