Zillow Scraper avatar

Zillow Scraper

Pricing

Pay per event

Go to Apify Store
Zillow Scraper

Zillow Scraper

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Categories

Share

Search Zillow and get properties back as rows: address, price, beds, baths, square feet, price per square foot, coordinates, home type, days on market and Zillow's own valuation estimate.

No login, no cookie, no browser, no solver.

What you get

  • price_per_sqft on every priced row. Zillow does not publish it on the card, and it is the number every property comparison actually turns on. Computed from price and living area, and null when either is missing rather than guessed
  • Coordinates on every row, so results drop straight into a map or a spatial join
  • The full record, not just the card. Home type, lot size, tax assessed value, Zestimate, rent Zestimate, days on market and the listing brokerage all come from the nested payload behind each result
  • Zillow's own match count. totalMatches says 5.573 properties exist for a search that returned 100, so a sample never looks like the whole answer
  • For sale, recently sold and rentals from one actor
  • An access route written down, with its date. This is a measurement, not a property of the site, and it is stated as such below

The access route, stated plainly

Zillow refuses almost every automated request, which is why most scrapers for it either need a browser or stop working.

It answers 200 with about 1,3 MB to Google-Extended, which is Google's AI-training crawler token.

That is worth spelling out because no amount of reasoning would have produced it: Zillow refuses the crawler that indexes it and admits the one whose documented purpose is model training. A refusal from one crawler tells you nothing about another, which is why the working identity has to be found by enumeration rather than deduction.

The consequence for you: this needs no browser and no CAPTCHA solver, so it is fast and cheap. The risk: a single-identity route can close, and if it does this actor reports forbidden with that explanation rather than returning an empty result. Re-check monthly.

Input

FieldTypeRequiredDefaultWhat it does
locationstringone of the twoAustin, TXCity and state
listing_typeselectnofor_saleFor sale, sold, or rentals
urlstringone of the twoA Zillow search URL, filters included. Takes precedence
limitintegerno100Properties to return, 1 to 800. A page carries 41
retriesintegerno3Retry attempts per page

Output

{
"position": 1,
"zpid": "29369311",
"url": "https://www.zillow.com/homedetails/6305-Leatherwood-Cv-Austin-TX-78759/29369311_zpid/",
"address": "6305 Leatherwood Cv, Austin, TX 78759",
"city": "Austin",
"state": "TX",
"zipcode": "78759",
"price": 750000.0,
"beds": 4.0,
"baths": 3.0,
"living_area_sqft": 2164.0,
"price_per_sqft": 346.58,
"lot_area": 9017.0,
"home_type": "SINGLE_FAMILY",
"status": "FOR_SALE",
"days_on_zillow": 5,
"tax_assessed_value": 558793.0,
"latitude": 30.422058,
"longitude": -97.75903,
"broker": "Keller Williams Realty",
"listing_type": "for_sale"
}

Use cases

Comparable-sales analysis. Pull a ZIP code, group by home_type and take the median price_per_sqft. That single column is what an appraisal argument is built on, and computing it yourself from a scraped price and a scraped area is where most pipelines introduce their errors.

Finding mispriced listings. Compare price against zestimate per row. A listing well under Zillow's own estimate is either a bargain or has a problem, and either way it is worth a look. days_on_zillow tells you whether the market already noticed.

Investor screening at scale. tax_assessed_value beside price shows where asking prices have run ahead of assessments. Combine with rent_zestimate for a gross yield estimate without a second data source.

Mapping and territory work. Every row carries latitude and longitude, so a run drops into a map, a drive-time analysis or a spatial join with no geocoding step and no geocoding bill.

Market monitoring. Schedule a location and diff on zpid. New ids are new listings, disappeared ids are off-market, and days_on_zillow on the survivors shows how fast the market is moving.

How it compares

this actormaxcopell/zillow-detail-scraperigolaizola/zillow-scraper-ppe
Per 1.000 properties$1,50no per-item rate$0,90
Actor-start fee$0,002
price_per_sqft computedyesnot statednot stated
Coordinates on every rowyesnot statednot stated
Zillow's own match count returnedyesnono
Access route documentedyes, with its datenono
Monthly usersnew1.030126

Honest about the other side, and it is the important column: maxcopell holds 1.030 monthly users on this actor alone, 1.930 across three, and charges nothing per row. No price competes with that. The case for paying here is the derived fields and knowing exactly how the data is being fetched.

Pricing

Two events. run_start costs $0,0020 per run. property costs $0,0015 per property written to the dataset, which is $1,50 per 1.000.

Limits and gotchas

  • Sold listings carry no sale price. Zillow returns soldPrice as an empty string in its sold search payload and no price field exists anywhere in the record; verified across a full page of 41. Those rows carry date_sold and zestimate instead, and the run summary says so. If you need actual sale prices, this surface does not have them.
  • Rentals are keyed differently. Rental results are often buildings rather than individual homes, so zpid can be absent and the URL is the stable key.
  • 41 properties per page, paginated by path. /2_p/ moves; there is no page parameter. A URL you paste should be the plain one.
  • beds is missing on some sold rows because Zillow omits it there, about one row in five in testing.
  • zestimate is Zillow's model, not a valuation. It is returned because it is useful as a reference point, not because it is authoritative.
  • Pages are fetched one at a time on purpose. The site tolerates a single identity, and hammering it in parallel is the fastest way to lose the only route that works. A 800-row run takes minutes.
  • US only.

FAQ

Does this need a browser or a CAPTCHA solver? No. It is a plain HTTP fetch, which is why it is fast.

Why does my sold search have no prices? Because Zillow does not put them in that payload. It is absent at the source, not dropped by the actor.

How many properties can I get in one run? Up to 800, which is about 20 pages. totalMatches tells you how many exist so you can decide whether to narrow the area.

Can I use my own filtered search? Yes. Apply the filters on Zillow, then paste the URL into url.

Will this keep working? It is a measurement taken on 2 September 2026, not a guarantee. Single-identity routes close. If it does, the run says forbidden and explains why rather than returning nothing.