Zillow Property Scraper | Details by URL or ZPID with Zestimate avatar

Zillow Property Scraper | Details by URL or ZPID with Zestimate

Pricing

from $1.00 / 1,000 zillow properties

Go to Apify Store
Zillow Property Scraper | Details by URL or ZPID with Zestimate

Zillow Property Scraper | Details by URL or ZPID with Zestimate

Zillow property details from URLs or ZPIDs: price, Zestimate, rent Zestimate, beds, baths, area, lot, year built, HOA, heating, cooling, parking, brokerage, MLS id, photos, description. Price history on for-sale homes, tax assessment on sold and off-market homes. Pairs with Zillow Search Scraper.

Pricing

from $1.00 / 1,000 zillow properties

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

0

Monthly active users

a day ago

Last modified

Share

34 fields from one Zillow listing

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.

Give it Zillow property links or ZPIDs and get one clean row per home: price, Zestimate and rent Zestimate, beds and baths, living area, lot size in square feet and acres, year built, status, days on Zillow, HOA fee, heating, cooling, parking, brokerage, MLS ID, photos, description and coordinates. Homes on the market also carry their price history rows; sold and off-market homes carry the tax assessed value and tax rate. It reads the public property page over plain HTTP: no Zillow account, no API key, no browser.

What it does not return, because Zillow does not put it in the page: tax history, school ratings and the listing agent's name, phone or email. Those keys stay in the output for compatibility and are explained under "Fields Zillow does not send" below.

Why choose this actor?

  • Up to 34 filled fields per home, straight from Zillow's own data. In our 2 October test, a for-sale house in Austin came back with its brokerage, a $185 monthly HOA, central heating and air, 2 garage spaces, 7 price history rows and 10 photos. Sold and off-market homes came back with 24 to 27 fields, including the tax assessed value.
  • Pay only for homes delivered, from $1.00 per 1,000. Each link gets two tries on a fresh residential IP; a link that still fails returns a labelled error row and costs nothing.
  • Plugs into our Zillow search actors. The detailUrl or zpid from Zillow Search Scraper, Zillow Recently Sold or Zillow Rental Listings goes straight into urls, with no login and no proxy to set up.

Run it on Apify

Part of The Mine Works Real estate family: Zillow Rentals Scraper, Zillow Sold Comps Scraper, Housing.com Scraper, India Real Estate MCP, 99acres Scraper, MagicBricks Scraper.

Try it in one minute

{
"urls": [
"https://www.zillow.com/homedetails/7200-Cordelia-Ct-Austin-TX-78741/124839253_zpid/",
"89361344",
"83826021"
]
}

You get three rows: a house for sale in Austin, an off-market house in Bixby, Oklahoma, and a sold condo in Austin, in roughly 10 to 20 seconds (our platform run on 1 September returned 2 homes in 8.8 seconds).

