{
  "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, photos. Misses free.",
    "version": "0.1",
    "x-build-id": "TWU1GMW55M8joA0He"
  },
  "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"
          },
          "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
          },
          "feedback": {
            "title": "Feedback to the maintainers",
            "maxLength": 2000,
            "type": "string",
            "description": "A note to the people who maintain this Actor: what you needed and did not get. For example a missing field, a wrong or empty result, or the Actor you switch from or to, and why. The run does not read it: the rows and the charges stay the same. A person reads every note."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}