{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow ZIP Search Pro (FSBO, investor, rent & sold)",
    "description": "Search Zillow by ZIP code, city or county. Clean ZIP lists, per-ZIP status, FSBO-first investor mode, rent/sold/pending in one run, investor columns and an optional detail add-on. Pay per result with hard cost caps.",
    "version": "0.1",
    "x-build-id": "jr84lJmrmaIng9SyG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kingly_contest_7cb~zillow-zip-search-pro/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kingly_contest_7cb-zillow-zip-search-pro",
        "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/kingly_contest_7cb~zillow-zip-search-pro/runs": {
      "post": {
        "operationId": "runs-sync-kingly_contest_7cb-zillow-zip-search-pro",
        "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/kingly_contest_7cb~zillow-zip-search-pro/run-sync": {
      "post": {
        "operationId": "run-sync-kingly_contest_7cb-zillow-zip-search-pro",
        "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": [
          "listingTypes"
        ],
        "properties": {
          "zipCodes": {
            "title": "ZIP codes",
            "type": "array",
            "description": "US ZIP codes to search. Messy pastes are fine: spaces, commas, quotes, ZIP+4 (12345-6789) and Excel-trimmed ZIPs (e.g. 2108 → 02108) are cleaned. Every entry gets a status row in the ZIP_SUMMARY record (ok / no_results / blocked / invalid / partial / skipped).",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Cities or counties (optional)",
            "type": "array",
            "description": "Optional free-text locations such as \"Saint Clair Shores, MI\" or \"Travis County, TX\". Each one is resolved with Zillow's location search and searched as a whole region.",
            "items": {
              "type": "string"
            }
          },
          "strictZip": {
            "title": "Only keep listings inside the requested ZIP",
            "type": "boolean",
            "description": "On (default): listings whose address ZIP differs from the requested ZIP are dropped and counted as nearbySkipped. Off: they are kept and flagged isNearbyResult = true.",
            "default": true
          },
          "listingTypes": {
            "title": "Listing types",
            "type": "array",
            "description": "Pick any mix. For-sale types are searched together; pending, for rent and sold are separate Zillow searches in the same run.",
            "items": {
              "type": "string",
              "enum": [
                "forSaleByAgent",
                "forSaleByOwner",
                "newConstruction",
                "comingSoon",
                "auction",
                "foreclosure",
                "pending",
                "forRent",
                "sold"
              ],
              "enumTitles": [
                "For sale by agent",
                "For sale by owner (FSBO)",
                "New construction",
                "Coming soon",
                "Auction",
                "Foreclosure",
                "Pending / under contract",
                "For rent",
                "Recently sold"
              ]
            },
            "default": [
              "forSaleByAgent",
              "forSaleByOwner"
            ]
          },
          "investorMode": {
            "title": "Investor mode (FSBO first)",
            "type": "boolean",
            "description": "Runs a dedicated FSBO-only search for every ZIP before anything else, so owner listings are not buried under agent listings when you use result limits. Requires 'For sale by owner' in listing types.",
            "default": false
          },
          "homeTypes": {
            "title": "Home types",
            "type": "array",
            "description": "Leave empty for all home types.",
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multiFamily",
                "condos",
                "apartments",
                "lotsLand",
                "manufactured"
              ],
              "enumTitles": [
                "Houses",
                "Townhomes",
                "Multi-family",
                "Condos / co-ops",
                "Apartments",
                "Lots / land",
                "Manufactured"
              ]
            }
          },
          "bedsMin": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "0 = any."
          },
          "bathsMin": {
            "title": "Min bathrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "0 = any."
          },
          "priceMin": {
            "title": "Min price (sale / sold), USD",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no minimum."
          },
          "priceMax": {
            "title": "Max price (sale / sold), USD",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no maximum."
          },
          "rentMin": {
            "title": "Min monthly rent, USD",
            "minimum": 0,
            "type": "integer",
            "description": "Used only for 'For rent'. 0 = no minimum."
          },
          "rentMax": {
            "title": "Max monthly rent, USD",
            "minimum": 0,
            "type": "integer",
            "description": "Used only for 'For rent'. 0 = no maximum."
          },
          "daysOnZillow": {
            "title": "Max days on Zillow",
            "enum": [
              "any",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "type": "string",
            "description": "Only listings posted within this window (not used for sold).",
            "default": "any"
          },
          "soldInLast": {
            "title": "Sold in the last",
            "enum": [
              "any",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "type": "string",
            "description": "Window for 'Recently sold'.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "relevance",
              "newest",
              "priceLow",
              "priceHigh"
            ],
            "type": "string",
            "description": "Matters when you use result limits.",
            "default": "relevance"
          },
          "includeDetails": {
            "title": "Detail add-on ($0.005 per enriched listing)",
            "type": "boolean",
            "description": "Opens each listing's detail page to add year built, HOA, tax rate and an estimated annual tax, last sold date/price, date posted, MLS ID, views/saves, description and the brokerage name. Charged as a separate 'detail-enrichment' event ($0.005) only when the detail page is read successfully, in addition to the $0.0015 listing event. Capped by 'Max detail enrichments'. Slower: one extra request per enriched listing.",
            "default": false
          },
          "maxDetails": {
            "title": "Max detail enrichments (whole run)",
            "minimum": 0,
            "type": "integer",
            "description": "Total cap on detail enrichments across the whole run (all ZIPs combined). Each successful enrichment costs $0.005, so 20 = at most $0.10 in detail charges. Listings beyond the cap are still saved (and charged $0.0015 each) but without detail fields and without the detail charge. 0 = no details. Only used when the detail add-on is on.",
            "default": 20
          },
          "includeListedByContact": {
            "title": "Include public 'Listed by' name and phone",
            "type": "boolean",
            "description": "Requires the detail add-on. Adds the name and phone exactly as shown publicly in the listing's 'Listed by' box (agent or, for FSBO, the owner who chose to publish it). Nothing else is collected. You are responsible for complying with telemarketing / privacy laws (TCPA, DNC, CAN-SPAM, state laws) when you use this data.",
            "default": false
          },
          "maxResults": {
            "title": "Max results (whole run)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on dataset rows for the whole run. 0 = no cap. The Actor also stops cleanly when your 'Maximum cost per run' would be exceeded.",
            "default": 100
          },
          "maxResultsPerZip": {
            "title": "Max results per ZIP / location",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no per-ZIP cap.",
            "default": 0
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Zillow serves at most 20 pages (~41 listings each) per search.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Zillow uses bot protection. Small runs sometimes work without a proxy, but blocks become likely as volume grows; Apify residential proxy (US) is recommended for anything regular. Residential proxy traffic is billed by Apify to the account running the Actor."
          },
          "minDelayMs": {
            "title": "Min delay between requests (ms)",
            "minimum": 1000,
            "type": "integer",
            "description": "Requests are sent one at a time with at least this delay (plus jitter). Minimum 1000.",
            "default": 2500
          },
          "maxRetries": {
            "title": "Retries when blocked",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "How many times to retry a page with a fresh session when Zillow's bot check blocks it.",
            "default": 2
          },
          "fetchBackend": {
            "title": "Fetch backend (developer)",
            "type": "string",
            "description": "'direct' = live HTTP. 'replay' = serve saved pages from debugFixturesDir (offline tests only).",
            "default": "direct"
          },
          "debugFixturesDir": {
            "title": "Fixtures dir (developer)",
            "type": "string",
            "description": "Local folder with manifest.json for the replay backend."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}