Zillow Scraper
Pricing
Pay per event
Zillow Scraper
Pricing
Pay per event
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor 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_sqfton 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.
totalMatchessays 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
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
location | string | one of the two | Austin, TX | City and state |
listing_type | select | no | for_sale | For sale, sold, or rentals |
url | string | one of the two | – | A Zillow search URL, filters included. Takes precedence |
limit | integer | no | 100 | Properties to return, 1 to 800. A page carries 41 |
retries | integer | no | 3 | Retry 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 actor | maxcopell/zillow-detail-scraper | igolaizola/zillow-scraper-ppe | |
|---|---|---|---|
| Per 1.000 properties | $1,50 | no per-item rate | $0,90 |
| Actor-start fee | $0,002 | – | – |
price_per_sqft computed | yes | not stated | not stated |
| Coordinates on every row | yes | not stated | not stated |
| Zillow's own match count returned | yes | no | no |
| Access route documented | yes, with its date | no | no |
| Monthly users | new | 1.030 | 126 |
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
soldPriceas 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 carrydate_soldandzestimateinstead, 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
zpidcan 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. bedsis missing on some sold rows because Zillow omits it there, about one row in five in testing.zestimateis 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.
Related Actors
- Redfin Scraper — the same job on Redfin
- Marktplaats Scraper — Dutch classifieds including property
- Willhaben Scraper — Austrian classifieds across four verticals