Skip to content
    ↑↓ to choose · Enter to open

    · 14 min read

    Zillow Property Scraper: 33 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Zillow Property Scraper extracts over 30 fields per property, including prices, Zestimates, descriptions, photos, agent details, schools, tax history, and price history from Zillow.com. You can search by location in "BUY", "RENT", or "SOLD" modes, or provide direct Zillow property URLs for targeted scraping. The service is not for those requiring agent contact emails, which the records do not include.

    Try it: open Zillow Property Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Zillow Property Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Zillow Property Scraper a month, before run-start charges and platform usage.

    The example request further down caps maxItems at 5, so a first run returns at most 5 results and costs at most $0.025 in result charges. That is enough to see the real shape of the data before deciding anything.

    Zillow Property Scraper was last updated on 2026-04-07. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 674,790 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Zillow Property Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The primary driver of cost is the number of results generated, which is directly influenced by the maxItems and endPage controls. To assess whether this Actor meets your needs before committing to a larger spend, start by running it with maxItems set to 5, as suggested in the example input, which costs up to $0.025 in result charges. This provides a small sample of records for evaluation.

    How do you run Zillow Property Scraper from the API?

    None of its 6 controls is strictly required, so the defaults below produce a valid run on their own. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Zillow Property Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~zillow-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"search":"Houston, TX","mode":"BUY","maxItems":5,"endPage":1,"scrapeDetails":true}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "search": "Houston, TX",
      "mode": "BUY",
      "maxItems": 5,
      "endPage": 1,
      "scrapeDetails": True
    }
    
    run = client.actor("crawlerbros~zillow-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "search": "Houston, TX",
      "mode": "BUY",
      "maxItems": 5,
      "endPage": 1,
      "scrapeDetails": true
    }
    
    const run = await client.actor('crawlerbros~zillow-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Zillow Property Scraper inputs matter, and which can you skip?

    The search control, requiring a city and state like "Houston, TX", or the startUrls array for direct links, defines the properties the Actor will process. Most users should focus on these along with mode (BUY, RENT, or SOLD). Controls like maxItems and endPage are crucial for scaling your data collection and should be adjusted after a successful small-scale test; the scrapeDetails boolean affects the richness of each record, not the number of records.

    • search (string): City and state to search for properties (e.g., 'Houston, TX', 'San Francisco, CA', 'Miami, FL').
    • mode (string): Type of property search - for sale, for rent, or recently sold. Default: "BUY".
    • maxItems (integer): Maximum number of property listings to scrape (1-500). Default: 50.
    • endPage (integer): Maximum search result pages to scrape per search (1-20). Each page has up to 40 properties. Default: 5.
    • scrapeDetails (boolean): Fetch each property's detail page for full description, schools, tax history, price history, and more. Disable for faster runs with only search-level data. Default: true.
    • startUrls (array): Direct Zillow property detail URLs or search page URLs. Paste URLs from your browser.

    Fixed-choice controls: mode accepts BUY (For Sale (Buy)), RENT (For Rent), SOLD (Recently Sold).

    What does Zillow Property Scraper return?

    Each record from Zillow Property Scraper provides a detailed snapshot of a property, useful for real estate trend analysis and market comparisons. The output notably includes rich data such as priceHistory, taxHistory, and schools when scrapeDetails is enabled. What it conspicuously does not contain, however, are direct contact email addresses for agents or brokers, which are not exposed on Zillow property pages.

    • url (e.g. https://www.zillow.com/homedetails/46-Kingwoo...)
    • zpid (e.g. 28065573)
    • status (e.g. for_sale)
    • price (e.g. 318000)
    • zestimate (e.g. 325000)
    • rentZestimate (e.g. 2400)
    • beds (e.g. 5)
    • baths (e.g. 4)
    • sqft (e.g. 5526)
    • lotSize (e.g. 22,346 sqft)
    • yearBuilt (e.g. 2000)
    • propertyType (e.g. SINGLE_FAMILY)
    • stories (e.g. 2)
    • parking (e.g. 3 garage spaces)
    • hoaFee (e.g. 150)
    • pricePerSqft (e.g. 58)
    • daysOnZillow (e.g. 14)
    • address (e.g. 46 Kingwood Greens Dr)
    • city (e.g. Kingwood)
    • state (e.g. TX)
    • zipCode (e.g. 77339)
    • latitude (e.g. 30.033194)
    • longitude (e.g. -95.180402)
    • brokerName (e.g. REALHome Services and Solutions, Inc.)
    • agentName (e.g. Lori Brown)
    • agentPhone (e.g. (979) 255-0702)
    • description
    • photos
    • priceHistory
    • taxHistory
    • schools
    • features
    • scrapedAt (e.g. 2026-03-25T12:00:00.000000+00:00)

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Zillow Property Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Set the search control to a specific location like "Houston, TX" or provide startUrls directly, then set mode to "BUY", "RENT", or "SOLD" depending on your target market.
    2. For a quick initial check, set maxItems to 5 to limit results and run the Actor.
    3. Review the output in the dataset to confirm that the price, address, and propertyType fields are populated correctly for the returned items.
    4. If scrapeDetails is enabled, verify that richer data like description, photos, priceHistory, and schools are present and structured as expected.
    5. Increase maxItems or endPage to cover your full target area, or add more startUrls for a broader collection, then re-run.
    6. Export the dataset to your preferred format (JSON, CSV, Excel) and load it into your analysis tool.
    7. Implement a recurring schedule with your chosen search parameters or startUrls to capture ongoing changes in property listings.

    How do you apply it? Three worked playbooks

    These are Zillow Property Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Real estate investment analysis

    Outcome: Compare listing prices, Zestimates, and price history to find undervalued properties

    Configure: Set search to your target city and state. Set mode to "BUY". Ensure scrapeDetails is true to get Zestimates and price history. Consider setting maxItems to a higher value like 500 for broad coverage.

    Working method: Begin by identifying a specific target market using the search control. Perform an initial run with scrapeDetails enabled. Analyze the price, zestimate, and priceHistory fields in the output to identify properties where the listing price is below the Zestimate and has a stable or upward price history. Refine your search location or add multiple locations to cover a wider area for comparison.

    Deliverable: A spreadsheet or database of properties with their listing price, Zestimate, and a structured price history for identifying potential undervaluation.

    Stop condition: The zestimate field is consistently null or missing across a significant portion of the results, preventing meaningful comparison.

    Use case 2: Market research

    Outcome: Track listing prices, sold prices, and days on market across neighborhoods

    Configure: Use the search control with various neighborhood names or ZIP codes. Set mode to "BUY" and then run another for "SOLD". Keep scrapeDetails true. Configure endPage to 20 for maximum listings per search.

    Working method: Start with a specific neighborhood by setting the search control, first in "BUY" mode to gather current listings, then in "SOLD" mode for historical data. Collect price, daysOnZillow, and scrapedAt for active listings, and price and priceHistory (especially the final sold price) for sold properties. Schedule runs to occur weekly or monthly to track changes over time and identify market trends.

    Deliverable: A time-series dataset showing median listing prices, median sold prices, and average days on market for specified neighborhoods over a period.

    Stop condition: The daysOnZillow field is frequently missing or reports implausible values, hindering accurate market trend analysis.

    Use case 3: Property comparison

    Outcome: Build side-by-side comparison sheets for multiple properties in a target area

    Configure: Provide specific Zillow property detail URLs in the startUrls array for the properties you wish to compare. Set scrapeDetails to true to ensure all available fields are collected.

    Working method: Compile a list of specific Zillow property URLs you want to compare. Input these into the startUrls control. Run the Actor and then extract all available fields for each property. Focus on comparing fields like beds, baths, sqft, lotSize, yearBuilt, features, and schools. Create a structured comparison document or dashboard to highlight differences.

    Deliverable: A comprehensive comparison sheet (e.g., Google Sheet, Excel file) with key property attributes laid out side-by-side for selected properties.

    Stop condition: A significant number of expected detail fields (e.g., schools, features, description) are missing for properties supplied via startUrls, making a comprehensive comparison impossible.

    What breaks, and how do you design around it?

    When running against a large search query, if you expect to hit the maxItems or endPage limits, consider breaking your search into smaller geographical areas. If you're supplying startUrls, divide them into multiple Actor runs rather than using a single, very long list. If a run returns fewer results than anticipated, review your startUrls for any malformed entries.

    When should you not use Zillow Property Scraper?

    This Zillow Property Scraper is not the right tool when you need real-time data on open house schedules or specific details about property managers, as its focus is on individual property listings and their historical data. For open house events, consider using the Zillow Open Houses Scraper, which is designed specifically to extract dates, times, and property details for scheduled viewings. If your goal is to gather information on property management companies, including their contact details, reviews, and managed listings, the Zillow Property Manager Scraper would be a more appropriate choice. Similarly, if your primary need is agent profiles with sales statistics and specializations, you should opt for the Zillow Agent & Premier Agent Directory Scraper rather than this general property scraper. For distressed properties like foreclosures, the Zillow Foreclosure & Pre-Foreclosure Scraper provides more relevant, targeted data.

    What should you check before trusting the output?

    • Monitor for missing price or address fields, which indicate a malformed record or an issue with the listing.
    • Verify that propertyType values are consistent and fall within expected categories like "SINGLE_FAMILY" or "CONDO".
    • For runs with scrapeDetails enabled, check for photos arrays that are empty or contain broken URLs.
    • Look for priceHistory or taxHistory arrays that are incomplete or contain illogical chronological data.
    • Alert on any run where the total number of results is significantly lower than maxItems or endPage would suggest, especially if no errors are reported.
    • Confirm agentName and brokerName are present when scrapeDetails is true, as these are crucial for agent-focused analysis.

    None of this proves a record is correct. It gives a scheduled Zillow Property Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What output fields does Zillow Property Scraper return?

    Each property record provides over 30 fields. These include core details like price, beds, baths, sqft, and address, alongside enriched data such as zestimate, rentZestimate, photos, priceHistory, taxHistory, schools, and features. Fields with no available data for a specific property are automatically excluded from the output to keep records clean. The scrapedAt timestamp is also included for every item.

    How much does Zillow Property Scraper cost?

    On Apify's free plan, each result costs $0.005, which translates to $5.00 per 1,000 results. Apify's free plan includes $5.00 of monthly usage, which covers up to 1,000 results of this Actor before factoring in run-start charges and platform usage. A small test run with maxItems set to 5, as in the example input, costs up to $0.025 in result charges, making it inexpensive to evaluate.

    Can I get agent contact information like email addresses?

    The Actor extracts agent names and phone numbers when scrapeDetails is enabled, as these are typically visible on Zillow listings. However, Zillow.com does not publicly display agent email addresses on property detail pages. Therefore, this Actor cannot provide agent email contacts in its output. If email addresses are crucial for your use case, you would need to explore alternative data sources or methods.

    How can I ensure the data collected is up-to-date?

    The Zillow Property Scraper extracts live data directly from Zillow.com at the moment each run is executed. To confirm data recency, every output item includes a scrapedAt timestamp. For continuous monitoring or to capture the latest changes, you can schedule the Actor to run at regular intervals (daily, weekly, etc.), ensuring your dataset remains fresh.

    What is the impact of disabling "Scrape Full Details"?

    Disabling the scrapeDetails option significantly increases run speed. When scrapeDetails is false, the Actor will only collect basic property information directly visible on search results pages, such as price, beds, baths, sqft, address, and zestimate. You will miss richer data like description, photos, priceHistory, taxHistory, schools, and detailed features, as these require visiting individual property detail pages.

    Where to go next

    When you are ready to run it, open Zillow Property Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Zillow Property Scraper Actor page for the current input schema, pricing tier, and run history.

    It is part of the Zillow Scraping Suite, which puts every related Actor on one page with its price and run history.

    If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-25.

    • Actor last updated by its maintainers on 2026-04-07.

    • Run outcome figures cover the 30 day public window ending 2026-09-25.

    • Zillow Property Scraper on Apify

    Featured actors

    Zillow Property Scraper

    Scrape property listings from Zillow. Get prices, descriptions, photos, agent details, schools, tax history, price history, and 30+ fields per property.

    Run on Apify ↗