{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Scraper: Sale, Rent and Sold Property Listings",
    "description": "Scrape zillow.com properties for sale, for rent and recently sold across the US: price, beds, baths, area, address, GPS, photos, home value and rent estimates. Optional property page read adds HOA fee, tax rate, MLS id, agent, brokerage and the fact sheet. 25 filters, or paste links.",
    "version": "1.0",
    "x-build-id": "wIK24epOHpoimcghu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~zillow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-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/abotapi~zillow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-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/abotapi~zillow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Start mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "How to start. 'Search by location' builds the search from the location and filters below. 'Direct URLs' takes zillow.com search or property links you already have.",
            "default": "search"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Search mode only. One or more US places, written the way you would type them into the site: 'Austin, TX', 'Brooklyn, NY', '90210'. Each one is walked separately, and the run cap below is shared evenly between them.",
            "default": [
              "Austin, TX"
            ],
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "Looking for",
            "enum": [
              "FOR_SALE",
              "FOR_RENT",
              "SOLD"
            ],
            "type": "string",
            "description": "Search mode only. For sale, for rent, or recently sold properties.",
            "default": "FOR_SALE"
          },
          "homeTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Search mode only. Leave empty for every type. Selecting one or more returns only those types.",
            "items": {
              "type": "string",
              "enum": [
                "HOUSE",
                "TOWNHOUSE",
                "CONDO",
                "APARTMENT",
                "MULTI_FAMILY",
                "MANUFACTURED",
                "LOT_LAND"
              ],
              "enumTitles": [
                "Houses",
                "Townhomes",
                "Condos and co-ops",
                "Apartments",
                "Multi-family",
                "Manufactured",
                "Lots and land"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Lowest price in USD. On a for-rent search this is the lowest monthly rent."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Highest price in USD. On a for-rent search this is the highest monthly rent."
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Fewest bedrooms."
          },
          "maxBeds": {
            "title": "Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Most bedrooms."
          },
          "minBaths": {
            "title": "Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Fewest bathrooms."
          },
          "minSqft": {
            "title": "Min living area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Smallest interior area in square feet."
          },
          "maxSqft": {
            "title": "Max living area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Largest interior area in square feet."
          },
          "minLotSize": {
            "title": "Min lot size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Smallest lot in square feet. One acre is 43560 square feet."
          },
          "maxLotSize": {
            "title": "Max lot size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Largest lot in square feet."
          },
          "minYearBuilt": {
            "title": "Built after",
            "minimum": 1800,
            "type": "integer",
            "description": "Search mode only. Earliest year built."
          },
          "maxYearBuilt": {
            "title": "Built before",
            "minimum": 1800,
            "type": "integer",
            "description": "Search mode only. Latest year built."
          },
          "maxHoaFee": {
            "title": "Max HOA fee per month",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Highest monthly HOA fee in USD. Set 0 to return only properties with no HOA fee."
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Search mode only. Narrows to properties whose listing text mentions this word, for example pool, casita, cul-de-sac. Leave empty for no keyword filter."
          },
          "daysOnZillow": {
            "title": "Listed within",
            "enum": [
              "ANY",
              "1_DAY",
              "7_DAYS",
              "14_DAYS",
              "30_DAYS",
              "90_DAYS",
              "6_MONTHS",
              "12_MONTHS",
              "24_MONTHS",
              "36_MONTHS"
            ],
            "type": "string",
            "description": "Search mode only. How recently the property was listed. On a recently-sold search this is how recently it sold.",
            "default": "ANY"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "RECOMMENDED",
              "NEWEST",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW",
              "BEDROOMS",
              "SQUARE_FEET",
              "LOT_SIZE",
              "MOST_RECENT_CHANGE"
            ],
            "type": "string",
            "description": "Search mode only. Result ordering. This changes the order results arrive in, it does not change which properties match.",
            "default": "RECOMMENDED"
          },
          "hasPool": {
            "title": "Must have a pool",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "hasGarage": {
            "title": "Must have a garage",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "hasAirConditioning": {
            "title": "Must have air conditioning",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "isWaterfront": {
            "title": "Waterfront only",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "singleStoryOnly": {
            "title": "Single story only",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "has3dTour": {
            "title": "Must have a 3D tour",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "openHouseOnly": {
            "title": "Open house only",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "priceReducedOnly": {
            "title": "Price reduced only",
            "type": "boolean",
            "description": "Search mode only.",
            "default": false
          },
          "startUrls": {
            "title": "Zillow links",
            "type": "array",
            "description": "URL mode only. Paste zillow.com search links (walked automatically) or property links ending in _zpid (returned as one record each). Multiple links supported. The filters above are ignored in this mode, because a pasted link already carries its own.",
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Read the property page for each result",
            "type": "boolean",
            "description": "Adds description, year built, HOA fee, property tax rate, MLS id and name, listing agent and brokerage, full photo gallery, parking and the property fact sheet. Costs one extra read per result and is billed per enriched result under the surcharge named in this section. Leave off for the search-level record, which already carries price, beds, baths, address, GPS, home value estimate, rent estimate and a photo.",
            "default": false
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of results to return across every location or link. This is the run cap. Set 0 for unlimited.",
            "default": 20
          },
          "maxPages": {
            "title": "Max reads per location",
            "minimum": 0,
            "type": "integer",
            "description": "Optional safety cap on how many search reads to spend on each location or link. A large area is covered by splitting it into smaller areas, so a big city needs more than one read. 0 means no read limit; the run still stops at Max results.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID (or dataset ID) from this actor to continue a large crawl without returning or billing for results already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for recurring monitoring. The first run returns every match as NEW. Later runs return only NEW, UPDATED and REAPPEARED results. State is kept separately per mode, locations or links, every filter and the property-page setting, so two different searches never mix. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key from the mode, locations or links, every filter and the property-page setting."
          },
          "emitUnchanged": {
            "title": "Emit unchanged results (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return results that have not changed since the last run, marked UNCHANGED. This returns, and bills for, extra rows you already have, so leave it off unless you want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired results (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return results that were present in a previous run and are no longer found, marked EXPIRED, once a run has scanned the whole search end to end. Adds, and bills for, extra rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "proxy": {
            "title": "Connection",
            "type": "object",
            "description": "How this run reaches the site. The prefilled option is billed by traffic on top of the run itself; see https://apify.com/pricing for rates. You can also supply your own connection URLs instead.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (address plus key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}