{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Search Scraper",
    "description": "Bulk Zillow listings search by ZIP, city, search URL, or map bounding box. Auto-paginates past Zillow's 800-result cap. MCP-ready.",
    "version": "0.2",
    "x-build-id": "217jtSyWnkDqnpRBb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~zillow-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-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/khadinakbar~zillow-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-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/khadinakbar~zillow-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-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",
        "properties": {
          "searchUrl": {
            "title": "Zillow search URL",
            "type": "string",
            "description": "Paste any Zillow search URL (e.g. https://www.zillow.com/austin-tx/houses/). The actor extracts the embedded searchQueryState JSON and scrapes that exact search. Use this when you already crafted filters in the Zillow UI. NOT a single property detail page — use the zillow-all-in-one-scraper actor for that."
          },
          "zipCodes": {
            "title": "ZIP codes (US)",
            "type": "array",
            "description": "List of US ZIP codes to scrape (e.g. ['90210', '10001']). Each ZIP is scraped independently. Use this for bulk market scans by postal area. NOT for international postal codes — only US Zillow markets are supported.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search query (city, state, neighborhood)",
            "type": "string",
            "description": "Free-text city/state/neighborhood lookup (e.g. 'Austin, TX' or 'Brooklyn, NY'). Zillow's geocoder resolves this to a region. Defaults to 'Austin, TX' when no other input is given. NOT a property address — use a full search URL for granular targeting."
          },
          "mapBounds": {
            "title": "Map bounding box (lat/lon)",
            "type": "object",
            "description": "Programmatic bounding-box search for AI agents. Provide { north, south, east, west } as decimal degrees. Use this when you have an exact polygon (drawn map, MLS export, etc). NOT used when searchUrl/zipCodes/searchQuery is set."
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "forSale",
              "forRent",
              "sold"
            ],
            "type": "string",
            "description": "Which Zillow inventory to scrape. 'forSale' covers active for-sale listings. 'forRent' covers active rentals. 'sold' covers recently sold homes. Defaults to 'forSale'. NOT a mix — pick one per run.",
            "default": "forSale"
          },
          "maxResults": {
            "title": "Max results per run",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on listings pushed to the dataset (1–5000). Charged per listing at $0.005. Defaults to 100 (= $0.50). NOT a soft target — actor stops exactly at this number.",
            "default": 100
          },
          "minPrice": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest acceptable list price in USD. Applied to Zillow's price filter. Defaults to no minimum. NOT applied if searchUrl already encodes a price filter."
          },
          "maxPrice": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest acceptable list price in USD. Applied to Zillow's price filter. Defaults to no maximum. NOT applied if searchUrl already encodes a price filter."
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum bedroom count (0–10). Applied to Zillow's beds filter. Defaults to 0. NOT applied if searchUrl already encodes a beds filter.",
            "default": 0
          },
          "minBaths": {
            "title": "Min bathrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum bathroom count (0–10). Applied to Zillow's baths filter. Defaults to 0. NOT applied if searchUrl already encodes a baths filter.",
            "default": 0
          },
          "homeType": {
            "title": "Home type",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict to specific property types (houses, condos, townhomes, multi-family, manufactured, land, apartments). Empty = all types. NOT applied if searchUrl already encodes a type filter.",
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "condos",
                "townhomes",
                "multifamily",
                "manufactured",
                "land",
                "apartments"
              ]
            },
            "default": []
          },
          "bypassPagination": {
            "title": "Skip subdivision past 800 cap",
            "type": "boolean",
            "description": "Zillow caps each search at 800 listings. By default the actor recursively subdivides the map until all listings are retrieved. Set true to disable subdivision (faster but capped at 800). Defaults to false.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy configuration. Defaults to RESIDENTIAL US (required to bypass Zillow's PerimeterX). Override only if you know your own proxy bypasses Zillow.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}