Zillow Scraper API: Property, Search & Zestimate avatar

Zillow Scraper API: Property, Search & Zestimate

Pricing

from $2.40 / 1,000 properties

Go to Apify Store
Zillow Scraper API: Property, Search & Zestimate

Zillow Scraper API: Property, Search & Zestimate

Zillow scraper API: get Zillow property data by URL, zpid, search URL or location, and export search results to JSON, CSV or Excel. Price, Zestimate, rent Zestimate, beds, baths, sqft, lot, year built, price history, photos, MLS and broker. For sale, rent and sold.

Pricing

from $2.40 / 1,000 properties

Rating

0.0

(0)

Developer

Morgan Studio

Morgan Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Zillow Scraper API: Property & Search Data

What is Zillow Scraper API?

Zillow Scraper API is a Zillow scraper you call like an API: it gets Zillow property data from property URLs, zpids, Zillow search URLs or plain locations. For every home you get the price, status (for sale, for rent, recently sold, off market), address and coordinates, beds, baths, living area, lot size, year built, price per square foot, Zestimate and rent Zestimate, HOA fee, last sale price and date, days on Zillow, page views and saves, the listing description, full-size photo URLs, price history where Zillow shows it, the MLS and listing brokerage.

Searches work two ways: paste any Zillow search URL with the filters you set in your browser (price, beds, home type, rentals, sold), or type a location (Phoenix, AZ, a ZIP code) and pick for sale, for rent or recently sold. Search results come back as listing cards; switch on Fetch full property details to get the full property record for each one.

You pay per record delivered: $0.0024 per property ($2.40 per 1,000) and $0.001 per search result ($1 per 1,000), platform usage included. Properties that are not found, blocked requests and invalid inputs are reported in the dataset and free.

The easiest way to try it: paste a Zillow property link into Property URLs or zpids and press Start.

What data can you get from Zillow?

FieldExample
zpid, url49125964, https://www.zillow.com/homedetails/6220-2nd-Ave-NW-Seattle-WA-98107/49125964_zpid/
homeStatusFOR_SALE, FOR_RENT, RECENTLY_SOLD, OFF_MARKET, ...
price, currency1325000, USD
streetAddress, city, state, zipcode6220 2nd Avenue NW, Seattle, WA, 98107
latitude, longitude47.67502, -122.35918
homeTypeSINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, ...
bedrooms, bathrooms5, 4
livingArea, livingAreaUnits3380, sqft
lotAreaValue, lotAreaUnits4399.56, Square Feet
yearBuilt, pricePerSquareFoot1918, 392
zestimate, rentZestimateZillow's value and rent estimates (null when Zillow does not show one)
monthlyHoaFee, propertyTaxRate135, 0.55
lastSoldPrice, dateSold265000, 2012-01-27
daysOnZillow, datePosted, pageViewCount, favoriteCount1, 2026-10-13, 150, 26
priceChange, priceChangeDatethe latest price change and its date, when there is one
descriptionthe listing description
photoCount, photos40, full-size photo URLs (1536 px)
priceHistory[{ "date": "2026-10-07", "price": 1325000 }], when the page shows it
factsfull and half baths, lot size text, property subtype, parking, HOA total, heating, cooling, appliances, flooring, stories (when listed)
openHouseSchedule[{ startTime, endTime }]
mlsId, mlsName, brokerageName, listingAgentName, listingStatusDetail, listingLastUpdatedlisting attribution as shown on Zillow
fetchStatus, errorok, null

Example property record (photos, history and description shortened):

{
"recordType": "property",
"zpid": "49125964",
"url": "https://www.zillow.com/homedetails/6220-2nd-Ave-NW-Seattle-WA-98107/49125964_zpid/",
"homeStatus": "FOR_SALE",
"price": 1325000,
"currency": "USD",
"streetAddress": "6220 2nd Avenue NW",
"city": "Seattle",
"state": "WA",
"zipcode": "98107",
"latitude": 47.67502,
"longitude": -122.35918,
"homeType": "SINGLE_FAMILY",
"bedrooms": 5,
"bathrooms": 4,
"livingArea": 3380,
"livingAreaUnits": "sqft",
"lotAreaValue": 4399.56,
"lotAreaUnits": "Square Feet",
"yearBuilt": 1918,
"pricePerSquareFoot": 392,
"zestimate": null,
"rentZestimate": 6058,
"description": "Perched above a favorite Phinney Ridge block, this beloved Craftsman has been home to the same owners for 46 years...",
"photoCount": 40,
"photos": ["https://photos.zillowstatic.com/fp/c51f5d4b78c5d599d3e1c2b25b7f0621-cc_ft_1536.jpg"],
"priceHistory": [{ "date": "2026-10-07", "price": 1325000 }],
"facts": { "bathroomsFull": 2, "bathroomsHalf": 1, "lotSize": "4,399 sqft", "propertySubType": ["Single Family Residence"] },
"mlsId": "2591886",
"mlsName": "NWMLS as distributed by MLS GRID",
"brokerageName": "Windermere Mercer Island",
"listingStatusDetail": "Active",
"fetchStatus": "ok",
"error": null
}

Example search result (a recently sold home from a Denver search):

