{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow scraper",
    "description": null,
    "version": "0.0",
    "x-build-id": "xLWfnXHOr5h3k3xOR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lukass~zillow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lukass-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/lukass~zillow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lukass-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/lukass~zillow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lukass-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": {
          "search": {
            "title": "🔎 Search location",
            "type": "string",
            "description": "Location to scrape, in plain text - e.g. `Los Angeles`, `Melrose, Bronx`, `Brooklyn, NY` or `90210`. It is resolved through Zillow's own autocomplete to the best matching region (city, borough, county, neighborhood, ZIP, subdivision or state). Leave empty if you are using **Zillow URLs** or **ZPIDs** instead."
          },
          "startUrls": {
            "title": "🔗 Zillow URLs",
            "type": "array",
            "description": "Zillow search or property URLs to scrape. A **search URL** must carry a `?searchQueryState=…` part - it holds the map area and the filters, both of which are read from it (open the search on zillow.com and move the map once if the URL has no query state yet). A **property URL** (`/homedetails/…/12345678_zpid/`) is fetched directly by its ZPID. Filters set below apply on top, and anything in the URL wins.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "zpids": {
            "title": "🆔 ZPIDs",
            "type": "array",
            "description": "Zillow property IDs to fetch directly, e.g. `89070667`. These skip the search entirely - no location, no map area needed.",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "title": "🏷️ Listing type",
            "enum": [
              "sale",
              "rent",
              "sold"
            ],
            "type": "string",
            "description": "Which listings to scrape. For rent returns grouped buildings (`minPrice`/`maxPrice`/`unitsGroup`) rather than single homes; recently sold adds `lastSoldDate`.",
            "default": "sale"
          },
          "priceMin": {
            "title": "💰 Min price",
            "type": "integer",
            "description": "Lowest price to include. For **For rent** this is the monthly rent (the API prices rentals on a different field, which the actor picks automatically)."
          },
          "priceMax": {
            "title": "💰 Max price",
            "type": "integer",
            "description": "Highest price to include. For **For rent**, the highest monthly rent."
          },
          "bedsMin": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bedrooms."
          },
          "bedsMax": {
            "title": "🛏️ Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Most bedrooms."
          },
          "bathsMin": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bathrooms. Half baths count, so `2` also matches a 2.5-bath home."
          },
          "homeTypes": {
            "title": "🏘️ Home types",
            "type": "array",
            "description": "Property types to include. Empty means every type.",
            "items": {
              "type": "string",
              "enum": [
                "singleFamily",
                "condo",
                "townhome",
                "multiFamily",
                "apartment",
                "manufactured",
                "land"
              ],
              "enumTitles": [
                "🏡 Houses",
                "🏢 Condos",
                "🏘️ Townhomes",
                "🏬 Multi-family",
                "🏙️ Apartments",
                "🚚 Manufactured",
                "🌳 Lots / land"
              ]
            }
          },
          "sqftMin": {
            "title": "📐 Min living area (sq ft)",
            "type": "integer",
            "description": "Smallest interior size in square feet."
          },
          "sqftMax": {
            "title": "📐 Max living area (sq ft)",
            "type": "integer",
            "description": "Largest interior size in square feet."
          },
          "lotSizeMin": {
            "title": "🌳 Min lot size (sq ft)",
            "type": "integer",
            "description": "Smallest lot in square feet. 1 acre = 43,560 sq ft."
          },
          "lotSizeMax": {
            "title": "🌳 Max lot size (sq ft)",
            "type": "integer",
            "description": "Largest lot in square feet."
          },
          "yearBuiltMin": {
            "title": "🏗️ Built after",
            "type": "integer",
            "description": "Earliest year built."
          },
          "yearBuiltMax": {
            "title": "🏗️ Built before",
            "type": "integer",
            "description": "Latest year built."
          },
          "daysOnZillowMax": {
            "title": "📅 Max days on Zillow",
            "type": "integer",
            "description": "Only listings posted within this many days. Use `1` for listings added today. For **Recently sold** this is the sold-within window instead - the API uses one field for both, so `182` means sold in the last 6 months."
          },
          "keywords": {
            "title": "🔤 Keywords",
            "type": "string",
            "description": "Free-text search over the listing description, exactly like the app's keyword box - e.g. `pool`, `garage`, `waterfront`."
          },
          "showOnly": {
            "title": "✅ Show only",
            "type": "array",
            "description": "Extra listing conditions. Every selected condition must hold.",
            "items": {
              "type": "string",
              "enum": [
                "priceReduction",
                "openHouses",
                "approvedVirtualTour",
                "singleStory",
                "garage"
              ],
              "enumTitles": [
                "📉 Price cut",
                "🚪 Open houses",
                "🎥 3D tour",
                "1️⃣ Single story",
                "🚗 Garage"
              ]
            }
          },
          "amenities": {
            "title": "🏖️ Amenities",
            "type": "array",
            "description": "Property amenities that must be present.",
            "items": {
              "type": "string",
              "enum": [
                "havePool",
                "haveAirConditioning",
                "onWaterfront"
              ],
              "enumTitles": [
                "🏊 Pool",
                "❄️ Air conditioning",
                "🌊 Waterfront"
              ]
            }
          },
          "parkingSpotsMin": {
            "title": "🚗 Min parking spots",
            "type": "integer",
            "description": "Fewest parking spots."
          },
          "basementStatuses": {
            "title": "🕳️ Basement",
            "type": "array",
            "description": "Basement types to include. *For sale.*",
            "items": {
              "type": "string",
              "enum": [
                "finished",
                "partial",
                "unfinished"
              ],
              "enumTitles": [
                "✨ Finished",
                "🔧 Partially finished",
                "🧱 Unfinished"
              ]
            }
          },
          "viewTypes": {
            "title": "🌄 View",
            "type": "array",
            "description": "Views the property must have.",
            "items": {
              "type": "string",
              "enum": [
                "city",
                "mountain",
                "water",
                "park"
              ],
              "enumTitles": [
                "🌆 City",
                "⛰️ Mountain",
                "🌊 Water",
                "🌳 Park"
              ]
            }
          },
          "hoaMaxPerMonth": {
            "title": "🏦 Max HOA fee per month",
            "type": "integer",
            "description": "Highest monthly HOA fee, in dollars. *For sale.*"
          },
          "includeHomesWithNoHoaData": {
            "title": "🏦 Include homes with no HOA data",
            "type": "boolean",
            "description": "Keep listings whose HOA fee is unknown when an HOA limit is set. Matches the app's default.",
            "default": true
          },
          "includePending": {
            "title": "⏳ Include pending / under contract",
            "type": "boolean",
            "description": "Zillow's app hides pending and backup-offer listings by default; turn this on to keep them.",
            "default": false
          },
          "includeForeclosed": {
            "title": "🏚️ Include foreclosures",
            "type": "boolean",
            "description": "Add foreclosed homes to the results. *For sale.*",
            "default": false
          },
          "includePreforeclosure": {
            "title": "🏚️ Include pre-foreclosures",
            "type": "boolean",
            "description": "Add pre-foreclosure homes to the results. *For sale.*",
            "default": false
          },
          "pets": {
            "title": "🐕 Pets allowed",
            "type": "array",
            "description": "Rentals that allow these pets. *Rentals.*",
            "items": {
              "type": "string",
              "enum": [
                "largeDogs",
                "smallDogs"
              ],
              "enumTitles": [
                "🐕 Large dogs",
                "🐩 Small dogs"
              ]
            }
          },
          "rentalAmenities": {
            "title": "🧺 Rental amenities",
            "type": "array",
            "description": "Building amenities the rental must have. *Rentals.*",
            "items": {
              "type": "string",
              "enum": [
                "laundryAvailable",
                "parkingAvailable"
              ],
              "enumTitles": [
                "🧺 Laundry",
                "🚗 Parking"
              ]
            }
          },
          "availableFrom": {
            "title": "📆 Available from",
            "type": "string",
            "description": "Only rentals available on or after this date. Format `YYYY-MM-DD`. *Rentals.*"
          },
          "excludeSeniorCommunity": {
            "title": "🚫 Exclude senior communities",
            "type": "boolean",
            "description": "Drop 55+/senior-community rentals. *Rentals.*",
            "default": false
          },
          "sortOrder": {
            "title": "↕️ Sort by",
            "enum": [
              "relevance",
              "price",
              "beds",
              "baths",
              "daysOn",
              "recentlyChanged",
              "featured",
              "lotArea",
              "livingArea",
              "yearBuilt",
              "nearby",
              "rentalDays",
              "rentalPriorityScore"
            ],
            "type": "string",
            "description": "Order the results are requested in. Leave empty to use the app's own default for the listing type (relevance for sale, priority score for rentals, days on Zillow for sold)."
          },
          "sortAscending": {
            "title": "⬆️ Sort ascending",
            "type": "boolean",
            "description": "Sort low to high instead of high to low.",
            "default": false
          },
          "maxItems": {
            "title": "🔢 Limit the number of items",
            "minimum": 1,
            "type": "integer",
            "description": "How many properties to scrape. Every returned property is billed, so this is the cap on what the run can cost. Leave empty to scrape everything the location has.",
            "default": 200
          },
          "maxSplitLevel": {
            "title": "🗺️ Max map splitting level",
            "minimum": 0,
            "maximum": 12,
            "type": "integer",
            "description": "Zillow returns at most 1,000 listings per map area, so bigger areas are split into quadrants and searched separately. This caps how deep that goes — higher means more complete results on dense areas but a longer run. Only splits that actually divide the results count towards it, so raising it costs nothing on small areas. Raise it for a large metro or a whole state.",
            "default": 3
          },
          "proxy": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Zillow's mobile API needs no credentials, but sustained traffic from a single datacenter IP eventually earns a PerimeterX block. US residential proxies are recommended for large runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "debugLog": {
            "title": "🐛 Debug log",
            "type": "boolean",
            "description": "Log every request, split and page. Turn on when a run returns fewer results than expected.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}