Zillow Detail Scraper: Property Details by URL, ZPID, Address avatar

Zillow Detail Scraper: Property Details by URL, ZPID, Address

Pricing

from $4.25 / 1,000 properties

Go to Apify Store
Zillow Detail Scraper: Property Details by URL, ZPID, Address

Zillow Detail Scraper: Property Details by URL, ZPID, Address

Zillow property details for any US home by link, ZPID or street address: price, Zestimate, rent Zestimate, price and tax history, listing agent name and phone, schools, facts, climate risk and photos. No login or cookies, bulk lookup, sold and off-market homes. Optional comps and Zestimate history.

Pricing

from $4.25 / 1,000 properties

Rating

0.0

(0)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

13 hours ago

Last modified

Share

🏡 Zillow Detail Scraper: Property Details by URL, ZPID, Address

Get Zillow property details for any US home. Paste Zillow links, ZPIDs or plain street addresses and receive one row per home with price, Zestimate, rent Zestimate, price and tax history, listing agent with phone, schools, home facts, climate risk and photo links. No login, no cookies, no Zillow account. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

Price: $5.00 per 1,000 homes on the Free plan, down to $4.25 on Business and above. An address Zillow does not know is skipped and not charged. Comparables, Zestimate history and Walk Score cost nothing extra.

Why this Zillow property details scraper

What users report on other Zillow detail ActorsWhat this Actor does
Tax history not filled intaxHistory[] with year, tax paid and assessed value, plus taxAssessedValue and taxAnnualAmount
Total bathrooms dropped from the outputbathrooms is a top-level field next to bedrooms
Wrong home returned for an addressinput repeats what you typed and address, zpid and url show what Zillow matched, so every row can be checked
No way to limit what a run returns or costsOne row per entry you give; Maximum cost per run stops the run at that amount
Only URLs acceptedLinks, ZPIDs and street addresses in one list

🔎 What is the Zillow Detail Scraper?

It is an Apify Actor that looks up each home you name on Zillow and saves everything Zillow publishes about it. It works for homes that are for sale, for rent, recently sold or off the market, because Zillow keeps a record for almost every US address.

You can mix three kinds of input in one list:

  • a Zillow home link such as https://www.zillow.com/homedetails/5718-Highland-Hills-Dr-Austin-TX-78731/29345631_zpid/
  • a ZPID, the number in that link (29345631)
  • a street address (3750 N Pittsburgh Ave, Chicago, IL 60634)

No browser is started and no third-party unblocker is used. Each home takes one request to Zillow: in our tests 100 homes took 18 seconds and 400 homes took one minute.

What data does it extract?

  • Identity: zpid, url, homeStatus (FOR_SALE, PENDING, RECENTLY_SOLD, FOR_RENT, OTHER), homeType, listingTags
  • Location: address, street, city, state, zip, neighborhood, subdivision, county, countyFips, parcelId, latitude, longitude
  • Value: price, zestimate, rentZestimate, pricePerSqft, lastSoldPrice, lastSoldDate, monthlyHoaFee, taxAssessedValue, taxAnnualAmount
  • Size: bedrooms, bathrooms, livingArea, lotSize (both in square feet), yearBuilt, stories
  • Listing agent: agentName, agentPhone, agentEmail, agentLicense, coAgentName, coAgentPhone, brokerName, brokerPhone, mlsId, mlsName, and for sold homes buyerAgentName and buyerBrokerName
  • History: priceHistory[] (date, event, price, price per sqft, change, source) and taxHistory[] (year, tax paid, assessed value)
  • Schools: schools[] with name, rating, grades, level, type, distance, district and enrollment
  • Facts: facts, Zillow's "Facts & features" block: heating, cooling, appliances, flooring, parking, roof, lot features, rooms, utilities, listing terms and more
  • Risk: climateRisk with flood, fire, wind, heat and air scores from 1 to 10, plus the FEMA flood zone
  • Demand: daysOnZillow, pageViews, favorites
  • Media and extras: photos[], photoCount, virtualTourUrl, floorPlanUrl, description, highlights, openHouses[], nearbyHomes[]
  • Optional, at no extra charge: comparables[] (the homes Zillow compared this one with for its Zestimate, with distance in miles), zestimateHistory[] (the Zestimate for each month of the last ten years) and walkScore, transitScore, bikeScore with their descriptions

input repeats the value you entered, so you can join the result back to your own list.

⬇️ Input

FieldTypeWhat it does
homesarrayZillow home links, ZPIDs or street addresses. One per line, in any mix
maxComparablesinteger0 to 10. Adds that many of Zillow's Zestimate comparables, nearest first. Default 0 (off)
includeZestimateHistorybooleanAdds the monthly Zestimate of the last ten years. Default off
includeLocationScoresbooleanAdds Walk Score, Transit Score and Bike Score. Default off

Example input

{
"homes": [
"https://www.zillow.com/homedetails/5718-Highland-Hills-Dr-Austin-TX-78731/29345631_zpid/",
"3595611",
"8901 Tronewood Dr, Austin, TX"
],
"maxComparables": 5,
"includeZestimateHistory": true,
"includeLocationScores": true
}

Each option is one extra small request per home and leaves every other field as it was. In a cloud run, three homes with all three options took 5 seconds.

Write addresses the way you would type them into Zillow's search box, with city and state. A ZIP code helps when a street name exists in several towns.

⬆️ Output

One row per home. This is a real row with the long lists shortened:

{
"input": "https://www.zillow.com/homedetails/5718-Highland-Hills-Dr-Austin-TX-78731/29345631_zpid/",
"zpid": "29345631",
"url": "https://www.zillow.com/homedetails/5718-Highland-Hills-Dr-Austin-TX-78731/29345631_zpid/",
"homeStatus": "FOR_SALE",
"homeType": "SINGLE_FAMILY",
"listingTags": ["agent listing", "open house"],
"address": "5718 Highland Hills Dr, Austin, TX 78731",
"neighborhood": "Northwest Hills",
"county": "Travis County",
"countyFips": "48453",
"parcelId": "128020",
"latitude": 30.339848,
"longitude": -97.758835,
"price": 1185000,
"pricePerSqft": 499,
"lastSoldDate": "2013-04-13",
"taxAssessedValue": 939974,
"taxAnnualAmount": 22189,
"bedrooms": 4,
"bathrooms": 3,
"livingArea": 2376,
"lotSize": 9931,
"yearBuilt": 1958,
"daysOnZillow": 1,
"pageViews": 703,
"favorites": 51,
"agentName": "Atoosa Ponsford",
"agentPhone": "(512) 480-0848",
"brokerName": "Moreland Properties",
"mlsId": "2986990",
"mlsName": "Unlock MLS",
"highlights": ["Large lot", "Private greenbelt setting", "New european hardwood flooring"],
"priceHistory": [
{"date": "2026-09-30", "event": "Listed for sale", "price": 1185000, "pricePerSqft": 499, "changeRate": 0.1296, "source": "Unlock MLS"},
{"date": "2024-11-23", "event": "Listing removed", "price": 1049000, "pricePerSqft": 441, "changeRate": 0, "source": "Unlock MLS"}
],
"taxHistory": [{"year": 2025, "taxPaid": 19236.43, "assessedValue": 939974}],
"schools": [
{"name": "Highland Park Elementary School", "rating": 10, "grades": "PK-5", "level": "Primary", "type": "Public", "distance": 0.6, "district": "Austin Independent School District", "enrollment": 648}
],
"facts": {
"heating": ["Central", "Natural Gas"],
"cooling": ["Central Air", "Electric"],
"flooring": ["Tile", "Wood"],
"parkingFeatures": ["Driveway"],
"roofType": "Composition, Shingle",
"listingTerms": "Cash,Conventional,FHA,VA Loan",
"onMarketDate": "2026-09-30"
},
"climateRisk": {"flood": {"score": 1, "label": "MINIMAL"}, "femaZone": "X_UNSHADED", "wind": {"score": 8, "label": "SEVERE"}, "heat": {"score": 8, "label": "SEVERE"}},
"openHouses": [{"start": "2026-10-03 11:00:00", "end": "2026-10-03 13:00:00"}],
"nearbyHomes": [{"zpid": "29345689", "address": "5716 Highland Hills Dr", "price": 915800, "bedrooms": 3, "bathrooms": 2, "livingArea": 2033, "homeStatus": "OTHER"}],
"photos": ["https://photos.zillowstatic.com/fp/12c1fde4a1a03e5f9dd1cf0d2179da3d-uncropped_scaled_within_1536_1152.jpg"],
"photoCount": 40,
"virtualTourUrl": "https://www.zillow.com/view-3d-home/bcd68007-0e50-475d-9320-045a2de5f712",
"detailsLevel": "full",
"scrapedAt": "2026-10-02T16:00:00+00:00"
}

With the three options switched on, the same row also carries:

{
"walkScore": 59, "walkScoreDescription": "Somewhat Walkable",
"transitScore": 37, "transitScoreDescription": "Some Transit",
"zestimateHistory": [{"date": "2016-10-31", "zestimate": 645386}, {"date": "2026-10-24", "zestimate": 1142300}],
"comparables": [{"zpid": "29345667", "address": "5706 Highland Hills Cir, Austin, TX 78731", "homeStatus": "OTHER", "homeType": "SINGLE_FAMILY",
"price": 1137400, "bedrooms": 3, "livingArea": 2491, "distanceMiles": 0.07, "url": "https://www.zillow.com/homedetails/..."}]
}

This home had 28 price events, 22 tax years and 40 photos in the full row. A sold home adds values such as "lastSoldPrice": 305000, "zestimate": 308700 and "rentZestimate": 2495.

💰 How much does it cost?

You pay per home found, plus a tiny start fee per run. Inputs that Zillow does not know are not charged.

Apify planPrice per 1,000 homes
Free$5.00
Starter$4.75
Scale$4.50
Business and above$4.25

A list of 200 homes costs $1.00 on the Free plan. Set Maximum cost per run in the run options and the Actor stops at that amount. History, agent contact, schools and photos are all included in the price.

🤖 For AI agents

One input, nothing else required:

{"homes": ["3750 N Pittsburgh Ave, Chicago, IL 60634", "29345631"]}

homes is an array of Zillow home links, ZPIDs or US street addresses. No credential is needed. Each found home is one row; entries Zillow does not know produce no row and no charge.

⚠️ Limits

  • US homes on Zillow only. Apartment buildings (/apartments/ or /b/ links) are not single homes; use the Zillow Rentals Scraper.
  • This Actor looks up homes you name. To find homes by city or ZIP code, use the Zillow Search Scraper first.
  • Sale prices are empty in states that do not disclose them (Texas among them).
  • Agent fields are filled only while a listing exists or shortly after a sale.

💡 Use cases

  • 📊 Valuation and comps: pull price history, tax history, ten years of Zestimates and Zillow's comparable homes for a list of addresses before an appraisal or an offer.
  • 📞 Agent and broker leads: collect the listing agent, phone, brokerage and MLS number for every active listing in your farm area.
  • 🏦 Portfolio monitoring: run the same ZPID list every week and track price, zestimate and homeStatus over time.
  • 🧾 Data enrichment: turn a CRM export of street addresses into parcel IDs, lot sizes, year built and school ratings.

❓ FAQ

What can I use as input? Zillow home links, ZPIDs and street addresses, mixed freely. Links to apartment buildings (/apartments/ or /b/) are not single homes; use the Zillow Rentals Scraper for those.

Does it work for homes that are not for sale? Yes. Off-market and sold homes return their record too, usually with a Zestimate and a rent Zestimate. Agent fields are filled only while a listing exists or shortly after a sale.

What does price mean for each status? For an active listing it is the asking price, for a sold home the sale price, and for an off-market home Zillow reports its own estimate in that field. Check homeStatus before comparing prices.

Why is lastSoldPrice empty when lastSoldDate is filled? Some states, Texas among them, do not disclose sale prices. Zillow then shows the sale date without an amount.

How do I get the homes to look up? Use the Zillow Search Scraper for a city or ZIP code and pass its zpid or url column to this Actor, or paste your own address list.

What happens when an address is not found? The Actor logs a warning, skips the entry and continues. You are not charged for it.

Where do the comparables come from, and why is a sold comparable's price sometimes empty? They are the homes Zillow itself used for the Zestimate, usually five. For a recent sale price is the sale price, except in states that do not disclose sale prices (Texas among them), where it is empty; for an off-market home it is Zillow's estimate. Check homeStatus before comparing.

Can I look up many homes in one call? Yes. homes takes any number of links, ZPIDs and addresses; five are read at a time.

What is detailsLevel? full means the complete record. If Zillow changes its site and the complete record is temporarily unavailable, the Actor falls back to the smaller record on the home page and marks the row basic (no history or schools) instead of failing.

How fresh is the data? Every run reads Zillow live. Nothing is cached between runs.

Is it legal to scrape Zillow property data? The Actor collects information Zillow shows publicly to any visitor and does not log in or bypass a paywall. You are responsible for how you use the data. Agent names and phone numbers are business contact details, but privacy and marketing rules such as GDPR, CCPA, CAN-SPAM and the TCPA still apply to outreach, and Zillow's terms of use apply to you as well. If in doubt, ask a lawyer.

Something is missing or broken? Open an issue on the Actor's Issues tab with the run ID. Issues are answered within one business day.

🧩 Need this as a managed feed?

If you would rather receive a weekly file for your markets than run the Actor yourself, request a quote at https://benthepythondev00.github.io/custom.html.

🔗 You might also like

Keywords: zillow detail scraper, zillow property details scraper, zillow details scraper, zillow property data, zillow scraper by address, zillow lookup, zillow api, zillow property details, zillow api alternative, zillow zpid lookup, zillow address lookup, zestimate api, zestimate history, zillow comps, walk score api, zillow price history, zillow tax history, property data api, real estate data enrichment, listing agent phone numbers, real estate agent leads, home value data, parcel data, school ratings data, flood risk data, zillow csv export, zillow property scraper