Zillow Agent Scraper — Licenses, Contacts, Sales Stats avatar

Zillow Agent Scraper — Licenses, Contacts, Sales Stats

Pricing

from $19.00 / 1,000 agent extracteds

Go to Apify Store
Zillow Agent Scraper — Licenses, Contacts, Sales Stats

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Ü

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Zillow Agent Scraper — Licenses, Contacts, Sales Stats 🏠

SIÁN Agency Store Smart Idealista Scraper Bayut Property Scraper Redfin Property Scraper

🎉 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 identifiersmls_ouid + mls_agent_id arrays
  • 🏠 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

FieldTypeRequiredDescription
searchModestringYessearch or lookup
locationstringsearch modeCity + state, e.g. "Miami, FL"
languagestringNoOptional language filter, e.g. "Spanish"
lookupTargetsarraylookup modeProfile URLs, usernames, or encodedZuids
fetchAgentDetailsbooleanNoFetch full /agent/details per row (default true in search; always true in lookup)
includeForSalebooleanNoPaginate active for-sale portfolio per agent
includeForRentbooleanNoPaginate active rental portfolio per agent
includeSoldPropertiesbooleanNoPaginate full sold history per agent
includeReviewsbooleanNoPaginate client reviews per agent
maxAgentsPerQueryintegerNoDefault 50, max 500
maxListingsPerAgentintegerNoDefault 50, max 500
maxSoldPerAgentintegerNoDefault 50, max 2,000
maxReviewsPerAgentintegerNoDefault 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:

FieldTypeDescription
encodedZuidstringZillow's stable agent ID (e.g. X1-ZUx6y02vup6io9_88dzc)
usernamestringZillow profile slug
profileUrlstringFull Zillow profile page URL
agentNamestringDisplay name (e.g. "Dinorah de Cardenas - RESF")
businessNamestringBrokerage / team name
licensesarrayLicense #, state, status, type, expiration date
mlsIdsarraymls_ouid + mls_agent_id per active MLS
serviceAreasarrayregionId + text + Zillow URL for each market covered
contactobjectphoneNumbers (cell/business/brokerage), primaryPhone, email
businessAddressobjectBrokerage address (address1, city, state, postalCode)
salesStatsobjecttotalSales, salesLastTwelveMonths, averagePrice (USD), priceRange.min/max
ratingsobjectaverage (1-5), count
isPremierAgentbooleanPaid Zillow tier flag
isTopAgentbooleanZillow Top Agent flag
forSaleListingsarrayActive sale listings (when enriched)
forRentListingsarrayActive rental listings (when enriched)
pastSalesarraySold properties with sold_date + represented side
reviewsarrayClient reviews with rating, comment, work description
countsobjectCounts + 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 ApifyClient
client = 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)

  1. Trigger: Schedule weekly per target metro area, or webhook from your CRM when a new agent record needs enrichment
  2. HTTP Request: Call the actor API with the search query or lookup targets
  3. Process: Parse the JSON dataset; filter by license status, sales volume, or brokerage
  4. 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
  • 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)

TierActor StartAgent ExtractedAgent 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.

🔗 View current pricing


❓ 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_KEY before 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; raise maxListingsPerAgent / maxSoldPerAgent and the actor will paginate further
  • For agents with 1,000+ sold properties, set maxSoldPerAgent: 1000 (default is 50)

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

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools