{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Property Scraper: Sale, Rent & Sold Homes",
    "description": "Search Zillow listings by city, ZIP or search link and get full property details in the same run: description, photos, price and tax history, agent phone, sale date. Apartments for rent come back one row per unit with leasing phone and office hours. $2.50 per 1,000 homes, details included.",
    "version": "2.2",
    "x-build-id": "PCh3fOUSsvc06YY1D"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/herus13~zillow-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-herus13-zillow-property-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/herus13~zillow-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-herus13-zillow-property-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/herus13~zillow-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-herus13-zillow-property-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_url": {
            "title": "Search URL",
            "type": "string",
            "description": "A Zillow search results page to scrape in full, for example `https://www.zillow.com/san-francisco-ca/rentals/`. Build the search on Zillow, copy the URL, paste it here, and every listing it returns becomes a row. The URL carries its own filters, so the filter fields below are not applied to it. Leave empty to search by `location` or to scrape `property_urls` instead."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Where to search, written as city and state or as a ZIP code, for example `San Francisco, CA` or `94102`. Combine it with the listing type and the price, bedroom, bathroom, area and property-type filters below. Leave empty when you are using `search_url` or `property_urls` instead."
          },
          "listing_type": {
            "title": "Listing Type",
            "enum": [
              "for_sale",
              "for_rent",
              "sold"
            ],
            "type": "string",
            "description": "Which listings a `location` search returns: for_sale for homes on the market, for_rent for rentals, sold for recently sold homes with their final price (null where the state does not disclose sale prices, such as Texas). Default for_sale. It has no effect on `search_url` or `property_urls`, which carry their own listing type.",
            "default": "for_sale"
          },
          "min_price": {
            "title": "Min Price ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest listing price to keep, in US dollars, 0 or more — for example 500000. Leave empty for no lower bound. Applies to a `location` search only."
          },
          "max_price": {
            "title": "Max Price ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest listing price to keep, in US dollars, 0 or more — for example 1500000. Leave empty for no upper bound. Applies to a `location` search only."
          },
          "beds_min": {
            "title": "Min Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bedrooms a listing may have, 0 or more. Leave empty for no lower bound. Applies to a `location` search only."
          },
          "beds_max": {
            "title": "Max Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Most bedrooms a listing may have, 0 or more. Leave empty for no upper bound. Applies to a `location` search only."
          },
          "baths_min": {
            "title": "Min Bathrooms",
            "minimum": 0,
            "type": "number",
            "description": "Fewest bathrooms a listing may have, 0 or more; half baths count as 0.5. Leave empty for no lower bound. Applies to a `location` search only."
          },
          "baths_max": {
            "title": "Max Bathrooms",
            "minimum": 0,
            "type": "number",
            "description": "Most bathrooms a listing may have, 0 or more; half baths count as 0.5. Leave empty for no upper bound. Applies to a `location` search only."
          },
          "sqft_min": {
            "title": "Min Sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest interior area to keep, in square feet, 0 or more — for example 1000. Leave empty for no lower bound. Applies to a `location` search only."
          },
          "sqft_max": {
            "title": "Max Sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Largest interior area to keep, in square feet, 0 or more — for example 4000. Leave empty for no upper bound. Applies to a `location` search only."
          },
          "property_type": {
            "title": "Property Types",
            "type": "array",
            "description": "Kinds of property to keep, one per entry: `house`, `condo`, `townhouse`, `multi_family`, `land`, `apartment`. Leave empty to keep every kind. Applies to a `location` search only."
          },
          "days_on_market_max": {
            "title": "Max Days on Market",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only listings that have been on the market this many days or fewer, at least 1 — 7 gives you the past week, which is what a new-listings alert wants. Leave empty to keep listings of any age. Applies to a `location` search only."
          },
          "property_urls": {
            "title": "Property URLs",
            "type": "array",
            "description": "Zillow property pages to scrape exactly, one URL per entry, shaped `https://www.zillow.com/homedetails/123-main-st/12345_zpid/`. Each URL returns one row with the full field set. Leave empty to work from `search_url` or `location` instead."
          },
          "max_results": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Most properties the whole run may return, from 1 to 10000. Default 100. A Zillow search page holds about 40 listings, and pages are followed until this cap or the end of the results, whichever comes first. It is the ceiling on how much one run collects.",
            "default": 100
          },
          "include_photos": {
            "title": "Include Photos",
            "type": "boolean",
            "description": "Add the listing's photo URLs to each row, as `photos`. Default true. Set it to false for a narrower export when you only need the numbers.",
            "default": true
          },
          "include_price_history": {
            "title": "Include Price History",
            "type": "boolean",
            "description": "Add the dates, events and prices behind the current asking price to each row, as `price_history`. Default true. It is what makes a price cut or a relisting visible without scraping the same home twice. Set it to false to leave it out.",
            "default": true
          },
          "proxyUrls": {
            "title": "Your own proxy URLs (optional)",
            "type": "array",
            "description": "Leave empty and the run uses the residential proxy this actor ships with, included in the price of the run. To route the run through your own account instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs. When set, the run uses these first and switches to the included proxy if they stop working, so a broken proxy never fails the run.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}