{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Scraper & API: Zillow Data, Listings, Price History",
    "description": "Zillow data and real estate data API, no login: Zillow search for homes for sale, rentals and sold homes by ZIP, city or URL with Zillow's filters, every listing past the page cap; Zillow property data by URL, zpid or address lookup: price history, tax history, Zestimate, schools, agent, photos.",
    "version": "0.1",
    "x-build-id": "oNY97KlXiLLv3x9jc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hyperbach~zillow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hyperbach-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/hyperbach~zillow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hyperbach-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/hyperbach~zillow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hyperbach-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": {
          "location": {
            "title": "Location (ZIP, place or Zillow search URL)",
            "maxLength": 4000,
            "type": "string",
            "description": "One search: a ZIP (`95476`), a place with its state (`Sonoma, CA`, `Austin, TX`, `Sonoma County, CA`) or a Zillow search URL (`https://www.zillow.com/sonoma-ca-95476/`, `/…/sold/`, `/…/rentals/`, or one with `searchQueryState` in it: its filters are the search's own). Not searched when `searches` or `properties` has an item: the list is then the whole run, and the filters here are its defaults.",
            "default": ""
          },
          "searches": {
            "title": "Searches (ZIPs, places, URLs or search objects)",
            "maxItems": 500,
            "type": "array",
            "description": "Many searches in one run: a list of ZIPs, places or Zillow search URLs as strings, or objects with their own filters and your own id: `{\"location\": \"95476\", \"listingType\": \"sold\", \"daysOnZillow\": \"90\", \"minPrice\": 500000, \"maxPrice\": 900000, \"minBeds\": 3, \"homeTypes\": [\"house\"], \"sortBy\": \"newest\", \"maxListingsPerSearch\": 100, \"id\": \"my-ref-17\"}` (the run's fields are the defaults). An object's `bounds` (`{\"west\": -122.47, \"east\": -122.45, \"south\": 38.28, \"north\": 38.30}`, degrees) searches that map box; its `location` is then only its name. Up to 500 searches a run; a value that is no search is a free `invalid` row, and a search given twice a free `duplicate` row.",
            "default": []
          },
          "properties": {
            "title": "Properties (homedetails URLs, zpids or addresses)",
            "maxItems": 5000,
            "type": "array",
            "description": "Properties to read in full: homedetails URLs (`https://www.zillow.com/homedetails/19071-Hickory-St-Sonoma-CA-95476/72542621_zpid/`, the zpid-only form too), building pages (`https://www.zillow.com/b/…/`: the building with its units and floor plans), bare zpids (`72542621`), addresses (`19071 Hickory St, Sonoma, CA 95476`: resolved by Zillow's address lookup), or objects with your own id: `{\"zpid\": 72542621, \"id\": \"lead-17\"}`, `{\"url\": \"…\"}`, `{\"address\": \"…\"}`. Each one is a `property` row with the full record; an unknown zpid or an address (or unit) Zillow does not resolve is a free `not_found` row; a property given twice is read once (a free `duplicate` row for the repeat). Up to 5,000 a run.",
            "default": []
          },
          "propertiesDatasetId": {
            "title": "Properties from a dataset",
            "pattern": "^[A-Za-z0-9~_./-]{0,120}$",
            "type": "string",
            "description": "The id of an Apify dataset whose items carry a `zpid`, `url` or `detail_url` (the output of a search run of this Actor, or of another one): every item becomes a property to read in full (`id` / `input_id` on the item is carried through). Up to 5,000 items.",
            "default": ""
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "for_sale",
              "for_rent",
              "sold"
            ],
            "type": "string",
            "description": "`for_sale` (the default), `for_rent` (homes and buildings; a building row carries its units with `includeDetails`) or `sold` (with the sale price and date; `daysOnZillow` is then the sold window: 90 = sold in the last 90 days, 36m = the 3 years Zillow keeps). A Zillow URL's own view (`/sold/`, `/rentals/`) overrides it.",
            "default": "for_sale"
          },
          "maxListingsPerSearch": {
            "title": "Listings per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop a search after this many listings. 0 = every listing Zillow lists for it: the route's 24 pages of 41, then the rest by a price cursor (1,477 sold homes of a ZIP in 40 calls on our runs). The free summary row says how many Zillow counts and whether the list was COMPLETE, TRUNCATED or CAPPED. 41 = Zillow's first screen in Zillow's order.",
            "default": 0
          },
          "includeDetails": {
            "title": "Full record for every listing",
            "type": "boolean",
            "description": "Read the full property record for every listing of each search (one more call each, 18 KB): the price and tax history, schools, nearby homes, 180+ facts, the listing agent with phone and license, the broker, MLS id, all photos, the open-house schedule, the description, views and saves, climate risk. Such a row is charged as a `property` instead of a `listing`.",
            "default": false
          },
          "detailsFor": {
            "title": "Full record for the first N listings",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Read the full record for the first N listings of each search only (0 = none; `includeDetails` reads every one). Those rows are charged as `property`.",
            "default": 0
          },
          "includeExtras": {
            "title": "Zestimate history and walk scores",
            "type": "boolean",
            "description": "On every full record, two more calls: the Zestimate history (`zestimate_history`: 10 years of monthly points, 121 on our test) and the walk, transit and bike scores. No extra charge.",
            "default": false
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Keep listings from this price up (for rent: the monthly rent). Applied by Zillow. 0 = no limit.",
            "default": 0
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Keep listings up to this price (for rent: the monthly rent). Applied by Zillow. 0 = no limit.",
            "default": 0
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Keep listings with at least this many bedrooms. Applied by Zillow. 0 = any.",
            "default": 0
          },
          "maxBeds": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Keep listings with at most this many bedrooms. Applied by Zillow. 0 = any.",
            "default": 0
          },
          "minBaths": {
            "title": "Min bathrooms",
            "enum": [
              "",
              "1",
              "1.5",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Keep listings with at least this many bathrooms (Zillow's own steps). Applied by Zillow.",
            "default": ""
          },
          "homeTypes": {
            "title": "Home types",
            "maxItems": 7,
            "type": "array",
            "description": "Keep these home types only, one per line: `house`, `condo`, `townhouse`, `multi_family`, `lot`, `apartment`, `manufactured`. Empty = every type. Applied by Zillow.",
            "items": {
              "type": "string",
              "pattern": "^(house|condo|townhouse|multi_family|lot|apartment|manufactured)$"
            },
            "default": []
          },
          "daysOnZillow": {
            "title": "Days on Zillow (sold: the sold window)",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "type": "string",
            "description": "Keep listings on Zillow for at most this long; for `sold`, homes sold within this window (Zillow keeps 3 years: `36m` = all). Applied by Zillow.",
            "default": ""
          },
          "keywords": {
            "title": "Keywords",
            "maxLength": 200,
            "type": "string",
            "description": "Zillow's keyword filter over the listing text (`pool`, `view`, `ADU`). Applied by Zillow.",
            "default": ""
          },
          "minSqft": {
            "title": "Min square feet",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep listings with at least this living area (sqft). Applied by Zillow. 0 = any.",
            "default": 0
          },
          "maxSqft": {
            "title": "Max square feet",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep listings with at most this living area (sqft). Applied by Zillow. 0 = any.",
            "default": 0
          },
          "minLotSqft": {
            "title": "Min lot (sqft)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Keep listings with at least this lot size, in square feet (an acre is 43,560). Applied by Zillow. 0 = any.",
            "default": 0
          },
          "maxLotSqft": {
            "title": "Max lot (sqft)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Keep listings with at most this lot size, in square feet. Applied by Zillow. 0 = any.",
            "default": 0
          },
          "minYearBuilt": {
            "title": "Built from (year)",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep homes built in this year or later. Applied by Zillow. 0 = any.",
            "default": 0
          },
          "maxYearBuilt": {
            "title": "Built until (year)",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep homes built in this year or earlier. Applied by Zillow. 0 = any.",
            "default": 0
          },
          "maxHoa": {
            "title": "Max HOA fee (monthly)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Keep homes whose monthly HOA fee is at most this (homes with no HOA included). Applied by Zillow. 0 = any.",
            "default": 0
          },
          "saleTypes": {
            "title": "Sale types (for sale only)",
            "maxItems": 6,
            "type": "array",
            "description": "Keep these kinds of for-sale listings only, one per line: `agent`, `owner` (FSBO), `new_construction`, `coming_soon`, `auction`, `foreclosure`. Empty = every kind. Applied by Zillow.",
            "items": {
              "type": "string",
              "pattern": "^(agent|owner|new_construction|coming_soon|auction|foreclosure)$"
            },
            "default": []
          },
          "includePending": {
            "title": "Include pending and under-contract listings",
            "type": "boolean",
            "description": "For-sale searches include listings pending or under contract (Zillow's default). Switch it off to leave them out.",
            "default": true
          },
          "amenities": {
            "title": "Must have",
            "maxItems": 7,
            "type": "array",
            "description": "Keep listings with every one of these, one per line: `garage`, `pool`, `waterfront`, `air_conditioning`, `basement`, `3d_tour`, `open_house`. Applied by Zillow (its own filter keys).",
            "items": {
              "type": "string",
              "pattern": "^(garage|pool|waterfront|air_conditioning|basement|3d_tour|open_house)$"
            },
            "default": []
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "relevance",
              "newest",
              "price_asc",
              "price_desc",
              "zestimate"
            ],
            "type": "string",
            "description": "`relevance` keeps Zillow's own order (its first screen first); `newest`, `price_asc`, `price_desc` and `zestimate` are Zillow's own sorts. A list longer than Zillow's 24 pages is read by price past that point.",
            "default": "relevance"
          },
          "onlyChanges": {
            "title": "Only listings that are new or moved (monitoring)",
            "type": "boolean",
            "description": "Remember every listing row delivered (by its zpid and search) and, on the next run of the same memory, deliver only the listings that are new or whose price or status moved: `change_type`, `changed_fields`, `previous_price`, `price_change` say what. Unchanged listings are counted, not delivered, not charged.",
            "default": false
          },
          "stateStoreName": {
            "title": "Memory name",
            "pattern": "^[A-Za-z0-9-]{0,63}$",
            "type": "string",
            "description": "With `onlyChanges`: the name of the memory to keep between runs (letters, digits, dashes); empty = a name derived from the searches.",
            "default": ""
          },
          "maxItems": {
            "title": "Max rows (charged)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many charged rows (listings and property records; the free `search` summary rows and the free not-found rows do not count). 0 = no limit.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}