Zillow Listing Details
Pricing
from $5.10 / 1,000 listing rows
Zillow Listing Details
Zillow home details by URL, ZPID, or street address: price, Zestimate, facts, description, and the listing agent shown on MLS listings. ZIP code search returns one row per home. One flat row per home, Clay ready. No login, no key. Blocked homes are free.
Pricing
from $5.10 / 1,000 listing rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Security
Limited permissionsShare
Give Zillow home URLs, ZPIDs, street addresses, or ZIP codes. You get one flat row per home with price, Zestimate, facts, and status. A home page read adds the description and the listing agent shown on MLS listings. You pay per row, plus a small run start.
Features
- One row per home, with the same keys on every row, ready for Clay or a CSV.
- Four ways in: home URL, ZPID, street address, or 5 digit ZIP code.
- ZIP codes return for sale, for rent, or recently sold homes, at a lower price per row than a home page read.
- A blocked or missing home is a free row.
How the data is read
The actor sends one plain request per page to public zillow.com pages through Apify residential addresses in the US, and reads the JSON the page already carries. It uses no login, no key, no browser, no captcha handling, and no other developer's actor. Zillow refuses the Apify default proxy pool, so every read uses a residential address.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
listings | array | Zillow home URLs, ZPIDs, or street addresses, up to 1,000 per run. An address must include a street number and a city or ZIP code, and it must match the home Zillow returns, or you get a free row. | |
zip_codes | array | 5 digit US ZIP codes. Each returns the homes on Zillow's search pages for that ZIP code, up to Maximum listings. | |
listing_status | string | for_sale | for_sale (default), for_rent, or recently_sold. Used only with ZIP codes. |
read_details | string | false | false (default) or true. With false, a ZIP code returns one search row per home at the search row price. With true, the actor reads each home's page at the listing row price, which adds the description and the listing agent. |
max_listings | string | 100 | The most homes to return in this run, across every input in order, from 1 to 1,000. Default 100. Text or a number. |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. |
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: listing, search_result, run_summary. run_summary is the one free row written when the input is refused. |
input | string | The URL, ZPID, address, or ZIP code you gave. |
zpid | string | Zillow's ID for the home. |
listing_url | string | Link to the home on Zillow. |
street_address | string | Street address of the home. |
city | string | City. |
state | string | State. |
zip_code | string | ZIP code. |
latitude | number | Latitude. |
longitude | number | Longitude. |
home_status | string | Zillow's status, such as FOR_SALE, FOR_RENT, RECENTLY_SOLD, or OTHER for a home not on the market. |
home_type | string | Zillow's home type. |
price | number | The asking price, the monthly rent, or the sold price, as shown. |
currency | string | Price currency. |
zestimate | number | Zillow's estimate of the home value, when shown. |
rent_zestimate | number | Zillow's estimate of the monthly rent, when shown. |
bedrooms | number | Bedrooms. |
bathrooms | number | Bathrooms. |
living_area_sqft | number | Living area in square feet. |
price_per_sqft | number | Price per square foot, when shown. |
lot_area | number | Lot size, in the unit in the next field. |
lot_area_unit | string | sqft or acres. |
year_built | integer | Year built. |
monthly_hoa_fee | number | Monthly HOA fee, when shown. |
days_on_zillow | integer | Days listed on Zillow. |
date_sold | string | Date of the last sale, when shown. |
last_sold_price | number | Price of the last sale, when shown. |
description | string | The listing description. |
photo_count | integer | Number of photos. |
photo_url | string | URL of the first photo. |
price_history_json | string | JSON list of date and price, with event and source where the page shows them. Only some listings carry it. |
mls_id | string | MLS number of the listing. |
mls_name | string | The MLS the listing comes from. |
broker_name | string | Listing broker shown on the page. MLS listings only. |
broker_phone | string | Broker phone shown on the page. MLS listings only. |
agent_name | string | Listing agent shown on the page. MLS listings only. |
agent_phone | string | Listing agent or listing contact phone shown on the page. MLS listings only. |
agent_email | string | Listing agent email, when the page shows one. MLS listings only. |
attempts | integer | Fetch attempts for this home. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"listing-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. Summary rows and a refused input are free. The run start is the apify-actor-start event, charged on every run. Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
listing-row, one home page read | $0.006 | $0.0057 | $0.0054 | $0.0051 |
search-row, one home from a ZIP code search | $0.002 | $0.0019 | $0.0018 | $0.0017 |
apify-actor-start, once per run (one per GB of memory; the default 512 MB is one) | $0.007 | $0.007 | $0.007 | $0.007 |
Per 1,000 rows of listing-row: $6.00 on the free plan, $5.10 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 250 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
A home that is not on the market still has a Zillow page with facts and an estimate. That is a read home and is charged.
Usage examples
Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list: ["<your Zillow URL column>"].
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-zillow-listing-details exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| One value cannot be read, among good ones | One free row with row_status error, and the rest of the run continues |
| Zillow answers with a challenge page | One free row with row_status blocked. The actor waits 10 seconds and does not try to get around the challenge |
| 3 challenge pages in a row | The actor stops reading Zillow for this run, and the remaining homes are free blocked rows |
| Zillow has no page for the home | One free row with row_status no_results |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- US homes on zillow.com only.
- Tax history and schools are not returned, because the home page does not carry them without a further call to Zillow's internal API. Price history is returned only when the page carries it, on some listings, usually as date and price.
- A ZIP code returns only homes in that ZIP code, so Zillow's nearby homes are left out.
- Search rows carry no description, no agent, and no price history. Use
read_detailsfor the description and the agent. - Apartment building results in a ZIP code search have no ZPID and are not read. Rental search returns homes and individual units only, so it can return far fewer rows than the Zillow page count.
- An address must match one home. If Zillow shows a search result instead, you get a free
no_resultsrow. - Agent, broker, and MLS fields are filled only on MLS sourced listings, and only with what the page shows. For sale by owner listings and listings with no MLS source return no contact fields, and home owner contact data is never returned.
- Buyer agent compensation is not returned.
- Zillow's Terms of Use restrict automated queries and republishing listing data. Read them and decide how you use this data.
- About 1 home page read in 11 hit a challenge page in testing (3 of 33). Those are free
blockedrows and the actor does not retry them in the same run, so run them again later. Search reads hit fewer, 1 in the 10 tested. - Fields are filled only when the page carries them. Zestimate was empty on 21 of 25 for sale homes tested, because the page itself had none.
- Zillow can change its pages or refuse more requests at any time. Blocked reads are free, so a bad day costs the run start.
Mamba Labs actor suite
Built by Mamba Labs.