New filters
- Home types: houses, townhomes, condos, apartments, multi-family, land and
manufactured. Pick any mix; leave empty for every type. Each one was checked
on Austin, TX: "condos only" returned only condos (1,319), "houses and
townhomes" returned 3,621, which is houses (3,498) plus townhomes (123).
On rentals Zillow treats apartments and condos as one type, so either choice
gets both.
- Listing types, for homes for sale: listed by an agent, for sale by owner
(FSBO), new construction, foreclosures and bank-owned, auctions, coming soon,
and pending or under contract. Pick some to get only those. Pending homes are
left out unless you pick Pending, as on Zillow. Austin by owner: 27 listings,
all FSBO.
- A home type nobody recognises ("spaceship") ends the run with a message,
nothing searched and nothing charged, instead of quietly searching every type.
Zillow's own spellings (
SINGLE_FAMILY, TOWNHOUSE) and plain ones ("condos",
"fsbo") are understood, also under homeType or propertyType.
New columns (17, all additions; no existing column changed)
photos and photoCount: every photo of the listing at full size (1536 px),
in Zillow's order. Checked against the property page of a 40-photo listing:
the same 40 photos in the same order.
priceChange, priceChangeDate and priceChangeLabel: the latest price
change. A negative amount is a cut; the label is Zillow's own text for cuts
("$25,000 (Oct 17)"). 12 of 41 Austin listings had one.
datePosted: the day the listing went up, in the same format as Zillow
Property Detail Scraper. Empty on sold searches, where Zillow counts from the
sale.
pricePerSqft: price per sq ft of living area. Monthly rent per sq ft, in
dollars and cents, on rentals. Empty on apartment buildings.
- Listing type flags, true or false:
isForSaleByAgent, isForSaleByOwner,
isNewConstruction, isComingSoon, isForAuction, isForeclosure,
isBankOwned, isPending, isOpenHouse. Same names as the detail scraper.
Empty on apartment buildings, which carry no listing type.
scrapedAt: when the row was collected, as an ISO 8601 UTC timestamp.
- New view in Console: Price cuts & listing type.
Fixes
- A location Zillow doesn't know no longer fails the run when it comes with
a URL that isn't a search page. The run used to end in a failure that blamed
the connection settings. It now succeeds with no rows, charges nothing, and
says which places weren't found and which URLs weren't searches.
limit, maxResults and resultsLimit are read as Maximum results, for
API and AI-agent callers. A run sent limit used to ignore it and deliver up
to 100. If you set Maximum results to something other than 100 yourself, that
still wins.
- New column
dateSold on recently sold searches: the exact sale date
Zillow shows on the card ("Sold 10/19/26"). Filled on 41 of 41 Denver rows.
- No status message mentions proxies or connection settings any more.
Not added: year built. Zillow's search results don't include it, so it stays
with Zillow Property Detail Scraper. The README also no longer says the detail
scraper has price history; it doesn't.
zpid is now a number, as in Zillow Property Detail Scraper, so the two
datasets join without a cast. It was a string.
currency reads "USD", as on property pages. It was "$".
- Lot size matches the detail Actor.
lotAreaUnits reads Acres or
Square Feet (was acres / sqft), lotAreaValue is rounded (whole sq ft,
acres to 4 decimals; 0.32999999999999996 is now 0.33), and a new
lotSize column gives every lot in sq ft.
- New
isShowcaseListing column. has3DModel was checked against Zillow's
own card badges on a 41-row Austin page: it is true exactly on listings badged
"3D Tour" or "Showcase", so the mapping was right. A test run where all 8 rows
were true was Zillow's default order putting Showcase listings first.
- Maximum results is now strict. A busy run could in theory deliver a few
rows past the cap; it now stops exactly at it.
- A pasted property URL (
/homedetails/) or a malformed URL is skipped with a
message instead of failing the run with a misleading error.
- A search that matches nothing ends with a status message saying so, and every
finished run reports how many listings it delivered.
- Offline tests with saved Zillow pages:
tests/test_offline.py.
- README and input form rewritten. No change to pricing.
- A place Zillow does not know no longer fails the run. It now succeeds,
searches nothing, charges nothing and says which location was not found, the
same way the agent Actor already handled it.
- The location lookup retries. It was a single request with no retry, so one
refused connection failed the whole run. It now tries three times, the second
and third through the proxy on a fresh IP.
- Field names that API and AI-agent callers guess are read. An MCP-driven run
sent
"location": "Tempe, AZ" instead of "locations" and failed with nothing to
search. Another sent "listingStatus": "Sold", which this Actor did not read, so
it returned and charged for homes for sale instead. Both now work: location,
city, zip and similar are read as locations, a ZIP sent as a number is
accepted, and listingStatus or status sets the listing type when
listingType is not given.
- When a run still has nothing to search, the message names the fields it received
and did not recognise.
First release.
- Search Zillow by city, ZIP, county, or neighborhood, typed in plain English, or paste a
Zillow search URL. Filters for price, beds, baths, size, lot, year built, and a dozen
other features, across for-sale, for-rent, and recently-sold listings.
- Gets past Zillow's 820-result ceiling. A search reports its true total but only ever
returns 20 pages of 41. Austin, TX reported 5,787 for-sale listings and handed back 820.
Areas over the cap are split into smaller map sections and searched separately, recursing
up to 4 levels deep, with duplicates removed by
zpid. A verified run pulled 1,500 Austin
listings from 43 pages in 52 seconds, dropping 209 duplicates and hitting zero blocks.
- Rental price filters actually filter. Zillow accepts a normal price filter on rental
searches and silently ignores it. In testing, 24,938 Austin rentals stayed at 24,938 with a
$1,500 to $2,500 filter applied. The key that works is used automatically.
- Apartment buildings on rentals are parsed properly. Most rental results are whole
buildings, not single homes, and Zillow returns them without a price or a bedroom count.
On page one of a Denver rental search, 38 of 41 results were buildings. Those rows now carry
isBuilding, buildingName, priceMin, priceMax, bedroomsMin, bedroomsMax and
availableUnitCount, and price is filled from the lowest available rent. Measured before
and after: price fill on Denver rentals went from 8% to 100%.
- Published fill rates. The README carries the measured fill rate for all 41 fields,
taken from 200 unfiltered Austin results. Notably
zestimate is present on 16% of rows and
rentZestimate on 23%, because that is how often Zillow publishes them.
- Residential US proxies by default. A measured A/B returned 60 of 60 properties on
residential and nothing at all on datacenter.
- Four dataset views: Listings, Price vs Zestimate, Coordinates, and Rentals & buildings.
- Verified at scale. A single Austin search returned 5,000 distinct listings in 3 minutes
49 seconds across 186 pages, filtering 2,456 duplicates and hitting zero blocked requests.
The result set spanned 63 ZIP codes, 864 brokerages, and prices from $2,995 to $63,000,000.
- Default memory raised to 1 GB, with up to 4 GB available, so large runs have headroom. A
5,000-result run peaked at 208 MB.