{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Scraper - Homes for Sale, Rent, Sold & Price Drops",
    "description": "Scrape Zillow homes for sale, for rent and sold by city, ZIP or search URL: price, beds, baths, sqft, Zestimate, price cuts, brokerage, photos. Schedule it daily: only new listings and price drops. Optional home page with facts. Error rows are free.",
    "version": "0.1",
    "x-build-id": "bRWp5yWfEJq6PEKbw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~zillow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-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/scrapewise~zillow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-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/scrapewise~zillow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "US cities, ZIP codes or neighborhoods, one per line (for example Austin, TX or Miami, FL or 10001 or Williamsburg, Brooklyn). Any spelling works: 'austin tx', 'AUSTIN, TX' and 'Austin Texas' all find Austin. 'New York' means New York City; write 'New York State' for the whole state. Each location is a separate search with the filters below, and every row keeps its location. With locations and URLs empty, the run searches Austin, TX as an example. Also accepts 'location', 'searchTerms', 'cities' or 'zipcodes'.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Zillow URLs",
            "type": "array",
            "description": "Search URLs copied from your browser after setting the filters on Zillow (for example https://www.zillow.com/seattle-wa/rentals/ or any URL with searchQueryState, including a drawn map area), one per line. Every filter in the URL is kept, so the filters below are not needed. Home URLs (with /<zpid>_zpid/) also work and come back with the full home page, charged as a home plus a home page. Leave empty to search by location. Also accepts 'searchUrls', 'urls' or 'propertyUrls'.",
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "forSale",
              "forRent",
              "sold"
            ],
            "type": "string",
            "description": "For sale (default), For rent, or Recently sold. Sets which Zillow search runs for each location; prices are the asking price, the monthly rent or the sold price. Also accepts 'status' or 'type'.",
            "default": "forSale"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these property types: Houses, Townhomes, Multi-family, Condos / co-ops, Apartments, Manufactured, Lots / land. Pick one or more; leave empty for every type. Also accepts 'homeTypes' or 'propertyType'.",
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multiFamily",
                "condos",
                "apartments",
                "manufactured",
                "lots"
              ],
              "enumTitles": [
                "Houses",
                "Townhomes",
                "Multi-family",
                "Condos / co-ops",
                "Apartments",
                "Manufactured",
                "Lots / land"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only homes at or above this price in US dollars (for example 300000); for rentals, the monthly rent (for example 1500). Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only homes at or below this price in US dollars (for example 750000); for rentals, the monthly rent. Leave empty for no maximum. With a narrow price range, large markets fit under Zillow's per-search cap."
          },
          "minBeds": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms (for example 3). Leave empty for any."
          },
          "maxBeds": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms (for example 4). Leave empty for any."
          },
          "minBaths": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "type": "number",
            "description": "Minimum number of bathrooms: 1, 1.5, 2, 3 or 4, as in Zillow's own filter. Leave empty for any."
          },
          "minSqft": {
            "title": "Minimum square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum living area in square feet (for example 1500). Leave empty for any."
          },
          "maxSqft": {
            "title": "Maximum square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum living area in square feet (for example 3000). Leave empty for any."
          },
          "minLotSqft": {
            "title": "Minimum lot size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum lot size in square feet (1 acre = 43,560 sqft, so 21780 is half an acre). Leave empty for any."
          },
          "maxLotSqft": {
            "title": "Maximum lot size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum lot size in square feet (for example 43560 for one acre). Leave empty for any."
          },
          "minYearBuilt": {
            "title": "Built from year",
            "minimum": 0,
            "type": "integer",
            "description": "Only homes built in this year or later (for example 2000). Leave empty for any."
          },
          "maxYearBuilt": {
            "title": "Built up to year",
            "minimum": 0,
            "type": "integer",
            "description": "Only homes built in this year or earlier (for example 1950 for older homes). Leave empty for any."
          },
          "daysOnZillow": {
            "title": "Days on Zillow (sold in last, for sold)",
            "enum": [
              "any",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "type": "string",
            "description": "Only homes listed in the last 1, 7, 14, 30 or 90 days, or 6 to 36 months. For Recently sold it means sold in that period, the usual filter for comps. Any (default) applies no date filter. Also accepts 'soldInLast'.",
            "default": "any"
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Words that must appear in the listing, as in Zillow's own keyword filter (for example pool, waterfront or ADU). Leave empty for no keyword filter."
          },
          "onlyPriceCuts": {
            "title": "Only homes with a price cut on Zillow",
            "type": "boolean",
            "description": "For sale only: keeps homes whose price Zillow shows as reduced, a common list for investors and agents. Every row also carries the cut (priceReducedBy, priceReducedAt) whenever Zillow has one, with this off too. Off by default. Also accepts 'onlyPriceReductions'.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "relevance",
              "priceLowToHigh",
              "priceHighToLow",
              "bedrooms",
              "bathrooms",
              "squareFeet",
              "lotSize"
            ],
            "type": "string",
            "description": "Zillow's own orders: Newest (default), Relevance, Price low to high, Price high to low, Bedrooms, Bathrooms, Square feet or Lot size. With a limit it also decides which homes you get. Newest first is the right choice for daily monitoring. Also accepts 'sort'.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max homes per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop each search (each URL or each location) after this many homes (default 50). Zillow shows 41 homes per page and at most 820 per search; above that the Actor splits the search by price range by itself. 0 means up to 10,000. You pay per home delivered. Also accepts 'maxItemsPerSearch', 'maxResults' or 'limit'.",
            "default": 50
          },
          "includeDetails": {
            "title": "Home pages",
            "type": "boolean",
            "description": "Also opens each home's own Zillow page: description, year built, HOA fee, property tax rate, facts and features (heating, cooling, parking, appliances, flooring...), highlights, full-size photos, MLS name and id, brokerage, page views and saves, price history, tax history and nearby schools. One extra request per home, charged as a separate 'Home page' event, and a slower run. Off by default. Also accepts 'includeDetail'.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new homes since the last run",
            "type": "boolean",
            "description": "For scheduled runs. Remembers which homes each search (with its filters) already returned, in a named key-value store in your account ('zillow-scraper-state'), and delivers only homes not seen before. The first run delivers up to the limit and marks everything it read as seen. Seen homes are not delivered and not charged. Forces the newest-first order. Delete the store to start over. Also accepts 'onlyNewListings'.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "Track price changes",
            "type": "boolean",
            "description": "Compares each home's price with the price seen in your previous runs of the same search (same key-value store) and adds previousPrice, priceChange, priceChangePct, isPriceDrop, isNewListing and firstSeenAt to every row. The first run only records prices. Together with 'Only new homes' you get new homes plus homes whose price changed; the limit then counts homes checked, so a daily run keeps the same cost. Also accepts 'compareWithPreviousRun'.",
            "default": false
          },
          "onlyPriceDrops": {
            "title": "Only price drops (not increases)",
            "type": "boolean",
            "description": "Needs 'Only new homes' and 'Track price changes' both on (otherwise the run stops with a free INVALID_INPUT row). Of the homes seen before, delivers only those whose price went down, plus new homes. Price increases are skipped and not charged.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "The default Apify Proxy (datacenter) works. If it keeps being refused, search pages move to the residential group by itself when your account has it. Keep the default.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}