- New optional search filters, applied by Zillow's own agent search: Top agents only, Buyer's agents, Listing agents, Specialties, Languages, Min / Max sale price and Agent name.
- New optional output filters: Require a phone number, Require an email address and Brokerage name contains. An agent whose profile does not show the value is left out.
- More fields on every agent, from the same profile page:
businessPhone, officeAddress (+ city, state, postal code), isTopAgent, isPremierAgent, title, description, yearsInIndustry, memberSince, specialties, languages, websiteUrl, socialLinks, salesPriceRange, salesPriceMin, salesPriceMax, averageSalePrice, activeRentalListingsCount, teamMemberCount, licenses, otherLicenses, mlsIds. Existing fields are unchanged.
- A pasted agent-search URL now keeps the filters it was built with (language, specialty, price range...). Before, it was searched without them.
- A location Zillow does not recognise (for example a typo) now ends with a status message naming it, instead of an empty run with no explanation.
- A location whose scan was interrupted part-way is no longer dropped with every agent after that point. The run now finishes the other locations first, then picks the interrupted location up again where it stopped. If it still cannot be finished, the run's final status names that location so you know to run it again.
- Agents whose profile could not be read on the first try are now tried once more at the end of the run instead of being left out. Any that still cannot be read are counted in the run's final status.
- A run that is about to reach its timeout now stops cleanly: it saves every agent already found and ends with a status that says how many were saved and how to get the rest (raise the timeout or split the locations). Before, such a run was cut off and ended as timed out.
- A run that found agents but could not read any of their details now says so in its final status, instead of ending as an ordinary run with no results.
- Each run now starts on its own fresh connections, so a new run of the same location is no longer slowed down by the previous run's.
- A run that is restarted by the platform part-way through no longer stores, and bills, the same agents twice. After a restart the run continues from the agents it has already saved: they are not fetched or stored again, and
maxResults counts them, so a restarted run never returns more than you asked for. Incremental runs behave the same way: agents and EXPIRED rows already saved are not repeated and are still remembered for the next run.
- An incremental run that you abort (with the default graceful abort), or that reaches its run timeout, now releases its
stateKey before it stops. The next run with the same stateKey can start right away instead of exiting with "State locked by another run".
- Runs with a maximum cost limit now use the full budget. With a limit set, a run stopped early and returned fewer agents than the limit pays for. The run now stops cleanly at the limit instead of fetching profiles it cannot return; in incremental mode, new or changed agents beyond the limit are delivered by your next run. Prices are unchanged.
- Fixed: some agents came back with an empty
displayName although their profile shows a name. The name is now read from the profile's other name field when the first one is empty, also for agents already returned by an earlier run today.
- Lower price: $0.0012 per agent record (was $0.00145), the same as our Zillow property scraper.
- A brief connection drop while scanning a location no longer fails the whole run. The
affected page is retried, so runs that had already collected agents now finish normally.
- A partially-served agent page is now retried instead of being delivered as a record with
empty fields. Previously such a page could reach the dataset as an all-but-empty row —
most visibly a missing agent name — and was counted as a successful fetch.
- A run that returns nothing now says why: whether the location genuinely has no agents,
whether your own rating/sales/review filters removed every match (with the number found),
or whether the agents' details could not be read. Previously all three printed the same
"check the location or filters" line, which pointed at your query even when the query
was fine.
- Internal diagnostics only; no change to output.
- Fixed a fault that caused most agent detail pages to be rejected, so runs were delivering
only a small fraction of the agents they had already found. A location that returned a
couple of records now returns the full requested set.
- Large locations now continue past the point where a scan was previously interrupted,
instead of starting the location over and stopping at the same place. A single location
can now return substantially more agents, and a run no longer re-reads pages it has
already processed.
- Runs no longer fetch more agent profiles than they can return. A run asking for a small
number of results previously kept a full window of fetches in flight and threw the surplus
away, which made small runs slower and more expensive than they needed to be. Same records
out, less work done.
- Incremental runs now stop collecting as soon as
maxResults is reached. Previously an
incremental run kept scanning the whole location even when only a handful of records were
requested, so a small maxResults could take minutes instead of seconds. Output is
unchanged — the same records are delivered, just far faster.
- Full-coverage scanning is still performed when
emitExpired is on, since detecting removed
agents requires seeing the complete set.
- A response that stalls midway is now retried on a fresh connection instead of ending the run.
Previously a single stalled read could fail an otherwise healthy run and discard its results.
Initial release. Scrape US real estate agent & team leads from zillow.com — name,
business/team, phone, email, rating, review count, sales history, and active listings per
agent.
- Search by location (
agentLocations) or paste zillow.com agent profile URLs / an
agent-directory URL (startUrls) directly.
- Lead-quality filters:
minRating, minSales, minReviews.
- Incremental mode tracks new/changed/expired agents across runs, keyed on rating, total
sales, active listings, and review count.
- Notifications (Telegram, Slack, Discord, WhatsApp Cloud API, generic webhook) and MCP
connector export.