{
  "openapi": "3.0.1",
  "info": {
    "title": "Zillow Detail Scraper 💰 From $1.4/1K · URL, ZPID or Address",
    "description": "Paste Zillow property URLs, ZPIDs or plain addresses and get the full record for each: price, beds, baths, sq ft, lot size, description, agent and broker contacts, schools, zoning, price and tax history. Works on sale, rent and sold listings. JSON, CSV or Excel export.",
    "version": "0.0",
    "x-build-id": "Xbjie8boJhrUcibVI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~zillow-detail-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-zillow-detail-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/memo23~zillow-detail-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-zillow-detail-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/memo23~zillow-detail-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-zillow-detail-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": {
          "startUrls": {
            "title": "Zillow property URLs",
            "type": "array",
            "description": "One Zillow property URL per line, e.g. https://www.zillow.com/homedetails/2307-Cheyenne-Cir-Austin-TX-78745/58313397_zpid/ — a property URL returns one fully detailed row. Building (/b/), new-construction community (/community/) and agent profile (/profile/) URLs are detected automatically and go to their own parsers; a community page expands into one row per home, so keep \"Maximum properties\" high enough to cover that.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "zpids": {
            "title": "ZPID list (scrape specific properties)",
            "type": "array",
            "description": "Scrape individual properties directly by their Zillow Property ID (ZPID), one per line — no URL needed. Found in any property URL as the number before \"_zpid\".",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "title": "Property addresses",
            "type": "array",
            "description": "Addresses to scrape, one per line, in the format 123 Main St, City, State. Each one is resolved through Zillow's own autocomplete before the property is fetched. Progressively cleaned variants of the address are tried, and an address that still does not match is skipped while the rest of the run continues.",
            "items": {
              "type": "string"
            }
          },
          "includePropertyDetails": {
            "title": "Include Property Details",
            "type": "boolean",
            "description": "Keep this on. A property URL, ZPID or address always fetches the full property record, so the toggle changes nothing for those inputs. It only matters for a URL that expands into a list of homes — a /community/ page, or a search URL pasted into the URL list — where turning it off emits one summary row per home instead of fetching each home's own record.",
            "default": true
          },
          "includeAgentDetails": {
            "title": "Include additional agent details",
            "type": "boolean",
            "description": "Attaches the listing agent's profile record (reviews, sales stats, professional information, and an email where one is on file) under details.agentDetails. On an agent-listed property the agent name, agent phone and broker name are already on the row without this flag — they come from the property's own payload (listedBy, then attributionInfo, then the contact module). An owner-posted (FSBO) listing has no agent — Zillow returns every attributionInfo field null — and the row carries the owner's ownerName and ownerPhone instead. Zillow protects agent profile pages aggressively, so enabling this can produce 403s for some agents and slow the run down. With flatOutput on the profile record itself is dropped and only the Agent Email column is taken from it.",
            "default": false
          },
          "includeSaleDetails": {
            "title": "Include additional sale details",
            "type": "boolean",
            "description": "Fetches Zillow's secondary listing hub for each property — MLS id, MLS name and disclaimer, last-checked and last-updated timestamps, favorite and page-view counts, open-house schedule — and attaches it under details.saleDetails. Costs one extra request per property. It lives inside details, so it is not in the output when flatOutput is on.",
            "default": false
          },
          "includeNearbyHomes": {
            "title": "Include nearby / similar homes blob",
            "type": "boolean",
            "description": "When enabled, keeps Zillow's `collections` / `nearbyHomes` / `relatedHomes` / `homeRecommendations` / `homeValuation` payloads (full listings for ~10–20 nearby properties) inside each row's `details` blob. When disabled (default), these are stripped — saves 25–70% of the bytes per row, depending on what Zillow returns, with no loss of per-row property data. The `submitFlow` form template is always stripped.",
            "default": false
          },
          "flatOutput": {
            "title": "Flattened output",
            "type": "boolean",
            "description": "When enabled, each row gains a block of plain scalar columns for the most-requested facts — Listing Date, Days on Zillow, Time on Zillow, Year Built, Beds, Baths, Sq Ft, MLS ID, MLS Status, Annual Tax, Tax Assessed Value, summarized Price History and Tax History, Open House Times, New Roof, Permit History, Detail URL — and the nested `details` blob is dropped. The Agent Email column is filled only where Zillow publishes an email on the listing or `includeAgentDetails` is on; `enrichEmails` adds the agent's email in its own `contactEmail` column instead. The property payload still travels on the row as `hdpData.homeInfo`, so the row stays about the size of a default one; what changes is that the facts above arrive as plain columns.",
            "default": false
          },
          "enrichEmails": {
            "title": "Enrich with the agent's contact email (billed per email found)",
            "type": "boolean",
            "description": "If enabled, adds the listing agent's email (and phone) to each property — matched from our database of 1,200,000+ U.S. agents, ~99.9% of which have an email on file. Adds contactEmail, contactPhone and agentEmailSource columns to every property row, left empty where no match is found. Billed per email found; only charged when an email is returned, never for misses. (On an agent-profile URL it works differently: it looks for a contact email on the agent's own website when the profile links one, and otherwise discovers one from the agent or business name, and the row gets contactEmail, contactWebsite and emailEnrichment instead of that trio.)",
            "default": false
          },
          "maxItems": {
            "title": "Maximum properties",
            "type": "integer",
            "description": "Stop after this many properties. One property URL, ZPID or address is one property, but a /community/ page expands into many, so leave this comfortably above the number of inputs.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed at the same time. Values above 32 are capped at 32: the native HTTP client crashes the run beyond roughly that many parallel sockets.",
            "default": 20
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "maximum": 20,
            "type": "integer",
            "description": "How many times one Zillow request is retried before the actor gives up on it. Values above 5 have no effect — a listing request is clamped to 5 retries, because a 403 is tied to the proxy exit IP and another attempt through the same one does not clear it.",
            "default": 5
          },
          "proxy": {
            "title": "Proxy configuration (free plan only)",
            "type": "object",
            "description": "On a paid Apify plan, leave this empty — the actor routes its own traffic through a built-in residential proxy pool at no extra cost, and this field is not read. On the free plan the run goes out through Apify's default datacenter proxy, which Zillow refuses, so enter your own residential proxy URLs here, or select Apify Proxy with the RESIDENTIAL group."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}