Affordable Zillow Search (Pay Per Result)
Pricing
from $1.00 / 1,000 results
Affordable Zillow Search (Pay Per Result)
Zillow property listing scraper that pulls Zestimates, rent estimates, home types, broker info, and photos from any Zillow search URL, so real estate investors and analysts can get bulk listing data without manual browsing.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Kawsar
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Affordable Zillow Search: Scrape Zillow Property Listings by Search URL
Pull property listing data from Zillow search pages without spending hours copying and pasting. Hand this actor a list of Zillow search URLs, and it returns structured data for every listing on those pages: photos, Zestimates, rent estimates, home types, lot sizes, broker info, and direct links back to each listing. You pay per result, so you only spend what makes sense for your project.
This works by hitting Zillow's internal search API directly, which means fast results, no browser overhead, and no JavaScript rendering costs. It handles multiple search URLs in a single run, rotates proxies automatically to avoid blocks, and stops as soon as it hits your result or time limit.
Use cases
- Real estate market research: compare listings across multiple neighborhoods or zip codes without clicking through search pages one at a time
- Investment analysis: pull Zestimate and rent Zestimate data for a batch of areas to calculate rough cap rates and rental yields
- Lead generation for agents: collect broker names and listing URLs from target markets to build outreach lists
- Monitoring inventory: track how many listings appear in a given area on a schedule using Apify's built-in scheduler
- Data journalism: gather listing data across cities for housing supply stories or price comparison pieces
- Portfolio tracking: for investors who own properties in multiple areas, scrape current Zestimates to keep tabs on estimated values
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
url_list | array | (required) | Zillow search page URLs to scrape. One URL per line. |
maxItems | integer | 1000 | Cap on total results across all URLs. |
timeoutSecs | integer | 300 | Hard stop for the entire run, in seconds. Max: 3600. |
requestTimeoutSecs | integer | 30 | Per-request timeout in seconds. Max: 120. |
Example input
{"url_list": ["https://www.zillow.com/yonkers-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.99471544858046%2C%22south%22%3A40.894096449904%2C%22east%22%3A-73.70881095385742%2C%22west%22%3A-74.01951804614258%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22Yonkers%2C%20NY%22%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A34937%2C%22regionType%22%3A6%7D%5D%2C%22mapZoom%22%3A13%7D","https://www.zillow.com/jersey-city-nj/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.816156861215%2C%22south%22%3A40.614222204948376%2C%22east%22%3A-73.75802390771483%2C%22west%22%3A-74.37943809228514%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22Jersey%20City%2C%20NJ%22%2C%22mapZoom%22%3A12%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A25320%2C%22regionType%22%3A6%7D%5D%7D"],"maxItems": 1000}
What data does this actor extract?
Each listing in the output dataset looks like this:
{"searchUrl": "https://www.zillow.com/yonkers-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B...%7D","zpid": "20485684","listingUrl": "https://www.zillow.com/homedetails/123-Ocean-Ave-Santa-Monica-CA-90402/20485684_zpid/","photoUrl": "https://photos.zillowstatic.com/fp/abc123-p_e.jpg","homeType": "SINGLE_FAMILY","statusText": "ForSale","areaSquareFeet": 2150,"lotAreaValue": 7500,"lotAreaUnit": "sqft","zestimate": 3250000,"rentZestimate": 8500,"brokerName": "Compass","isFeatured": false,"scrapedAt": "2026-04-13T10:00:00.000000+00:00","error": null}
| Field | Type | Description |
|---|---|---|
searchUrl | string | The original Zillow search URL this listing came from. Useful for tracing which query produced which results. |
zpid | string | Zillow's unique property ID. |
listingUrl | string | Direct link to the listing detail page on Zillow. |
photoUrl | string | URL to the primary listing photo. |
homeType | string | Property type: SINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, etc. |
statusText | string | Listing status: ForSale, RecentlySold, ForRent, etc. |
areaSquareFeet | number | Living area in square feet, null if unavailable. |
lotAreaValue | number | Lot size value, null if unavailable. |
lotAreaUnit | string | Unit for lot size (sqft or acres). |
zestimate | number | Zillow's estimated home value in USD, null if unavailable. |
rentZestimate | number | Zillow's estimated monthly rent in USD, null if unavailable. |
brokerName | string | Name of the listing brokerage. |
isFeatured | boolean | Whether Zillow flags this as a promoted listing. |
scrapedAt | string | ISO 8601 timestamp of when the data was collected. |
error | string | Error message if this URL failed, null on success. |
How it works
- You provide one or more Zillow search URLs (the same URLs you see in your browser when browsing Zillow).
- The actor sends a request to Zillow's internal search API for each URL, mimicking a normal browser session.
- It pulls the "map results" from the response, which contains every listing shown on that search page.
- Each listing is parsed into a clean, flat JSON object and pushed to the output dataset.
- The actor stops when all URLs are processed, the max results cap is hit, or the timeout expires, whichever comes first.
Proxy Setup
Set your proxy in the actor's Apify Settings tab as an environment variable:
PROXY_URL or APIFY_PROXY_URL = http://username:password@proxyIP:port
FAQ
What kind of Zillow URLs work with this actor?
You must use full Zillow search URLs containing the searchQueryState query parameter (e.g. https://www.zillow.com/new-york-ny/?searchQueryState=%7B%22regionId%22%3A6181%7D). Bare location links without this parameter will not work because the API requires the region ID to be specified this way. You can get these URLs directly from your browser's address bar after performing a search on Zillow.
Does this handle pagination? Right now it pulls the first page of map results, which typically includes up to 80 listings depending on the area. If you need deeper pagination, run multiple searches with tighter geographic filters.
How do I avoid getting blocked?
We recommend using stable proxies via the PROXY_URL environment variable. Keep your request volume reasonable, do not hammer hundreds of URLs in rapid succession.
What happens if one URL fails?
The actor logs the error and records it in the output with an error field set. It then moves on to the next URL. One bad URL does not kill the whole run.
Is the data real-time? Yes. Each run fetches live data from Zillow's API. The results reflect whatever Zillow shows right now on those search pages.
Integrations
Connect Affordable Zillow Search with other apps and services using Apify integrations. You can integrate with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and many more. You can also use webhooks to trigger actions whenever results are available.
Set up a recurring schedule through the Apify platform to run this actor daily or weekly and pipe results into a Google Sheet or database for ongoing market monitoring.