Zillow Scraper - Homes For Sale, Rentals & Sold Prices
Pricing
from $2.00 / 1,000 run start fees
Zillow Scraper - Homes For Sale, Rentals & Sold Prices
Zillow scraper for homes for sale, rentals and recently sold properties. Enter a city or paste a Zillow search URL and get one row per listing: address, price, beds, baths, square feet, Zestimate, sold date and coordinates. For investors, agents and housing analysts.
Pricing
from $2.00 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 days ago
Last modified
Categories
Share
Zillow Scraper: Homes For Sale, Rentals and Sold Prices
Zillow Scraper turns any Zillow property search into structured rows you can download as JSON, CSV or Excel. Search homes for sale, rental listings or recently sold properties by city and state, or paste a Zillow search URL with the filters you already selected. Each row keeps the address, published price, rooms, floor area, coordinates and the Zillow estimates shown in the search results.
What Zillow Scraper returns
The actor returns one row per listing, including apartment building cards that
appear in rental searches. Zillow's property identifier, zpid, and the absolute
listing url help you match listings between runs. Positions start at one and
continue across the pages of your search. Duplicate listings are removed before
they are delivered and counted.
Use the results to compare asking prices across an area, find properties matching your criteria, track new listings or combine housing data with your own address records. A search is a snapshot of the listings Zillow returns at that moment. Running the same input later can produce different properties, prices or ordering as the source changes.
Input
Supply location, such as Austin, TX, or a Zillow search url. If both are
present, the URL determines the search. The location is retained as the search
label on each row. No location is required for a URL-only search.
{"location": "Austin, TX","listing_type": "for_sale","limit": 100,"retries": 3}
This input was used for an actual run returning 100 Austin listings. Other verified searches include 50 rentals in Boise, Idaho, 90 recently sold properties in Miami, Florida, and a URL-based search returning 45 homes in Boulder, Colorado.
| Field | Default | Meaning |
|---|---|---|
location | No default | City and state; optional when supplying a URL |
url | No default | Zillow search URL; takes precedence over location |
listing_type | for_sale | for_sale, sold or for_rent |
limit | 100 | Maximum listings to return, from 1 to 800 |
retries | 3 | Maximum attempts per search page, from 1 to 6 |
A URL copied from a filtered Zillow search retains its searchQueryState filters
while additional result pages are collected. The listing type in each returned
row reflects the actual source listing, including when you supply a sold or rental
URL while leaving listing_type at its default.
Output
Rows are written to the default dataset and can be downloaded as JSON, CSV or
Excel. The run summary is available in the summary record of the key-value
store. When a source page cannot be collected, the errors record gives the
available error code and message.
Example Zillow scraper row: a recently sold home
This is the first row of a real run for recently sold properties in Miami, FL:
{"zpid": "43843061","url": "https://www.zillow.com/homedetails/540-SW-39th-Ave-Miami-FL-33134/43843061_zpid/","address": "540 SW 39th Ave, Miami, FL 33134","street": "540 SW 39th Ave","city": "Miami","state": "FL","zipcode": "33134","price": 875000,"price_text": null,"currency": "USD","beds": 3,"baths": 3,"living_area_sqft": 2496,"lot_area": 7700,"lot_area_unit": "sqft","home_type": "SINGLE_FAMILY","status": "SOLD","status_text": "Sold","marketing_status": "RecentChange","days_on_zillow": 2,"sold_price": null,"date_sold": "2026-10-02","tax_assessed_value": 620026,"zestimate": 850600,"rent_zestimate": 5966,"latitude": 25.766907,"longitude": -80.2599,"broker": "MVG Real Estate Services, LLC","is_zillow_owned": false,"has_3d_model": false,"has_video": false,"price_per_sqft": 350.56,"image": "https://photos.zillowstatic.com/fp/552637f7ee5b9c5ea1ffb7919c9f9851-p_e.jpg","listing_type": "sold","search_location": "Miami, FL","position": 1}
And a shorter excerpt from a real Austin search for homes for sale:
{"zpid": "29461976","address": "6107 Felix Ave, Austin, TX 78741","price": 370000,"beds": 3,"baths": 2,"living_area_sqft": 1252,"price_per_sqft": 295.53,"currency": "USD"}
All output fields
Every row preserves the established fields: zpid, url, address, street,
city, state, zipcode, price, price_text, currency, beds, baths,
living_area_sqft, lot_area, lot_area_unit, home_type, status,
status_text, marketing_status, days_on_zillow, sold_price, date_sold,
tax_assessed_value, zestimate, rent_zestimate, latitude, longitude,
broker, is_zillow_owned, has_3d_model, has_video, price_per_sqft, image,
listing_type, search_location and position.
Additional fields include the collection time fetched_at, source, platform
and consistent property names such as listing_id, postal_code, bedrooms,
bathrooms, living_area, living_area_unit and estimated_value. These fields
are added alongside the existing names so existing dataset integrations can
continue using the same columns.
Unavailable values are null. Rental building cards can have no single property
price, bedroom count or floor area. Their published information is instead exposed
through building_name, min_base_rent, max_base_rent and units. The actor
does not turn a building's minimum rent into an individual apartment's price.
For sold listings, price contains the numeric price published by Zillow when
available. sold_price is a separate source field and can remain null even when
price is present. date_sold is the published sale date in YYYY-MM-DD form.
Zestimate and tax-assessed value are separate values, each kept under its own name.
Use cases
- Comparable sales. Pull recently sold homes for a city or ZIP-filtered search and compare sale price, price per square foot and Zestimate side by side.
- Investment screening. Combine asking price with
rent_zestimateto rank properties by gross rental yield before you look at a single listing page. - Rental market research. Track asking rents and building rent ranges in the cities you manage or plan to enter.
- Lead lists for agents and service providers. New listings with
days_on_zillowand broker name show who is active in an area this week. - Price monitoring. Run the same search on a schedule and compare
zpid, price and status between runs to see price cuts, status changes and new inventory.
How to scrape Zillow without code
Choose a city and a listing type, or paste the search URL from your browser after setting price, bed or home-type filters on Zillow. Start the run and download the dataset when it finishes. You can also call the actor through the Apify API or schedule it, so the same Zillow search lands in your spreadsheet, database or workflow tool every day.
Zillow scraper compared with other options
- Browser extensions and Zillow data exporters export the page you are looking at, one search at a time, from your own browser. This actor runs in the cloud, pages through up to 800 listings per search and can be scheduled or called by API.
- The official Zillow API is aimed at approved partners and specific data products; it does not give you an open export of current search results.
- Writing your own scraper means maintaining parsers and pagination as the site changes. Here you pay only for the rows you receive, with stable field names.
Pricing
The existing price is $0.002 per run start and $0.0015 per delivered property. A valid search with no listings still has its run start fee and has zero property events. Returning 100 properties produces one run start event and 100 property events, for $0.152 in actor event charges.
Users without a paid Apify plan receive at most ten property rows per run.
Property events correspond to those delivered rows. Increasing limit does not
increase the free-plan row cap. Paid users can request up to 800 listings.
FAQ
Can I paste a Zillow URL with filters?
Yes. Supply it in url. The URL wins over location, and its search filters are
preserved as more pages are collected. Use a search results URL for the area and
listing criteria you want.
Can I export Zillow data to Excel or CSV?
Yes. Every run stores its rows in a dataset that you can download as Excel, CSV, JSON or XML from the run page, or fetch through the API.
Is it legal to scrape Zillow?
The actor collects listing information that Zillow shows publicly in its search results, without logging in. How you use the data is your responsibility; check the terms that apply to your use case and local law, especially for personal data such as broker names.
Why do some listings have null prices or room counts?
Zillow does not publish every field for every card. Rental building cards often describe a building and several unit types instead of one priced apartment. Their building and unit fields provide the source information without guessing missing property values.
What happens when no properties are found?
The run succeeds with an empty dataset and a message in the summary. Check the city and state or adjust your search criteria. An unrecognized location is kept empty rather than returning properties from an unrelated area.
Does the limit guarantee that many rows?
The limit is a maximum. A smaller result set, repeated listings or a page that cannot be collected can reduce the delivered count. The summary reports the returned properties and available source match count. Page errors preserve already collected rows and identify the interruption.