{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Search Scraper With Property Enrichment",
    "description": "Automate Zillow search scraping with reliable filtering for price, home type, beds, baths, and neighborhood. Retrieve complete listing details, photos, and agent insights. Perfect for building market datasets, powering dashboards, or enriching real estate intelligence tools.",
    "version": "0.2",
    "x-build-id": "r792v3jkJNDtJxued"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~zillow-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-zillow-search-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/api-empire~zillow-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-zillow-search-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/api-empire~zillow-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-zillow-search-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",
        "required": [
          "searchUrls"
        ],
        "properties": {
          "searchUrls": {
            "title": "🔎 Search URLs, Locations or ZIP Codes",
            "type": "array",
            "description": "Zillow search URLs (best — a full URL with searchQueryState), or bare locations / ZIP codes which are resolved to a real map search. Examples: full Zillow URL, `dallas-tx`, `austin-tx`, `90210`.",
            "items": {
              "type": "string"
            }
          },
          "extractionMethod": {
            "title": "⚙️ Extraction Method",
            "enum": [
              "PAGINATION_WITH_DYNAMIC_ZOOM_INCREASE",
              "PAGINATION_WITHOUT_ZOOMING_IN",
              "MAP_MARKERS"
            ],
            "type": "string",
            "description": "How listings are collected. Dynamic zoom subdivides the map into smaller tiles to beat Zillow's ~820-per-query cap (best for dense cities). Pagination without zooming uses HTML pages (capped ~820). Map markers is simplest (capped ~500).",
            "default": "PAGINATION_WITH_DYNAMIC_ZOOM_INCREASE"
          },
          "maxItems": {
            "title": "🎯 Maximum Items",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum property listings to scrape for the whole run (global across all URLs, deduplicated by ZPID). 0 = as many as possible. Example: 100. Default is 10.",
            "default": 10
          },
          "status": {
            "title": "🏷️ Listing Status",
            "enum": [
              "all",
              "forSale",
              "forRent",
              "sold"
            ],
            "type": "string",
            "description": "Filter by listing status. `all` keeps whatever the URL already specifies.",
            "default": "all"
          },
          "minPrice": {
            "title": "💵 Min Price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price (USD). Example: 200000."
          },
          "maxPrice": {
            "title": "💵 Max Price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price (USD). Example: 750000."
          },
          "minBeds": {
            "title": "🛏️ Min Bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum bedrooms. Example: 3."
          },
          "maxBeds": {
            "title": "🛏️ Max Bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum bedrooms. Example: 5."
          },
          "minBaths": {
            "title": "🛁 Min Bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum bathrooms. Example: 2."
          },
          "minSqft": {
            "title": "📐 Min Living Area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum living area in square feet. Example: 1000."
          },
          "maxSqft": {
            "title": "📐 Max Living Area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum living area in square feet. Example: 4000."
          },
          "homeType": {
            "title": "🏠 Home Type",
            "enum": [
              "all",
              "houses",
              "condos",
              "townhomes",
              "multiFamily",
              "apartments",
              "manufactured",
              "lotsLand"
            ],
            "type": "string",
            "description": "Restrict to a single property type. `all` keeps every type.",
            "default": "all"
          },
          "maxDaysOnMarket": {
            "title": "📅 Max Days on Market",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings on Zillow at most this many days (mapped to Zillow's nearest bucket: 1, 7, 14, 30, 90, 180, 365). Example: 7 for new listings."
          },
          "keywords": {
            "title": "🔤 Keywords",
            "type": "string",
            "description": "Free-text keyword filter passed to Zillow (matches listing descriptions). Example: `pool` or `waterfront`."
          },
          "rawData": {
            "title": "🧬 Include Raw hdpData",
            "type": "boolean",
            "description": "Also include the raw nested `hdpData` blob and full `carouselPhotosComposable` on each row. Clean columns are lifted regardless; this is for advanced users who want everything. Default off.",
            "default": false
          },
          "maxPhotos": {
            "title": "📸 Max Photo URLs per Listing",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Number of hi-res photo URLs to build per listing (from photoData keys). Example: 5. Default 5.",
            "default": 5
          },
          "enableDetailEnrichment": {
            "title": "🔬 Enable Detail Enrichment",
            "type": "boolean",
            "description": "Opt-in. For each ZPID / property URL below, fetch the detail page and emit a CHILD row (type=detail) with price history, tax history, agent/broker contact, schools and description. Charged under the separate `detail_result` event and mirrored to a per-run child dataset. Default off.",
            "default": false
          },
          "detailUrlsOrZpids": {
            "title": "🔗 Detail ZPIDs or Property URLs",
            "type": "array",
            "description": "List of Zillow ZPIDs (e.g. `55826232`) or full property (homedetails) URLs to enrich. Only used when Detail Enrichment is enabled.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "Zillow's anti-bot (PerimeterX) blocks datacenter IPs — RESIDENTIAL is strongly recommended. If left at the default (no proxy), the actor starts direct and automatically escalates to Apify Residential when blocked.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}