{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Scraper - Listings, Zestimate, Sold & Price History",
    "description": "Scrape Zillow listings by city, ZIP, map area or search URL (for sale, for rent, sold) for $0.85 per 1,000: price, Zestimate, beds, baths, sqft, photos. Optional property details: price and tax history, schools, comps, full fact sheet. Goes past the 820-result cap. No login.",
    "version": "0.1",
    "x-build-id": "aO4iytDyFRwai3f8I"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~zillow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-zillow-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/topapi~zillow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-zillow-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/topapi~zillow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-zillow-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchLocation": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Cities, ZIP codes, neighborhoods or counties, one per line, e.g. \"Austin, TX\", \"78704\", \"Travis County, TX\". An exact street address returns that one property.",
            "items": {
              "type": "string"
            }
          },
          "listingStatus": {
            "title": "🏷️ Listing status",
            "enum": [
              "forSale",
              "forRent",
              "sold"
            ],
            "type": "string",
            "description": "Which Zillow tab to search for Locations, ZIP codes and map areas. Search URLs keep the status set in the URL.",
            "default": "forSale"
          },
          "searchUrls": {
            "title": "🔗 Zillow search URLs",
            "type": "array",
            "description": "Any zillow.com search page, e.g. https://www.zillow.com/austin-tx/sold/ or a URL with ?searchQueryState=... The filters and map area in the URL are kept as they are. In JSON / API input each URL is an object: [{\"url\": \"https://www.zillow.com/austin-tx/sold/\"}].",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "startUrls": {
            "title": "🏠 Property URLs",
            "type": "array",
            "description": "Zillow property pages (/homedetails/..._zpid/). Each becomes one row with full property details, e.g. https://www.zillow.com/homedetails/29375136_zpid/. In JSON / API input each URL is an object: [{\"url\": \"https://www.zillow.com/homedetails/29375136_zpid/\"}].",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "zipCodes": {
            "title": "📮 ZIP codes",
            "type": "array",
            "description": "US ZIP codes to search with the status and filters above, e.g. 78704, 90210. Same as typing them into Locations.",
            "items": {
              "type": "string"
            }
          },
          "zpids": {
            "title": "🆔 Zillow property IDs (ZPID)",
            "type": "array",
            "description": "Zillow property IDs, e.g. 29375136. Each becomes one row with full property details.",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "title": "📫 Addresses",
            "type": "array",
            "description": "Street addresses in the form \"123 Main St, City, ST 12345\". Zillow resolves each to its property; you get one row with full property details.",
            "items": {
              "type": "string"
            }
          },
          "mapBounds": {
            "title": "🗺️ Map area",
            "type": "object",
            "description": "Search a rectangle on the map: {\"north\": 30.29, \"south\": 30.25, \"east\": -97.72, \"west\": -97.76}. Uses the status and filters above."
          },
          "latitude": {
            "title": "📌 Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Search around a point: latitude, e.g. 30.2672. Needs Longitude; the radius is Distance (miles)."
          },
          "longitude": {
            "title": "📌 Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Search around a point: longitude, e.g. -97.7431."
          },
          "distanceMiles": {
            "title": "📏 Distance (miles)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Radius around Latitude / Longitude, in miles. Default 5."
          },
          "searchResultsDatasetId": {
            "title": "🗃️ Dataset with Zillow results",
            "type": "string",
            "description": "ID of a dataset from an earlier Zillow run (this actor or another). Every row with a zpid or property URL is fetched again with full property details."
          },
          "sortBy": {
            "title": "🔀 Sort by",
            "enum": [
              "relevance",
              "newest",
              "priceLowToHigh",
              "priceHighToLow",
              "bedrooms",
              "bathrooms",
              "squareFeet",
              "lotSize"
            ],
            "type": "string",
            "description": "Order Zillow returns listings in. With a result limit, this decides which listings you get.",
            "default": "relevance"
          },
          "homeTypes": {
            "title": "🏘️ Home types",
            "type": "array",
            "description": "Only these home types. Empty = all types.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "townhouse",
                "multiFamily",
                "condo",
                "lot",
                "apartment",
                "manufactured"
              ],
              "enumTitles": [
                "Houses",
                "Townhomes",
                "Multi-family",
                "Condos / co-ops",
                "Lots / land",
                "Apartments",
                "Manufactured"
              ]
            }
          },
          "minPrice": {
            "title": "💲 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price in USD (monthly rent when Listing status is For rent), e.g. 300000."
          },
          "maxPrice": {
            "title": "💲 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price in USD (monthly rent when Listing status is For rent), e.g. 750000."
          },
          "minBeds": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "At least this many bedrooms, e.g. 3."
          },
          "maxBeds": {
            "title": "🛏️ Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "At most this many bedrooms."
          },
          "minBaths": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "number",
            "description": "At least this many bathrooms, e.g. 2 or 1.5."
          },
          "minSqft": {
            "title": "📐 Min square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest living area in square feet, e.g. 1500."
          },
          "maxSqft": {
            "title": "📐 Max square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Largest living area in square feet."
          },
          "minLotSize": {
            "title": "🌳 Min lot size (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest lot in square feet (1 acre = 43,560), e.g. 5000."
          },
          "maxLotSize": {
            "title": "🌳 Max lot size (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest lot in square feet."
          },
          "minYearBuilt": {
            "title": "🏗️ Built after",
            "minimum": 1700,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest year built, e.g. 1990."
          },
          "maxYearBuilt": {
            "title": "🏗️ Built before",
            "minimum": 1700,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest year built, e.g. 2020."
          },
          "maxHoaFee": {
            "title": "🏢 Max HOA fee / month",
            "minimum": 0,
            "type": "integer",
            "description": "Highest monthly HOA fee in USD, e.g. 200. Zillow keeps homes with no HOA data."
          },
          "daysOnZillow": {
            "title": "📅 Days on Zillow / sold within",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "type": "string",
            "description": "Listed within this window (for sale / rent), or sold within it when Listing status is Recently sold. Pairs well with a daily schedule.",
            "default": ""
          },
          "keywords": {
            "title": "🔎 Keywords",
            "type": "string",
            "description": "Zillow's keyword filter on the listing text, e.g. \"pool\" or \"mother-in-law\"."
          },
          "listingTypes": {
            "title": "🏷️ For-sale listing types",
            "type": "array",
            "description": "For sale only. Empty = Zillow's default (MLS-listed, by owner, new construction, foreclosure, auction, coming soon). Pick to narrow or to add pending / pre-foreclosure.",
            "items": {
              "type": "string",
              "enum": [
                "agentListed",
                "ownerPosted",
                "newConstruction",
                "foreclosure",
                "auction",
                "comingSoon",
                "foreclosed",
                "preForeclosure",
                "pendingUnderContract",
                "acceptingBackupOffers"
              ],
              "enumTitles": [
                "MLS-listed",
                "By owner (FSBO)",
                "New construction",
                "Foreclosures",
                "Auctions",
                "Coming soon",
                "Foreclosed (off market)",
                "Pre-foreclosures",
                "Pending & under contract",
                "Accepting backup offers"
              ]
            }
          },
          "mustHave": {
            "title": "✅ Must have",
            "type": "array",
            "description": "Zillow's amenity and listing filters, e.g. Pool + Garage. Empty = no requirement.",
            "items": {
              "type": "string",
              "enum": [
                "pool",
                "airConditioning",
                "waterfront",
                "singleStory",
                "garage",
                "basementFinished",
                "basementUnfinished",
                "has3DTour",
                "openHouse",
                "priceReduced"
              ],
              "enumTitles": [
                "Pool",
                "Air conditioning",
                "Waterfront",
                "Single story",
                "Garage",
                "Finished basement",
                "Unfinished basement",
                "3D tour",
                "Open house",
                "Price cut"
              ]
            }
          },
          "views": {
            "title": "🌄 View",
            "type": "array",
            "description": "Only homes Zillow lists with this view.",
            "items": {
              "type": "string",
              "enum": [
                "city",
                "mountain",
                "park",
                "water"
              ],
              "enumTitles": [
                "City",
                "Mountain",
                "Park",
                "Water"
              ]
            }
          },
          "parkingSpots": {
            "title": "🚗 Min parking spots",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "At least this many parking spots, e.g. 2."
          },
          "customFilterState": {
            "title": "🧩 Custom Zillow filters (advanced)",
            "type": "object",
            "description": "Any other Zillow filterState keys, merged last, e.g. {\"isTownhouse\": {\"value\": false}}. Copy them from a Zillow search URL's searchQueryState."
          },
          "minDaysOnZillow": {
            "title": "⏳ Min days on Zillow",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only listings on Zillow at least this many days, e.g. 60 for stale listings."
          },
          "withZestimateOnly": {
            "title": "📈 With Zestimate only",
            "type": "boolean",
            "description": "Keep only listings that show a Zestimate on the search card.",
            "default": false
          },
          "withPhotosOnly": {
            "title": "📷 With photos only",
            "type": "boolean",
            "description": "Keep only listings that have at least one photo.",
            "default": false
          },
          "includeDetails": {
            "title": "🧾 Include property details",
            "type": "boolean",
            "description": "Adds description, year built, price and tax history, schools, nearby homes, comparables, HOA, parking, MLS id, parcel number, all photos and the full fact sheet (about 25-90 facts, depending on the listing). $0.0016 per listing that gets them. Apartment-building rows (no ZPID) carry floor-plan rents, not property details. With Compact output on, the compact row keeps the details it was charged for.",
            "default": false
          },
          "includeZestimateHistory": {
            "title": "📉 Include Zestimate history",
            "type": "boolean",
            "description": "With property details: adds up to 10 years of monthly Zestimate values per home. No extra charge.",
            "default": false
          },
          "monitorMode": {
            "title": "🔁 Only new listings",
            "type": "boolean",
            "description": "Remember delivered listings per search (named key-value store) and skip them next time. Pairs with a daily schedule. The memory is also saved during the run, so a restarted run keeps it.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "💹 Also return price / status changes",
            "type": "boolean",
            "description": "With monitoring: also return a listing seen before when its price or status changed, with monitorChange and previousPrice.",
            "default": false
          },
          "monitorStoreName": {
            "title": "🗄️ Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the memory. Use a different name per independent schedule.",
            "default": "zillow-scraper-monitor"
          },
          "maxResults": {
            "title": "🔢 Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Total rows for the run. 0 = up to 100,000 rows (the most one run delivers). Zillow shows 41 per page and up to 820 per search; the map method below goes past that.",
            "default": 100
          },
          "maxResultsPerSearch": {
            "title": "🔢 Max results per search",
            "minimum": 0,
            "type": "integer",
            "description": "Limit per location / URL / ZIP when you pass several. 0 = no per-search limit.",
            "default": 0
          },
          "extractionMethod": {
            "title": "🧭 Extraction method",
            "enum": [
              "PAGINATION_WITH_ZOOM_IN",
              "PAGINATION",
              "MAP_MARKERS"
            ],
            "type": "string",
            "description": "Zillow lists at most 20 pages (820 homes) per search. The two map options split the area into smaller boxes to reach every listing.",
            "default": "PAGINATION_WITH_ZOOM_IN"
          },
          "compact": {
            "title": "🤏 Compact output",
            "type": "boolean",
            "description": "Core fields only (price, address, beds, baths, area, Zestimate, link, search input), flat - sized for AI assistants and MCP. A row that got property details also keeps what they were charged for: year built, description, price and tax history, schools, comparable homes, Zestimate history, photo URLs and the fact sheet.",
            "default": false
          },
          "flatOutput": {
            "title": "🧮 Flat output",
            "type": "boolean",
            "description": "Nested objects become dot-named columns (listingAddress.city, listingPrice.amount) for spreadsheets.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy",
            "type": "object",
            "description": "Leave as is: the actor starts on Apify's own connection and adds Apify datacenter proxy sessions by itself. Choosing a proxy here replaces both.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "⚡ Parallel connections",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Connections working at once; each is paced to about one request per second. Default 4.",
            "default": 4
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}