# Changelog of Zillow Agent Leads — Emails, Phones & Sales History (`afanasenko/zillow-agent-leads-scraper`) Actor

- **URL**: https://apify.com/afanasenko/zillow-agent-leads-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/afanasenko/zillow-agent-leads-scraper.md

## Changelog

All notable changes to this Actor are documented here.
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

### \[0.0.11] - 2026-09-23

#### Fixed

- **A run now stops at its "Maximum cost per run".** Agents are only looked up while the limit can
  pay for them. Everything charged is kept, and the run's message says how to get the rest.
- The "Welcome to the paid plan" message now appears only on your first paid run instead of on
  every paid run, and the check-in after your third paid run can now appear. The count starts with
  this version, so if you already ran this actor on a paid plan you see the welcome once more.

### \[0.0.10] - 2026-09-10

#### Changed

- Clarified wording in the live status page's endpoint descriptions. Nothing changes in how the
  actor runs, what it returns or what it costs.
- When a run fails for a reason on our side, the error message now stays short and plain.

### \[0.0.8] - 2026-09-01

#### Changed

- **Runs are several times faster.** A ten-agent search that used to take about a minute now
  finishes in seconds. Every column is unchanged — nothing was dropped to get there.
- **Richer recent-sales sample.** Each of the five most recent sales now also carries bedrooms,
  bathrooms, living area, city and state alongside the date, price, address and which side the
  agent represented.

#### Removed

- The **Operation Mode** picker. It offered one choice, so it was a decision you could not make.
- The **Include listing counts and recent-sale samples** switch. Those columns are now always
  included at no extra cost, so the switch could only make your output smaller.

### \[0.0.1] - 2026-09-01

#### Added

- **Mode 1 `agentSearch`** — find real-estate agents by area (ZIP code or `City, State`) or by
  name, and return one contact-ready row per agent.
- **Contact layer**: name, brokerage, email, cell and business phone, business address, photo,
  profile link.
- **Production layer**: sales in the last 12 months, sales in the searched area, lifetime sales,
  price band, live listing count, rental listing count, and a sample of the five most recent
  sales with dates, addresses and which side the agent represented.
- **Standing layer**: review count and average, reviews split by service type, Premier Agent
  status, Top Agent badge, years in the industry, specialities, languages, licences, MLS IDs and
  service areas.
- **Team handling**: every row carries `isTeam`, and a team row also carries its roster of named
  members with their own review counts — a team's sales figures belong to the team, not to one
  person, so the distinction is on the row rather than in the documentation.
- **Filters applied before charging**: minimum recent sales, minimum reviews, team/solo,
  email-only, Premier-only. An agent removed by a filter costs the customer nothing.
- **Free plan**: 10 agents per run, with the held-back agents still delivered as rows carrying
  `enrichmentStatus: "not_enriched"` and a `whyNotEnriched` note, so a caller reading only the
  dataset can tell a cap from an exhausted search.
- **Demo run**: an empty input searches Austin, TX capped at 5 agents and says so in the log.
- Live status page, plus `RUN_SUMMARY`, `USER_MESSAGE` and `FREE_LIMITS_APPLIED` storage records.

#### Notes

- Search results are deduplicated by agent, so an agent matched by two of your searches is
  returned once and charged once.
- Zillow's own "Get help finding an agent" promotional cards appear among search results. They
  are not agents, they are removed, and they are never charged.
- Sold listings are returned as a count plus the five most recent sales rather than the full
  history. A large brokerage has tens of thousands of past sales, and putting all of them on one
  agent's row would make the row unusable.
