Zillow Search Scraper
Pricing
from $1.60 / 1,000 results
Zillow Search Scraper
Scrape Zillow real-estate listings by location or search URL. Extracts zpid, address, price, beds/baths, photos, status, broker, lat/lon, and 40+ more fields from Zillow Search Results Pages.
Pricing
from $1.60 / 1,000 results
Rating
0.0
(0)
Developer
Crikit
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What this Zillow Search Scraper does
This Zillow Search Scraper extracts real estate listing data from Zillow Search Results Pages at scale. Give it a Zillow search URL (or a location string like austin-tx, 90210, Seattle, WA) and the actor walks every page in the search, parses Zillow's server-rendered JSON payload, and emits one structured record per listing. No login, no cookies, no API key. The actor works entirely from public search pages on zillow.com.
The Zillow Search Scraper is built for analytics, lead generation, and market intelligence use cases that need clean Zillow data without writing a scraper from scratch.
What you get per listing
The actor extracts all 60+ fields Zillow embeds in each search result, including:
- Identity:
zpid,id,palsId,detailUrl(link to the property's HDP page on Zillow) - Address:
address,addressStreet,addressCity,addressState,addressZipcode,isUndisclosedAddress - Pricing:
price,unformattedPrice(numeric),countryCurrency,shouldShowZestimateAsPrice,shouldShowRequestOnPrice - Physical:
beds,baths,area(sqft),latLong(latitude/longitude) - Status:
statusType(FOR_SALE/RECENTLY_SOLD/FOR_RENT/COMING_SOON/PENDING),statusText,rawHomeStatusCd,marketingStatusSimplifiedCd,availabilityDate - Media:
imgSrc(hero photo),hasImage,has3DModel,hasVideo,carouselPhotosComposable(responsive photo srcset) - Open house:
hasOpenHouse,openHouseStartDate,openHouseEndDate,openHouseDescription - Broker / attribution:
brokerName,isFeaturedListing,isShowcaseListing,isZillowOwned,isPaidBuilderNewConstruction - Provenance (added by the actor):
foundOnSearchPage,foundFromSearchUrl
Every field that Zillow returns flows through to your dataset, so when Zillow adds a new attribute, your dataset gets it on the next run with no schema changes.
Why use this Zillow Scraper
- 30% cheaper than the leading competitor on Apify Store ($0.0016 per listing on FREE tier vs the leader's $0.0023). Tier discounts apply automatically.
- 100% field match with the leading competitor on the same input (820 / 820 listings on a full Austin scrape, validated against ground truth).
- No cookies, no logins. You never paste credentials. The scraper works from a clean Apify residential proxy session.
- Crawlee + Cheerio + Apify residential proxy, so it survives Zillow's PerimeterX anti-bot stack without spinning up a browser. Costs less than browser-based scrapers and runs about 5x faster.
- Stable schema. The output mirrors Zillow's own
listResultsshape; downstream pipelines that already parse Zillow data work without modification.
Input
| Field | Type | Description |
|---|---|---|
searchUrls | array of {url} | Zillow search URLs. Anything that resolves to a Search Results Page works (e.g. https://www.zillow.com/austin-tx/, https://www.zillow.com/homes/for_sale/?searchQueryState=...). |
locationQueries | array of strings | Convenience input. Strings like austin-tx, 90210, Seattle, WA are auto-converted to Zillow URL slugs. |
extractionMethod | string | Currently only PAGINATION is supported (walks _p/ pages, up to ~820 listings per search slice). MAP_MARKERS and zoom-tiling modes are planned for v2. |
maxItems | integer | Hard cap on listings returned. 0 = unlimited (still bounded by maxPagesPerSearch and Zillow's own 820 cap per slice). |
maxPagesPerSearch | integer | Cap on pages walked per search URL. Zillow itself only paginates up to 20 pages (~820 listings) per region+filter combination. |
proxyConfiguration | object | Apify proxy settings. Residential US strongly recommended; datacenter IPs get flagged within a handful of requests by PerimeterX. |
You must supply at least one of searchUrls or locationQueries.
Sample input
{"searchUrls": [{ "url": "https://www.zillow.com/austin-tx/" },{ "url": "https://www.zillow.com/seattle-wa/condos/" }],"locationQueries": ["90210"],"extractionMethod": "PAGINATION","maxItems": 200,"maxPagesPerSearch": 20,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Sample output
{"zpid": "338246448","id": "338246448","palsId": "222004_40830219","address": "2500 Longview St #518, Austin, TX 78705","addressCity": "Austin","addressState": "TX","addressZipcode": "78705","price": "$500,000","unformattedPrice": 500000,"beds": 2,"baths": 2,"area": 1010,"latLong": { "latitude": 30.289932, "longitude": -97.75102 },"statusType": "FOR_SALE","statusText": "For Sale","imgSrc": "https://photos.zillowstatic.com/fp/example-cc_ft_960.jpg","brokerName": "Compass RE Texas, LLC","detailUrl": "https://www.zillow.com/homedetails/2500-Longview-St-518-Austin-TX-78705/338246448_zpid/","foundOnSearchPage": 1,"foundFromSearchUrl": "https://www.zillow.com/austin-tx/"}
Measured coverage
Validated by running the same input as the leading competitor (Austin TX, full 820-result pull) and comparing:
| Metric | Value |
|---|---|
| Listings overlap with competitor | 820 / 820 (100.0%) |
| Field-name match | 61 / 61 fields |
| Critical fields (zpid, address, price, beds/baths, lat/lon, statusType, brokerName, imgSrc, detailUrl) | 97.6% to 100% coverage, 100% value match on overlapping records |
Fields that are present on a subset of listings (rentals only, land only, providerListing only) flow through automatically when Zillow includes them in the source data.
Pricing
Pay-per-result, $0.0016 per listing on the FREE tier. Apify's tier discounts apply automatically (BRONZE/SILVER/GOLD/PLATINUM/DIAMOND).
Worked examples (FREE tier):
- 100 listings: $0.16
- 1,000 listings: $1.60
- 10,000 listings: $16.00
- One full Austin TX scrape (~820 listings): about $1.31
Compare to the leading Zillow search scraper on Apify Store at $0.0023 per listing on FREE tier (about 30% more).
Limits and edge cases
- 820 listings per (region, filter) slice. Zillow caps
/page_p/pagination at 20 pages of 41 listings = 820. To exceed this for a region with more inventory, either (a) split your search by neighborhood / ZIP / price range and run the actor on each slice, or (b) wait for the v2 zoom-tiling mode. - Geo gating. Run on a US Apify proxy. Zillow auto-redirects non-US IPs to localized pages (Canadian IPs get Canadian listings).
- Restricted listings. Some states (e.g. NY, parts of CA) hide certain listings from unauthenticated viewers. They appear in
restrictedListingCounttotals on Zillow but are not in the returnedlistResults. This affects approximately 1-3% of listings in affected markets. - PerimeterX retries. Zillow runs PerimeterX bot detection. Expect 1-2 retries per 20-request batch; the actor handles this transparently with session rotation. If your concurrency is very high you may see your request count exceed your listing count by 10-15%.
- Live data. Zillow listings change continuously (new postings, price changes, sold transitions). Running the same input twice will return slightly different listings if the underlying market moved.
Technical details
- Stack: Node.js 20 + Crawlee
CheerioCrawler+got-scrapingwith Chromeheader generator. No browser, no JavaScript execution. - Memory footprint: 512 MB recommended.
- Throughput: about 50,000 listings per hour at default concurrency on Apify residential proxy.
- TLS:
got-scrapinguses Chrome's HTTP/2 SETTINGS frame and realistic headers to bypass Zillow's JA3 fingerprinting.
FAQ
Does this Zillow Search Scraper need an API key? No. Zillow's web search is publicly accessible; the actor reads the same data anyone can see in a browser.
Does it need my Zillow login or cookies? No. This scraper never asks for user credentials.
What's the difference between this and maxcopell/zillow-detail-scraper? This actor extracts the search-page listing card (60+ fields). For deeper details on a single property (RESO facts, price history, tax history, schools, full photo set), use a detail page scraper that takes a zpid or detail URL as input.
Can I run it via the Apify API or schedule it? Yes, like any Apify actor. Use the standard Run actor API or attach a schedule in the Apify Console.
Changelog
- 0.1 (2026-05-14): initial release. PAGINATION mode (up to 820 listings per search slice). 61-field output matches competitor schema 1:1.