{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Scraper — Deal Finder, Price Cuts & Market Monitor",
    "description": "Find real estate deals on Zillow. Returns a ranked deal queue — below-comp listings, price cuts, motivated sellers, rental yield, and what changed since last run. Drop-in compatible with maxcopell/zillow-scraper + zillow-detail-scraper.",
    "version": "1.0",
    "x-build-id": "R4QEuxIPoYgW22WhY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ryanclinton~zillow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ryanclinton-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/ryanclinton~zillow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ryanclinton-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/ryanclinton~zillow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ryanclinton-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",
        "properties": {
          "intent": {
            "title": "What do you want to do?",
            "enum": [
              "find_deals",
              "price_cuts",
              "rental_yield",
              "monitor_market",
              "analyze_properties",
              "comps"
            ],
            "type": "string",
            "description": "Pick the job in plain language and the actor sets the right mode, ranking, and output for you. Leave the targets below empty to run the demo (deals in Austin, TX)."
          },
          "mode": {
            "title": "Mode (advanced — usually set by Intent)",
            "enum": [
              "deals",
              "properties",
              "market",
              "watchlist"
            ],
            "type": "string",
            "description": "Override the mode chosen by Intent. 'deals' ranks the listings in a search. 'properties' explains specific property URLs. 'market' returns a ZIP/metro's trajectory plus standout listings. 'watchlist' tracks a set across runs and returns what changed."
          },
          "searchUrls": {
            "title": "Zillow search URLs",
            "maxItems": 50,
            "type": "array",
            "description": "Deals mode: paste Zillow for-sale search URLs (the ones with ?searchQueryState=). The actor ranks the listings by which are actually deals.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "propertyUrls": {
            "title": "Zillow property URLs",
            "maxItems": 300,
            "type": "array",
            "description": "Properties / watchlist mode: Zillow /homedetails/ URLs. Each result carries its deal score, comp position, Seller Pressure Index, and history. With a watchlist name set, a tracked property set becomes a portfolio with a priority rollup. Leave everything empty to run the built-in demo on a few sample listings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "zipCodes": {
            "title": "ZIP codes (market mode)",
            "maxItems": 50,
            "type": "array",
            "description": "Market mode: one or more ZIP codes to read a market's price/inventory/yield trajectory plus its standout listings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "City / metro (market or deals mode)",
            "type": "string",
            "description": "A city or metro to resolve to a search area, e.g. 'Austin, TX'. Used in market mode, or in deals mode when you don't paste a search URL.",
            "default": ""
          },
          "investorType": {
            "title": "Investor type (re-weights the deal score)",
            "enum": [
              "analyst",
              "flipper",
              "buy_and_hold",
              "brrrr",
              "cashflow",
              "agent"
            ],
            "type": "string",
            "description": "Re-ranks the same data for your strategy. A flipper weights below-comp + seller pressure; a cash-flow investor weights rental yield; an analyst keeps it neutral. Changes the ranking, not the data.",
            "default": "analyst"
          },
          "rankBy": {
            "title": "Rank by",
            "enum": [
              "opportunity",
              "dealScore",
              "emerging",
              "sellerPressure",
              "priceCut",
              "yield",
              "daysOnMarket",
              "recency",
              "price"
            ],
            "type": "string",
            "description": "How to order the deal queue. 'opportunity' (default) blends deal score, seller pressure, and momentum. 'emerging' surfaces listings becoming deals. 'sellerPressure' sorts by the Seller Pressure Index."
          },
          "watchlistName": {
            "title": "Watchlist name (turns any mode into a monitor)",
            "type": "string",
            "description": "Give this run a stable watchlist name to track the set across runs. Price/status/deal-score history persists in a named store keyed on this name, so the next run reports what changed since last time. Rename = a fresh memory clock.",
            "default": ""
          },
          "changeWindowDays": {
            "title": "Change window (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "The window for the 'what changed in this market' report, even on a first watchlist run.",
            "default": 7
          },
          "deltaWindowDays": {
            "title": "Delta window (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "The comparison window for delta intelligence (what changed since the prior run).",
            "default": 7
          },
          "alerts": {
            "title": "Alerts (scheduled-run change feed)",
            "type": "object",
            "description": "When set, the run emits only actionable items plus automation-ready deal cards. Fields: minDealScore, onlyNewSinceLastRun, priceCutMinPct, highYieldMinPct, includeStatuses[], alertWhenDealImproves (fire on a deal-score jump, not just a price cut). Turns a watchlist run into a clean change feed instead of a re-dump.",
            "default": {}
          },
          "filters": {
            "title": "Filters (property attributes only)",
            "type": "object",
            "description": "Property-attribute filters only: excludeAuction, excludePending, excludeNoRentEstimate, minBeds, maxHoaMonthly, propertyTypes[]. By design this actor does NOT filter on neighborhood desirability, schools, crime, or demographics.",
            "default": {}
          },
          "outputPack": {
            "title": "Output pack (which decision surfaces)",
            "enum": [
              "investor",
              "agent",
              "analyst",
              "raw"
            ],
            "type": "string",
            "description": "Curates which decision surfaces lead the output. 'investor' = deal queue + motivated sellers + cash flow + price cuts. 'agent' = new listings + price cuts + back on market + went pending. 'analyst' = market snapshot + inventory + DOM + ZIP comparison. 'raw' = compat fields."
          },
          "outputProfile": {
            "title": "Output profile (field depth)",
            "enum": [
              "signals",
              "compat",
              "minimal"
            ],
            "type": "string",
            "description": "'signals' (default) = full envelope: comp position + scores + Seller Pressure Index + signals + history + change story. 'compat' = exact maxcopell field set with validated URLs/zpids, no signal fields (migration parity). 'minimal' = zpid + URL + price + deal score.",
            "default": "signals"
          },
          "limits": {
            "title": "Limits (cost control)",
            "type": "object",
            "description": "Cost control on the render-heavy detail pass: { maxListings, maxDetails }. maxDetails caps how many property pages are rendered and scored this run.",
            "default": {
              "maxListings": 120,
              "maxDetails": 60
            }
          },
          "maxRuntimeSeconds": {
            "title": "Max runtime (seconds)",
            "minimum": 60,
            "maximum": 7200,
            "type": "integer",
            "description": "Soft runtime budget. The actor auto-clamps against the platform timeout and emits partial output before a hard stop.",
            "default": 3600
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy. Defaults to US RESIDENTIAL, which Zillow requires because it restricts automated access from shared IPs. Leave as default unless you have a reason to change it.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}