urls takes Zillow property page links (https://www.zillow.com/homedetails/.../<zpid>_zpid/), the path part of such a link, or bare numeric ZPIDs, in any mix. maxItems processes only the first N entries of the list. Apartment building pages (zillow.com/apartments/..., which list many units) are a different kind of page and were not part of our tests.

Apify's free plan includes $5 of credit every month, which covers about 2,600 properties at this actor's Free plan price ($0.00175 a property plus the $0.005 start fee, in runs of 40 properties).

Copy to your AI assistant

themineworks/zillow-property-details on Apify. Returns one row of Zillow property details per Zillow homedetails URL or ZPID: price, Zestimate, rent Zestimate, beds, baths, sqft, lot (sqft and acres), year built, status, days on Zillow, HOA (monthly), heating, cooling, parking, brokerage, MLS id, photos, description, lat/long; price history rows (date, price) on for-sale homes; taxAssessedValue and propertyTaxRate on sold and off-market homes. taxHistory is always empty and there is no agent name, phone or email. Call ApifyClient("TOKEN").actor("themineworks/zillow-property-details").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: urls (string[] of homedetails URLs or numeric ZPIDs). Optional: maxItems (integer, process only the first N), includePriceHistory (default true), includeTaxHistory (default true), includeSchools (default true). Rows with _type "error" (not charged), "summary" and "info" (never billed) are not properties. Full spec: GET https://api.apify.com/v2/acts/themineworks~zillow-property-details/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • 45 output fields, up to 34 filled per home. A field Zillow does not give for a home is left out of that row, while the lists (photos, and priceHistory, taxHistory and schools unless you switch them off) are always present, empty when there is nothing to list.
  • Facts read from three places on the page. The property record, the "at a glance" facts box (heating, cooling, HOA, parking, days on Zillow) and the listing facts (heating system, assigned schools, MLS listing ID), so a home that is no longer for sale still returns what Zillow knows about it.
  • HOA as a monthly number. hoaFee is in dollars per month; an HOA Zillow states per year or per quarter is converted.
  • Lot size in square feet and acres. lotSizeAcres is converted from square feet when Zillow measures the lot in square feet.
  • Two tries per home on residential US IPs. Each try uses a fresh IP, with a short pause between homes. The proxy cost is included in the price.
  • Stops cleanly. After 3 homes in a row deliver nothing, or 15 seconds before the run's timeout, the actor stops and writes a summary row saying why.

How to use it

{
"urls": ["124839253"]
}

A bare ZPID works; Zillow redirects it to the full property page.

Several homes at once, without the history lists

{
"urls": [
"https://www.zillow.com/homedetails/7200-Cordelia-Ct-Austin-TX-78741/124839253_zpid/",
"https://www.zillow.com/homedetails/901-W-9th-St-APT-217-Austin-TX-78703/83826021_zpid/",
"/homedetails/14611-S-Toledo-Pl-Bixby-OK-74008/89361344_zpid/"
],
"includePriceHistory": false,
"includeTaxHistory": false,
"includeSchools": false
}

The three switches drop the priceHistory, taxHistory and schools lists from every row, which keeps a spreadsheet export narrow. They do not change the price.

Enrich search results with full details

Run Zillow Search Scraper for a city or ZIP code, take the detailUrl (or zpid) column, and pass it as urls here. With the Apify API you can chain the two runs: when the search run succeeds, read its dataset and start this actor with the links. Use maxItems to cap how many you enrich, for example the first 40.

HOA and tax screen for sold comparables

Feed the zpid values from Zillow Recently Sold and keep hoaFee, taxAssessedValue, propertyTaxRate, sqft and yearBuilt. In our tests the sold condo returned its HOA fee and its assigned schools. Zillow hid the sale price on all 3 sold homes we tested (the page shows 0, so the row has no price), so take the sale price from the recently sold actor's own row.

Weekly watch of a shortlist

Save the links of the homes you follow as a task and schedule it weekly (for example 0 8 * * 1). Compare price, homeStatus, daysOnZillow and zestimate with last week's run to catch price cuts, pending sales and value changes. Each run fetches and charges every home in the list again, so keep the list to the homes you still care about.

Input parameters

ParameterTypeDefaultWhat it does
urlsarray of stringsnone, required (form prefill: an example link and the ZPID 89361344)Zillow property page links, their path part, or numeric ZPIDs. One row per entry.
maxItemsinteger (1 or more)none: every entryProcess only the first N entries of urls.
includePriceHistorybooleantrueKeep the priceHistory list. Zillow puts it on for-sale pages only, as rows of date and price.
includeTaxHistorybooleantrueKeep the taxHistory list. It is always empty today (see below); taxAssessedValue and propertyTaxRate come back either way.
includeSchoolsbooleantrueKeep the schools list: assigned schools by name and level when the listing facts name them, without ratings.

There is no proxy setting: the actor always uses Apify's residential US proxy, and its cost is included in the price.

Run options. The defaults are 512 MB of memory and a 300 second timeout. A home takes roughly 4 to 8 seconds including the pause between homes, so the default timeout fits about 40 homes. For longer lists, raise the timeout under Run options; if a run reaches its timeout, it stops 15 seconds early and its summary row says ended_on_deadline: true. More memory does not make it faster, and the start fee grows with memory (see Pricing).

What data do you get?

One row per home. Fields Zillow does not give for that home are left out of the row, except the lists, which are always present.

Identity and place: zpid, address (street, city, state and ZIP in one string), city, state, zipCode, country, latitude, longitude, detailUrl.

Price and value: price and priceLabel (asking price; Zillow shows 0 for many sold homes, and then both are left out), zestimate, rentZestimate, hoaFee (dollars per month), taxAssessedValue and propertyTaxRate (sold and off-market homes), priceHistory (for-sale homes: rows with date and price; event, pricePerSqft and source are always null because Zillow's page does not label the rows).

The home: beds, baths, fullBaths, halfBaths, sqft (living area), lotSizeSqft, lotSizeAcres, yearBuilt, propertyType (such as SINGLE_FAMILY or CONDO), homeStatus (such as FOR_SALE, RECENTLY_SOLD, OTHER for off market), daysOnZillow, parkingType, parkingSpaces, heating, cooling, stories, appliances, description.

The listing: mlsId, brokerName (the listing brokerage), imgSrc (main image), photos (up to 10 image links), schools (assigned schools as name and type, when the listing facts name them).

priceHistory rows mix every kind of event Zillow records for the home without saying which is which: on our test listing, the 7 rows held the current asking price ($450,000), a 2018 row with no price on the date of the last sale, earlier asking prices, and two 2018 rows at $2,795 that look like a monthly rent. Treat them as dated prices, not as labelled events.

For a home with no listing photos (common for off-market homes), Zillow's own image is a Google satellite or Street View picture, and imgSrc and photos carry that link.

The dataset can also hold rows that are not homes, marked by _type: "error" for a link that failed (with input and error, never charged), "summary" (counts for the run, never billed) and "info" (a short note, never billed). Filter on _type being absent to keep only homes.

Fields Zillow does not send

These keys exist so that older integrations keep working, but Zillow does not put the data in the property page this actor reads. It loads them in the browser after the page arrives; on 2 October none of the 5 property records we checked had them, and a search of a whole page found nothing.

FieldWhat you get
taxHistoryAlways an empty list. Use taxAssessedValue and propertyTaxRate instead (sold and off-market homes).
schools ratings, grades, distanceNever. schools holds only assigned school names and levels, when the listing facts name them.
agentName, agentPhone, agentEmailNever filled. brokerName names the listing brokerage for homes on the market.
listedDateFilled only when the page gives a posting or sale date; none of our test pages did. Use daysOnZillow.
stories, appliancesNot seen on any page in our tests.

Stable fields for automations

These 15 fields were present in all 8 home rows we sampled on 2 October (5 real page records run through the current code, and 3 rows from a live local run of it), across for-sale, sold and off-market homes.

FieldWhat it holds
zpidZillow property ID, as a string
addressStreet, city, state and ZIP in one string
cityCity
stateTwo-letter state
zipCodeZIP code
bathsBathrooms, number
sqftLiving area in square feet
lotSizeSqftLot size in square feet
yearBuiltYear built
propertyTypeSuch as SINGLE_FAMILY or CONDO
homeStatusSuch as FOR_SALE, RECENTLY_SOLD or OTHER
daysOnZillowDays on Zillow, number
latitudeLatitude
longitudeLongitude
detailUrlFull Zillow property page link

We will not rename these fields. New fields may be added over time; existing ones keep their names.

Output examples

Real rows from our local run of the current code on 2 October 2026, trimmed (long lists and the description shortened).

A house for sale:

{
"zpid": "124839253",
"address": "7200 Cordelia Ct, Austin, TX, 78741",
"city": "Austin",
"state": "TX",
"zipCode": "78741",
"country": "USA",
"price": 450000,
"priceLabel": "$450,000",
"beds": 3,
"baths": 3,
"fullBaths": 2,
"halfBaths": 1,
"sqft": 2035,
"lotSizeSqft": 6738,
"lotSizeAcres": 0.1547,
"yearBuilt": 2014,
"propertyType": "SINGLE_FAMILY",
"homeStatus": "FOR_SALE",
"daysOnZillow": 6,
"zestimate": 441400,
"rentZestimate": 2939,
"hoaFee": 185,
"parkingSpaces": 2,
"heating": "Central",
"cooling": "Ceiling Fan(s), Central Air",
"description": "Tucked within a gated community in Montopolis, 7200 Cordelia Ct offers a rare combination ...",
"latitude": 30.219614,
"longitude": -97.6982,
"detailUrl": "https://www.zillow.com/homedetails/7200-Cordelia-Ct-Austin-TX-78741/124839253_zpid/",
"imgSrc": "https://photos.zillowstatic.com/fp/94557125f4b99f3e35a224eccbd9c4da-cc_ft_1536.jpg",
"photos": ["https://photos.zillowstatic.com/fp/94557125f4b99f3e35a224eccbd9c4da-cc_ft_1536.jpg"],
"priceHistory": [
{ "date": "2026-09-25", "price": 450000, "event": null, "pricePerSqft": null, "source": null },
{ "date": "2018-08-11", "price": null, "event": null, "pricePerSqft": null, "source": null },
{ "date": "2018-07-16", "price": 385000, "event": null, "pricePerSqft": null, "source": null }
],
"taxHistory": [],
"schools": [],
"mlsId": "4360232",
"brokerName": "Christies Intl Real Estate Lone Star"
}

That row had 10 photos and 7 price history rows before trimming.

A sold condo, with HOA, heating and assigned schools from the listing facts (Zillow hid the sale price):

{
"zpid": "83826021",
"address": "901 W 9th St APT 217, Austin, TX, 78703",
"city": "Austin",
"state": "TX",
"zipCode": "78703",
"country": "USA",
"beds": 1,
"baths": 1,
"sqft": 530,
"lotSizeSqft": 135,
"lotSizeAcres": 0.0031,
"yearBuilt": 2001,
"propertyType": "CONDO",
"homeStatus": "RECENTLY_SOLD",
"daysOnZillow": 11,
"hoaFee": 790,
"taxAssessedValue": 370722,
"propertyTaxRate": 1.46,
"parkingType": [],
"parkingSpaces": 1,
"heating": "Forced Air, Gas",
"latitude": 30.273655,
"longitude": -97.75223,
"detailUrl": "https://www.zillow.com/homedetails/901-W-9th-St-APT-217-Austin-TX-78703/83826021_zpid/",
"photos": ["https://photos.zillowstatic.com/fp/f8aec80a78c57a6b2314e6836f418aff-uncropped_scaled_within_1536_1152.jpg"],
"priceHistory": [],
"taxHistory": [],
"schools": [
{ "name": "Mathews", "type": "Elementary School" },
{ "name": "O Henry", "type": "Middle School" },
{ "name": "Austin", "type": "High School" }
],
"mlsId": "2079234"
}

An off-market house, with the tax assessment and a satellite image in place of listing photos:

{
"zpid": "89361344",
"address": "14611 S Toledo Pl, Bixby, OK, 74008",
"city": "Bixby",
"state": "OK",
"zipCode": "74008",
"country": "USA",
"price": 310300,
"priceLabel": "$310,300",
"beds": 2,
"baths": 2,
"sqft": 2059,
"lotSizeSqft": 7361,
"lotSizeAcres": 0.169,
"yearBuilt": 2011,
"propertyType": "SINGLE_FAMILY",
"homeStatus": "OTHER",
"daysOnZillow": 5385,
"zestimate": 310300,
"rentZestimate": 2162,
"taxAssessedValue": 203162,
"propertyTaxRate": 1.01,
"latitude": 35.950245,
"longitude": -95.924706,
"detailUrl": "https://www.zillow.com/homedetails/14611-S-Toledo-Pl-Bixby-OK-74008/89361344_zpid/",
"imgSrc": "https://maps.googleapis.com/maps/api/staticmap?mobile=false&sensor=true&maptype=satellite&size=1536x1152&zoom=17&center=35.95024490356445,-95.9247055053711&...",
"priceHistory": [],
"taxHistory": [],
"schools": []
}

For an off-market home, price is the value Zillow displays on the page, which here equals the Zestimate.

A link that failed both tries (never charged), and the run's summary row (never billed; cost counters trimmed). That local run's test copy used datacenter IPs, which Zillow refuses more often than the residential IPs the actor uses:

{ "_type": "error", "input": "29350008", "error": "Property page HTTP 403" }
{
"_type": "summary",
"total_requested": 5,
"total_scraped": 3,
"total_failed": 2,
"charged_for": 3,
"charge_failures": 0,
"yield_guard_tripped": false,
"requests": 10,
"scraped_at": "2026-10-02T08:49:55.668Z"
}

Pricing

Pay per event: you pay for each home delivered to your dataset, plus a small start fee per run.

EventFreeBronzeSilverGold and above
property-scraped, per home$0.00175$0.0014$0.00125$0.001
property-scraped, per 1,000 homes$1.75$1.40$1.25$1.00
apify-actor-start, per run$0.005 per GB of run memory, minimum one eventsamesamesame

The start fee, exactly. Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 512 MB by default, so a default run pays one event: $0.005, including a run where every link fails.

Worked examples. 40 homes on the Free plan cost $0.07 plus $0.005. 1,000 homes cost $1.75 on Free or $1.00 on Gold, plus $0.005 for each run you split them into. A weekly watch of 20 homes costs about $0.17 a month on Free, start fees included.

Never charged: a link that fails both tries (its error row), the summary and info rows, and a home that could not be saved. Turning off includePriceHistory, includeTaxHistory or includeSchools does not change the price.

Charged again: a home that appears twice in urls is fetched and charged twice, and a scheduled run charges every home in its list each time. Remove duplicates before you start.

There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your plan; if it and this table ever differ, the Pricing tab is right.

FAQ

What does this actor read? The public Zillow property page for each link or ZPID, the same page any visitor sees without signing in. It reads the property record Zillow embeds in that page, not the page layout, and returns one row per home.

Why is taxHistory empty, and where are the school ratings? Zillow no longer puts tax history or school ratings in the property page. Its site loads them in your browser after the page arrives, and this actor reads the page over plain HTTP without a browser. We checked on 2 October: the property records of a for-sale house, a sold house, two sold condos and an off-market house had no tax history or schools list, and a search of a whole sold-home page found neither anywhere in it. What the page does carry, the actor returns: the tax assessed value and tax rate for sold and off-market homes, and the assigned schools by name when the listing facts name them.

Does it return the listing agent's name, phone or email? No. Zillow's page does not include them for the homes we tested, so agentName, agentPhone and agentEmail are never filled. brokerName gives the listing brokerage for homes on the market, and mlsId the MLS listing number.

What is in priceHistory? Dated prices from the for-sale page, newest first. Zillow's page gives only the date and the price for each row, not whether it was a listing, a sale, a price cut or a rental, so event, pricePerSqft and source are null. Sold and off-market pages carry no price history, so the list is empty for them.

Does it work for sold and off-market homes? Yes. Zillow serves those homes a different record from homes for sale. They usually have no asking price (Zillow shows 0, so price is left out) and no price history, but they add taxAssessedValue, propertyTaxRate and, when the home was listed before, facts from that listing such as heating, parking, assigned schools and the MLS listing number.

How many homes can one run handle, and how long does it take? There is no limit on the list. Each home takes roughly 4 to 8 seconds including a short pause between homes, so the default 300 second timeout covers about 40 homes. For more, raise the timeout under Run options, or split the list across runs. A run that reaches its timeout stops 15 seconds early, keeps every row it has, and marks its summary row ended_on_deadline: true.

What happens when a link fails? The actor tries each home twice, each time on a fresh residential IP. If both tries fail (Zillow refused the request, the link is not a property page, or the home no longer exists), the dataset gets an error row with your input and the reason, and you are not charged. If 3 homes in a row fail, the run stops early and says so in its summary row, rather than working through a list Zillow is refusing.

Do I need a Zillow account, cookies or my own proxy? No. You need only an Apify account. The actor uses Apify's residential US proxy, and that cost is included in the price per home.

What if the same home is in my list twice? It is fetched and charged twice. Remove duplicate links or ZPIDs before you start.

How fresh is the data? Every run reads Zillow live, so prices, statuses, Zestimates and days on Zillow are as of the moment the run fetched the page.

How do I export the data? From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. For a spreadsheet, turn off the three list switches, or flatten the lists in your own code.

Can I use it from Claude, ChatGPT or another AI assistant?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/zillow-property-details.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http zillow-property-details "https://mcp.apify.com/?tools=themineworks/zillow-property-details".

It is also available as the property_details tool inside our Real Estate MCP server.

Is it legal to scrape Zillow? The actor reads only public property pages that anyone can open without logging in, and it does not get past any login or paywall. Zillow's robots.txt allows these property pages for general crawlers. It returns property and listing data, not owner names or personal contact details. You are responsible for how you use the data, including Zillow's terms of use and data protection law such as GDPR and CCPA. This is general information, not legal advice.

Integrations

  • Google Sheets: export a run to a sheet, or use Apify's Google Sheets integration to append each scheduled run.
  • Make, Zapier and n8n: use the Apify app or node to run the actor on new links from a sheet or CRM, then route price cuts or status changes to Slack or email.
  • Webhooks: have Apify call your URL when a run succeeds, then read the dataset.
  • API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
  • MCP clients: Claude, ChatGPT, Cursor, VS Code and Claude Code can call the actor as a tool through https://mcp.apify.com.

To find homes first, start with Zillow Search Scraper, Zillow Recently Sold or Zillow Rental Listings, then pass their links here.

More from The Mine Works

Real estate

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Science, health and government data

Jobs and hiring

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

More tools

Support

Found a home that returns the wrong value, or a field Zillow shows that the row is missing? Open an issue on the Issues tab of this page with the link and the run ID, and we will reply there. To ask for a new property source, email dmineworks@gmail.com. A guide for this actor also lives at themineworks.com.

Zillow Property Scraper turns Zillow links or ZPIDs into one clean row per home, with the Zestimate, HOA, heating, cooling, brokerage, lot size and photos Zillow's page carries, from $1.00 per 1,000 homes.