Zillow Property Details Scraper API: ZPID, URL & Address avatar

Zillow Property Details Scraper API: ZPID, URL & Address

Pricing

from $1.70 / 1,000 properties

Go to Apify Store
Zillow Property Details Scraper API: ZPID, URL & Address

Zillow Property Details Scraper API: ZPID, URL & Address

Zillow detail scraper and Zillow property details API: Zestimate and range, rent Zestimate, tax value, price, last sale, facts, agent, broker and photos for any Zillow link, zpid or street address, in bulk. Zillow lookup by address or Zillow URL; no login; Zillow MCP. $2 per 1,000 homes.

Pricing

from $1.70 / 1,000 properties

Rating

0.0

(0)

Developer

Saulius AutomatesIT

Saulius AutomatesIT

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

3 days ago

Last modified

Share

Zillow property details API and scraper: give it Zillow home links, zpids or plain street addresses and get one full row per home with Zestimate and its low and high range, rent Zestimate, tax assessed value and tax rate, list or sold price, last sold price, beds, baths, living area, lot, year built, home type, days on Zillow, page views and saves, description, facts, listing agent and phone, broker, MLS id, coordinates and photos.

No Zillow account, no cookies, no browser. $2 per 1,000 homes, misses free.

What you can use it for

  • Bulk valuations: a spreadsheet of addresses in, Zestimate, range, rent Zestimate and tax value out.
  • Enrich a search: point it at the dataset of any Zillow search run (zpid or url columns) and get the full details for every home.
  • Rental yield and flip analysis: Zestimate next to rent Zestimate, last sale and tax value for each property.
  • CRM and lead enrichment: listing agent, phone, broker and MLS id for homes on the market.
  • AI agents: call it as an MCP tool to look up any US home by address.

How to use it

  1. Paste Zillow home links, street addresses or zpids (any mix), or the dataset ID of an earlier search run.
  2. Run it and download JSON, CSV or Excel, or read the rows through the API.

Inputs written for other Zillow detail scrapers work as they are: startUrls (links as {"url": ...} objects) and addresses are the same field names, and property, Urls, propertyUrls, multiple_input_box and input (objects with url, zpid or address) are read too.

Input example

{
"startUrls": [{ "url": "https://www.zillow.com/homedetails/2114-Bigelow-Ave-N-Seattle-WA-98109/48749425_zpid/" }],
"addresses": ["18 Zelma Dr, Greenville, SC 29617"],
"zpids": ["29490744"],
"maxPhotos": 10
}

Output

Property row

{
"type": "property",
"zpid": "48749425",
"url": "https://www.zillow.com/homedetails/2114-Bigelow-Ave-N-Seattle-WA-98109/48749425_zpid/",
"status": "OTHER",
"price": 2155400,
"zestimate": 2155400, "zestimateLow": 1939860, "zestimateHigh": 2370940,
"rentZestimate": 6769,
"streetAddress": "2114 Bigelow Ave N", "city": "Seattle", "state": "WA", "zipcode": "98109",
"county": "King County",
"bedrooms": 4, "bathrooms": 3, "livingArea": 3470, "lotSize": 4680, "yearBuilt": 1924,
"homeType": "SINGLE_FAMILY",
"taxAssessedValue": 2044000, "propertyTaxRate": 0.82, "lastSoldPrice": 995000,
"daysOnZillow": 6522, "pageViews": null, "favorites": null,
"description": null,
"agentName": null, "brokerName": null, "mlsId": null,
"neighborhood": "Queen Anne", "pricePerSquareFoot": 621,
"facts": { "homeType": "SingleFamily", "lotSize": "4,680 sqft", "yearBuilt": 1924, "parkingFeatures": ["Off-street", "Garage"] },
"photos": ["https://photos.zillowstatic.com/fp/..."],
"source": "address", "input": "2114 Bigelow Ave N, Seattle, WA 98109",
"matchedAddress": "2114 Bigelow Ave N Seattle, WA 98109", "addressMatch": "exact"
}

For-sale homes add the listing description, agent name and phone, broker, MLS name and id, page views and saves, HOA fee and price per square foot. priceHistory and taxHistory are filled when Zillow puts them in the page (some showcase listings); otherwise they are null.

Good to know

  • Addresses are matched with Zillow's own search box; the row carries the address Zillow matched (matchedAddress) and addressMatch: exact when the house number and unit are the same as yours, approximate when Zillow only knew a nearby home or another unit. Addresses copied from Google Maps, a CRM or county records work as they are: a trailing ", USA" or ", United States" and ZIP+4 codes (98109-1234) are cleaned before the lookup, and unit numbers can be written #3L, Apt 3L or Unit 3L. An address Zillow does not know comes back as a free NOT_FOUND row.
  • Search links pasted in Zillow home links are expanded: each home found (up to Max homes per search link) gets its full row.
  • Apartment building links (/apartments/austin-tx/the-goodwin-apartments/CkQ7wm/, /b/...) give one row per unit (type: "unit"): unit number, rent, fees, beds, baths, square feet, availability date, lease terms and pet policy, plus the building's name, link, amenities and offers. Each unit is charged as one home; maxUnitsPerBuilding caps very large buildings.
  • Flat rows for CSV: add "flattenOutput": true to the JSON input and nested fields become dot paths (facts.Heating, priceHistory.0.price, schools.0.rating, photos.0), so a CSV or Google Sheets export has one column per value.
  • Climate risk (climateRisk): flood, fire, wind, heat and air quality scores (1 to 10) with the FEMA flood zone, flood and fire insurance advice, 30 year probabilities, hot days and bad air days, from the First Street data on the Zillow page. It comes with the history request at no extra charge, and is null where Zillow shows none.
  • Zestimate history: add "includeZestimateHistory": true to the JSON input and each row gets zestimateHistory, the home's monthly Zestimate for the last ten years ([{ "date": "2016-10-31", "value": 1727349 }, ...], about 121 points), the same series as the chart on the Zillow page. No extra charge; homes Zillow has no chart for get [].
  • Walk Score: add "includeWalkScore": true and each row gets walkScore, transitScore and bikeScore (0 to 100) with Walk Score's words (Very Walkable, Car-Dependent). No extra charge.
  • Zestimates are Zillow's estimates; some homes have none and the field is then null.
  • The run summary (OUTPUT in the key-value store) counts rows delivered, misses and failures.

Pricing

ItemPrice
Property (full details)$0.002 ($2 per 1,000)
Run start$0.00005

Bronze, Silver and Gold Apify plans pay 5%, 10% and 15% less. Inputs that give nothing (unknown address, deleted home, building with no units, unsupported page) come back as free error rows. If Zillow refuses a home page from a search link, that home is saved from the search card and charged as a listing ($1.50 per 1,000).

Use it from code or an AI agent

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("sauliusautomatesit/zillow-property-details-api").call(run_input={
"addresses": ["2114 Bigelow Ave N, Seattle, WA 98109", "18 Zelma Dr, Greenville, SC 29617"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("zestimate"), item.get("rentZestimate"), item.get("streetAddress"))

As an MCP tool for Claude, Cursor or any MCP client: https://mcp.apify.com/?tools=sauliusautomatesit/zillow-property-details-api.

Notes

The Actor reads only public data that Zillow shows to any logged-out visitor, and it does not collect agents' e-mail addresses. Use the data in line with Zillow's terms and the privacy and fair housing laws that apply to you.