Zillow Agent Scraper - Agent Leads & Their Listings avatar

Zillow Agent Scraper - Agent Leads & Their Listings

Pricing

from $1.80 / 1,000 agent scrapeds

Go to Apify Store
Zillow Agent Scraper - Agent Leads & Their Listings

Zillow Agent Scraper - Agent Leads & Their Listings

Every estate agent in a city, with everything they have for sale and for rent: price, beds, baths, address, coordinates and brokerage. Plus review score, career sales, average sale price and price range. Optionally add Zestimate, floor area, year built and description to every listing.

Pricing

from $1.80 / 1,000 agent scrapeds

Rating

0.0

(0)

Developer

Kamil Ertekin

Kamil Ertekin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Zillow Agent Scraper

One row per estate agent, with everything they currently have on the market.

What it does

Type a city. Get every agent Zillow lists there, ranked busiest first, each with their review score, career sales, sales in the last twelve months, average sale price and price range. Switch on the portfolio options and each row also carries every property they currently have for sale and every one they have for rent, with price, beds, baths, address, coordinates and brokerage.

It works from the agent's own record rather than from properties, which is why the portfolio is the agent's whole portfolio rather than whatever happened to fall inside a search.

What comes back

FieldWhere it comes from
agentName · encodedZuid · profileUrl · photoUrlAgent directory
isTopAgent · isTeamAgent directory
reviewAverage · reviewCountLabelAgent directory
salesAllTime · salesLastYearZillow's public sales-stats endpoint
priceRangeMin · priceRangeMax · averageSalePriceSame, over three years
listingsTheir live for-sale portfolio, 21 fields each
rentalsTheir live rental portfolio, same shape
listingCount · rentalCountThe agent's true totals
listingsFetchedHow many this run actually pulled
listingsTotalValueSum of their live asking prices

The count fields and the fetched fields are deliberately separate. A row reading listingCount: 55 beside ten listings is telling you the agent has 55 and your cap stopped at ten. A portfolio you did not ask for is left off the row altogether rather than reported as zero, because a zero that means "we did not look" is indistinguishable from one that means "they have none".

What is not here

No agent email address, and no licence number. Both appear only on the /profile/<slug> page, which returns HTTP 403 to any request without a real browser behind it. That was re-tested on 30 August 2026 across three agents, from a clean residential IP, in the same minute the endpoints this Actor does use returned 200. Actors that publish agent email are either driving a headless browser per profile or serving it from a database they built earlier. Both are legitimate; neither is free, and this Actor does not pretend to do it.

What about what they have already sold?

Not available, and this is worth explaining because it changed while this Actor was being built.

Zillow does publish an agent's full sold history, thousands of closed sales per agent, from an endpoint on their profile. It was working on 30 August 2026. On 31 August it began returning HTTP 403 to every request that does not carry a browser session cookie. Verified both ways on the same day: the endpoint returns 200 inside a real browser and 403 to the same URL, same headers, from 30 different residential addresses.

Earning that cookie means running a full browser per profile and solving a JavaScript challenge. This Actor is deliberately HTTP-only, which is why it costs what it costs, so sold history is not offered rather than offered unreliably. The salesAllTime, salesLastYear and averageSalePrice columns still answer "how much has this agent sold", from a different endpoint that is not gated. What is not available is the list of individual houses.

Full property records

The agent's own record carries price, beds, baths, address, coordinates and brokerage for each listing. It carries no valuation, no floor area, no year built, no tax rate and no description, because Zillow does not put those there.

Switch on Add the full property record to each listing and every for-sale row picks up Zestimate, rent Zestimate, living area, lot size, year built, days on Zillow, price change, MLS id, property tax rate, monthly HOA fee, photo count and the listing description, plus the listing agent's direct phone, which the directory never publishes. That means opening one property page per listing, so it is charged separately and is off by default.

This is the one thing here that comes from the same parser behind the Zillow Property Detail Scraper, and it is the part of this Actor that has no equivalent elsewhere.

How to use it

  1. Type your cities, for example Austin, TX or Chicago, IL.
  2. Choose what to pull per agent. For sale is on by default. Rentals are off, because most agents have none.
  3. Set the caps. Zillow returns five rows per request on both portfolios, so the caps are what decide the cost of a run.
  4. Click Start.

Agents are returned busiest first, and every filter is applied before any portfolio is fetched, so a run capped at 50 agents reads 50 agents' portfolios rather than every agent the directory happened to return.

What you are charged for

Two events, both of which you control:

  • Agent scraped, once per agent row delivered. Agents removed by your filters are never charged.
  • Listing enriched, once per property page opened, and only when you switch full property records on. Leave it off and it never fires.