{
"recordType": "search-result",
"zpid": "13056017",
"url": "https://www.zillow.com/homedetails/1995-S-Newport-St-Denver-CO-80224/13056017_zpid/",
"homeStatus": "RECENTLY_SOLD",
"price": 730000,
"streetAddress": "1995 S Newport Street",
"city": "Denver",
"state": "CO",
"zipcode": "80224",
"bedrooms": 4,
"bathrooms": 4,
"livingArea": 2726,
"zestimate": 705900,
"rentZestimate": 3961,
"taxAssessedValue": 667100,
"dateSold": "2026-10-14",
"brokerName": "LIV Sotheby's International Realty",
"searchUrl": "https://www.zillow.com/denver-co/sold/",
"position": 1,
"fetchStatus": "ok"
}

Rental searches also return apartment buildings as one card: isBuilding: true, buildingId, buildingName, minRent, maxRent, availableUnits and a units list with price and beds.

How to scrape Zillow property data

  1. Add property URLs or zpids, and/or search URLs, and/or locations.
  2. For locations, pick For sale, For rent or Recently sold.
  3. Set Max results per search (default 100).
  4. Optional: switch on Fetch full property details to turn every search result into a full property record.
  5. Press Start, then download the dataset as JSON, CSV or Excel, or read it through the Apify API.

Input example

{
"propertyUrls": [
"https://www.zillow.com/homedetails/2734-E-Vista-Dr-Phoenix-AZ-85032/8011097_zpid/",
"1772396"
],
"searchUrls": ["https://www.zillow.com/denver-co/sold/"],
"locations": ["Seattle, WA", "37206"],
"listingType": "for_sale",
"maxResultsPerSearch": 100,
"fetchDetails": false
}

Export Zillow search results to CSV or Excel

Paste a Zillow search URL with your filters, or type a city or ZIP code, then download the dataset from the Output tab as CSV, Excel or JSON, or from https://api.apify.com/v2/datasets/<datasetId>/items?format=xlsx. Each listing is one row with price, address, beds, baths, living area, Zestimate and status.

A Zillow API you can use today

Zillow's own data APIs are for approved partners. This actor reads Zillow's public pages and you call it over the Apify API, with results in the same request:

curl -X POST "https://api.apify.com/v2/acts/morgan-studio~zillow-property-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"propertyUrls": ["1772396"]}'

Zillow scraper in Python

With the apify-client package:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("morgan-studio/zillow-property-scraper").call(
run_input={"locations": ["Denver, CO"], "listingType": "sold", "maxResultsPerSearch": 50}
)
for home in client.dataset(run["defaultDatasetId"]).iterate_items():
print(home["streetAddress"], home["price"], home["zestimate"])

How much does it cost to scrape Zillow?

Pay per event, platform usage included:

EventPriceWhen
Property$0.0024one full property record delivered (fetchStatus: ok)
Search result$0.001one listing card from a search
Actor start$0.00005once per run

1,000 full property records cost $2.40. 1,000 search results cost $1. Not-found properties, blocked requests and invalid inputs are written to the dataset with their fetchStatus and cost nothing. A run stops cleanly when it reaches the maximum cost you set for it.

Limits and good to know

  • Data is what Zillow shows on its public pages, logged out. Fields Zillow does not show for a home come back null (for example many active listings have no Zestimate, and sold homes often have no description).
  • priceHistory is filled when Zillow renders it into the page; in our tests about 4 in 10 property pages carried it.
  • Zillow shows at most about 20 pages (about 800 listings) per search. For more, split the search by ZIP code or price band.
  • Zillow uses bot protection. The actor fetches pages directly first and retries through Apify Proxy on fresh sessions when Zillow answers with a bot check. Keep Apify Proxy on.
  • US listings only (Zillow's coverage).
  • No login, no cookies, no browser.

Status values

ok (charged), not-found (the property or search does not exist or has no listing data), blocked (Zillow's bot check on every try), error (network or unexpected HTTP), invalid-input (not a Zillow property URL, zpid or search URL), no-results (a search with no listings). Only ok is charged.

This actor reads public pages that anyone can open without an account, and returns facts about properties. It does not log in or collect private data. Zillow's Terms of Use restrict automated access; check that your use fits them and the laws where you work. Photos belong to their owners; the actor returns links, not copies.

FAQ

Is there a free Zillow API? Not a public one for listing data. This actor is pay per record: $0.0024 per property and $0.001 per search result, and failed items are free.

How do I export Zillow search results to Excel? Run a search URL or a location, then download the dataset as Excel (format=xlsx) or CSV.

Can I use it from Python? Yes, with apify-client as shown above, or with plain HTTP to the Apify API.

Does it get sold homes and rentals? Yes. Set Listing type to sold or for_rent for a location, or paste a Zillow search URL with those filters.

Support

Questions or a broken field: open an issue on the actor's Issues tab and include the run id.

Ready-made examples

Each one opens with its input filled in; copy it to your account and run.

More actors from the same developer

Changelog

  • 2026-10-15: README and listing reworded for search; new sections on API use, scheduling and export; links to the ready-made examples. No change to the scraper or the prices.
  • 0.1: first release. Property URLs and zpids, search URLs, locations (for sale, for rent, sold), optional full details for search results, rental buildings, direct-first fetching with proxy fallback.