Affordable Zillow Details Scraper (Pay-Per-Result)
Pricing
from $1.00 / 1,000 results
Affordable Zillow Details Scraper (Pay-Per-Result)
Zillow property details scraper that extracts pricing, features, tax records, and neighborhood data from any listing using URLs, ZPIDs, or addresses, so real estate teams can build datasets without manual lookups.
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 Details Scraper: Get Property Data by URL, ZPID, or Address
This Zillow scraper pulls property details in real time from Zillow listings. Hand it a property URL, a Zillow Property ID (ZPID), or a plain street address, and it gives back structured data you can feed into spreadsheets, databases, or analysis tools. You only pay for results that actually come back, so there's no charge for failed lookups.
Use cases
- Real estate market research: pull listing prices, Zestimates, and days-on-market for dozens of properties in one run and compare them side by side
- Investment property analysis: grab tax assessments, price history, and rental estimates to evaluate potential returns without manually visiting each listing
- Lead generation for agents: look up property details in bulk to build prospect lists with accurate pricing and owner info
- Portfolio monitoring: re-run the actor on a schedule to track price changes, status updates, and new Zestimates for properties you're watching
- Academic and data journalism projects: collect structured Zillow data across ZIP codes or neighborhoods for housing affordability studies
What data does this actor extract?
The actor returns a JSON object for each property. Fields vary depending on what Zillow has on file, but a typical response includes:
{"zpid": "19435371","propertyUrl": "https://www.zillow.com/homedetails/10791-Gooseberry-Ct-Truckee-CA-96161/19435371_zpid/","streetAddress": "10791 Gooseberry Ct","city": "Truckee","state": "CA","zipcode": "96161","price": 1250000,"zestimate": 1230000,"rentZestimate": 5200,"bedrooms": 4,"bathrooms": 3.5,"livingArea": 2800,"lotSize": 10454,"yearBuilt": 2005,"homeType": "SINGLE_FAMILY","homeStatus": "FOR_SALE","daysOnZillow": 14,"taxAssessedValue": 980000,"annualPropertyTax": 12500,"latitude": 39.3277,"longitude": -120.2137,"photoUrls": ["https://..."],"listingAgent": {"name": "Jane Smith", "phone": "530-555-0100"},"priceHistory": [{"date": "2023-06-15", "price": 1200000, "event": "Listed"}],"taxHistory": [{"year": 2023, "taxPaid": 12500, "assessedValue": 980000}],"schools": [{"name": "Truckee Elementary", "rating": 7, "distance": 1.2}],"fetchedAt": "2025-04-13T07:30:00Z","inputSource": "zpid"}
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
property_url | array | — | Full Zillow listing URLs. The actor parses each URL to extract the ZPID automatically. |
zpid | array | — | Numeric Zillow Property IDs. Fastest lookup method since it skips URL parsing. |
address | array | — | US street addresses in "Street, City, State ZIP" format. The actor searches Zillow for each one. |
maxItems | integer | 100 | Cap on total properties processed per run. Set to 0 for no limit. |
timeoutSecs | integer | 300 | Max run time in seconds. Results collected before timeout are still saved. |
requestTimeoutSecs | integer | 30 | Per-request timeout. Increase if individual lookups time out frequently. |
Example input
{"property_url": ["https://www.zillow.com/homedetails/21921-Calhoun-Dr-California-City-CA-93505/81863076_zpid/","https://www.zillow.com/homedetails/20649-83rd-St-California-City-CA-93505/18961308_zpid/"],"zpid": ["19435371", "30588492"],"address": ["11013 Rome Beauty Dr, California City", "17338 Kiowa River Ln, Houston, TX 77095"],"maxItems": 50}
Output
The actor stores each property as a separate item in the dataset. You can export results as JSON, CSV, XML, or Excel.
| Field | Type | Description |
|---|---|---|
zpid | string | Zillow Property ID |
propertyUrl | string | Direct link to the Zillow listing |
streetAddress | string | Street address of the property |
city | string | City name |
state | string | Two-letter state code |
zipcode | string | 5-digit ZIP |
price | number | Current listing price or last sale price in USD |
zestimate | number | Zillow's automated valuation in USD |
rentZestimate | number | Estimated monthly rent in USD |
bedrooms | integer | Bedroom count |
bathrooms | number | Bathroom count (decimals for half baths) |
livingArea | number | Interior square footage |
lotSize | number | Lot square footage |
yearBuilt | integer | Year the home was built |
homeType | string | SINGLE_FAMILY, CONDO, TOWNHOUSE, etc. |
homeStatus | string | FOR_SALE, SOLD, PENDING, etc. |
daysOnZillow | integer | Days since the current listing went live |
taxAssessedValue | number | Latest tax assessment in USD |
annualPropertyTax | number | Annual property tax in USD |
latitude | number | Latitude coordinate |
longitude | number | Longitude coordinate |
photoUrls | array | URLs to listing photos |
listingAgent | object | Agent name, phone, brokerage |
priceHistory | array | Past price changes and sale records |
taxHistory | array | Tax assessment history |
schools | array | Nearby schools with ratings and distance |
fetchedAt | string | ISO 8601 timestamp of when data was pulled |
input_query | string | The original input you provided (URL, ZPID, or address) — always present even on errors |
inputSource | string | Which input type triggered this lookup |
errorMessage | string | Error details if the lookup failed |
How it works
- You provide Zillow property URLs, ZPIDs, or street addresses (any combination works).
- The actor merges all inputs into one processing queue and deduplicates where possible.
- Each property gets looked up individually through a real-time API call.
- Successful results are saved to the dataset immediately. Failed lookups get an error record so you know what went wrong.
- The run stops when all properties are processed or when the timeout/max-items limit is hit, whichever comes first.
Proxy rotation is handled internally. Each property lookup uses a fresh proxy URL, which reduces the chance of rate limiting or IP blocks.
FAQ
How much does each property lookup cost? You pay per successful result only. Failed lookups (404s, timeouts, invalid addresses) do not count toward your usage. Check the actor's pricing page on Apify for current rates.
Can I look up off-market or sold properties?
Yes. The actor returns data for any property that has a Zillow listing page, including sold, pending, and off-market properties. The homeStatus field tells you the current state.
What happens if I submit a bad URL or address?
The actor logs an error for that item and moves on to the next one. You will find an error record in the output dataset with the errorMessage field explaining what went wrong.
How fast is it? Each property lookup takes 2 to 5 seconds on average. A batch of 100 properties typically finishes in under 10 minutes.
Can I run this on a schedule? Absolutely. Set up a schedule on Apify to run the actor daily, weekly, or at whatever interval you need. Each run picks up the latest data from Zillow.
Integrations
Connect Affordable Zillow Details Scraper 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.
This Zillow property data scraper works well as part of a larger pipeline: feed addresses from a CRM, run the actor, and push results to Google Sheets or a database for your team to review.