The caps are your spend control. Because Zillow serves five rows per request and offers no larger page, a cap of 25 listings costs five requests per agent and a cap of 100 costs twenty. A measured 100-agent Chicago run with a 25-listing cap took 1 minute 41 seconds and 167 page fetches, with nothing lost to blocking.

Input example

Agents in a city, with everything they have listed:

{
"locations": ["Chicago, IL"],
"maxItems": 50,
"minSalesLastYear": 10,
"includeActiveListings": true,
"maxListingsPerAgent": 25,
"includeRentals": true,
"maxRentalsPerAgent": 25
}

A cheap agent list with no portfolios at all:

{
"locations": ["Austin, TX"],
"topAgentsOnly": true,
"minSalesLastYear": 20,
"includeActiveListings": false,
"maxItems": 200
}

Output example

One real row from a Chicago run, trimmed:

{
"agentName": "Matt Laricy",
"encodedZuid": "X1-ZUyy58njdzkphl_aqadk",
"isTopAgent": true,
"reviewAverage": 5,
"salesAllTime": 6924,
"salesLastYear": 550,
"averageSalePrice": 556672,
"listingCount": 55,
"listingsFetched": 10,
"listingsTotalValue": 4524894,
"rentalCount": 0,
"listings": [
{
"zpid": 80851288,
"url": "https://www.zillow.com/homedetails/440-N-Wabash-Ave-APT-2907-Chicago-IL-60611/80851288_zpid/",
"price": 225000,
"homeType": "condo",
"homeStatus": "active",
"bedrooms": 1,
"bathrooms": 1,
"streetAddress": "440 N Wabash Ave APT 2907",
"city": "Chicago",
"state": "IL",
"zipcode": "60611",
"latitude": 41.89042,
"longitude": -87.627464,
"brokerName": "Americorp, Ltd"
}
]
}

One row per agent, with the portfolios nested. Apify's CSV and Excel export flattens them into numbered columns, listings/0/price, listings/1/price and so on.

Integrations

Connect this Actor to n8n, Make, Zapier, Pipedream, HubSpot, Airtable, Slack, Telegram, Gmail, Google Drive, Snowflake, Keboola, Airbyte, GitHub, LangChain, the OpenAI Agents SDK, the Vercel AI SDK and Google ADK, or to anything else through webhooks and the Apify API.

Two combinations worth knowing:

  • Recruiting shortlist. Filter on minimum sales in the last twelve months, schedule it monthly against your target cities, and send the finished dataset to Airtable or HubSpot. Agents below your threshold are dropped before they are charged.
  • Full records for an agent's stock. Switch on full property records to get Zestimate, floor area and description on everything an agent is selling, which is the same data the Zillow Property Detail Scraper returns for properties you already have URLs for.

FAQ

This Actor reads public pages. There is no login, no paywall and no personal data beyond what a working agent publishes as their business contact details. What you do with the results is your responsibility, particularly if you contact anyone, where marketing and data-protection rules apply. This is not legal advice.

Does this Actor respect robots.txt?

Yes, and it needs no exception. The agent directory, the sales-stats endpoint and all three portfolio endpoints are permitted. The switch is there so that if Zillow changes its rules, the run stops rather than carrying on.

Earlier versions had to qualify this, because building an agent's portfolio meant scanning a city's listings through a route Zillow's robots.txt does not permit. That route is gone.

Why does an agent have fewer listings than listingCount says?

Because your cap stopped the fetch. Zillow returns five rows per request, so maxListingsPerAgent decides how many pages are worth asking for. listingCount is always the agent's real total, so the two together tell you exactly what you have and what you are missing. Raise the cap to close the gap.

Can I get agent email addresses?

No. See "What is not here" above. Phone numbers are available on for-sale listings when you switch on full property records, since a property page names the listing agent and their direct number.

Why are some agents teams rather than people?

Because Zillow's directory ranks both, and it does not separate them. "Vesta Preferred Realty" and "Matt Laricy" sit side by side in the same results. Every row carries isTeam so you can split them yourself, and statsIncludeTeam tells you whether a sales figure covers the individual or the whole team.

Can I use this with the Apify API or an MCP server?

Yes, both. The Actor runs under limited permissions and needs no special access.

Other real-estate scrapers

ActorWhat it does
Zillow Property Detail ScraperFull 60-field record for any property
Zillow Search ScraperFind listings by area and filters
Zillow Agent ScraperThis one

Support

Missing a field, or want a different shape? Open an issue on the Issues tab. Field requests are welcome, and if Zillow publishes it, it can usually be added.