{
  "data": {
    "id": "9UNU0GfG6ARoCoY2R",
    "actId": "MJ6qfmpk6MQzUARaD",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-10-25T15:39:36.092Z",
    "finishedAt": "2026-10-25T15:39:48.085Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11887,
      "runTimeSecs": 11.887,
      "computeUnits": 0.013207777777777778,
      "imageSizeBytes": 369127936
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Zillow Open Houses Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"locations\": {\n      \"title\": \"Locations\",\n      \"type\": \"array\",\n      \"description\": \"US locations to search, one per line: a city (\\\"Austin, TX\\\"), ZIP code (\\\"78704\\\"), or neighborhood (\\\"Hyde Park, Austin, TX\\\"). Boroughs (\\\"Brooklyn, NY\\\") and counties (\\\"Travis County, TX\\\") also resolve. Each location is resolved through Zillow's autocomplete.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"Austin, TX\"\n      ]\n    },\n    \"startUrls\": {\n      \"title\": \"Zillow search URLs\",\n      \"type\": \"array\",\n      \"description\": \"Zillow search or open-house URLs to scrape instead of, or in addition to, locations. Legacy open-house paths are converted to the filtered 1_open path and the open-house filter is applied automatically.\",\n      \"editor\": \"requestListSources\"\n    },\n    \"minPrice\": {\n      \"title\": \"Minimum price ($)\",\n      \"type\": \"integer\",\n      \"description\": \"Lower bound on the listing price. Leave blank for no minimum.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum price ($)\",\n      \"type\": \"integer\",\n      \"description\": \"Upper bound on the listing price. Leave blank for no maximum.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"bedsMin\": {\n      \"title\": \"Minimum bedrooms\",\n      \"type\": \"number\",\n      \"description\": \"Only include properties with at least this many bedrooms. Leave blank for no minimum.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 10\n    },\n    \"bedsMax\": {\n      \"title\": \"Maximum bedrooms\",\n      \"type\": \"number\",\n      \"description\": \"Only include properties with at most this many bedrooms. Leave blank for no maximum.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 10\n    },\n    \"bathsMin\": {\n      \"title\": \"Minimum bathrooms\",\n      \"type\": \"number\",\n      \"description\": \"Only include properties with at least this many bathrooms (decimals allowed, e.g. 1.5). Leave blank for no minimum.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 10\n    },\n    \"homeTypes\": {\n      \"title\": \"Home types\",\n      \"type\": \"array\",\n      \"description\": \"Limit results to specific property types. Leave empty for all types.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"singleFamily\",\n          \"condo\",\n          \"townhouse\",\n          \"multiFamily\",\n          \"apartment\",\n          \"manufactured\",\n          \"lotLand\"\n        ],\n        \"enumTitles\": [\n          \"Houses\",\n          \"Condos\",\n          \"Townhouses\",\n          \"Multi-family\",\n          \"Apartments\",\n          \"Manufactured homes\",\n          \"Lots / land\"\n        ]\n      }\n    },\n    \"dateFilter\": {\n      \"title\": \"Open-house date\",\n      \"type\": \"string\",\n      \"description\": \"Show only showings in this window. Choose Custom range to use the date fields below. Zillow has no verified server-side date filter, so this is applied to the exact showing dates after collection.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"today\",\n        \"this_weekend\",\n        \"next_weekend\",\n        \"next_7_days\",\n        \"next_30_days\",\n        \"custom\"\n      ],\n      \"enumTitles\": [\n        \"Any date\",\n        \"Today\",\n        \"This weekend\",\n        \"Next weekend\",\n        \"Next 7 days\",\n        \"Next 30 days\",\n        \"Custom range\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"dateFrom\": {\n      \"title\": \"Custom range: from (YYYY-MM-DD)\",\n      \"type\": \"string\",\n      \"description\": \"Include only showings on or after this date. Used when the date filter is Custom range (or when no preset is selected).\",\n      \"editor\": \"textfield\",\n      \"pattern\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"\n    },\n    \"dateTo\": {\n      \"title\": \"Custom range: to (YYYY-MM-DD)\",\n      \"type\": \"string\",\n      \"description\": \"Include only showings on or before this date. Used when the date filter is Custom range (or when no preset is selected).\",\n      \"editor\": \"textfield\",\n      \"pattern\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"\n    },\n    \"includeDetails\": {\n      \"title\": \"Include full property details\",\n      \"type\": \"boolean\",\n      \"description\": \"Open each listing's detail page for agent/broker, photos, description, year built, lot, HOA, and MLS. Adds one request per listing; rows still return with search-page fields when a detail page fails.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeAgentContact\": {\n      \"title\": \"Include agent contact details\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the listing agent and broker phone numbers and any published agent email found on the detail page. Off by default.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max showings\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of open-house showing rows to return across all locations and URLs (1-500). Each row is one showing.\",\n      \"editor\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 100,\n      \"prefill\": 1\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration (optional)\",\n      \"type\": \"object\",\n      \"description\": \"Optional Apify Proxy overrides. Leave empty and the actor picks the working route automatically: direct first, then Apify Proxy AUTO, then a paid unblocker/residential group only after Zillow returns a real 403/PerimeterX block.\",\n      \"editor\": \"proxy\"\n    },\n    \"timeZone\": {\n      \"title\": \"Time zone\",\n      \"type\": \"string\",\n      \"description\": \"US time zone used to interpret today/this weekend and to floor open-house dates.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"America/New_York\",\n        \"America/Chicago\",\n        \"America/Denver\",\n        \"America/Phoenix\",\n        \"America/Los_Angeles\",\n        \"America/Anchorage\",\n        \"Pacific/Honolulu\"\n      ],\n      \"enumTitles\": [\n        \"Eastern\",\n        \"Central\",\n        \"Mountain\",\n        \"Arizona\",\n        \"Pacific\",\n        \"Alaska\",\n        \"Hawaii\"\n      ],\n      \"default\": \"America/New_York\",\n      \"prefill\": \"America/New_York\"\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Zillow Upcoming Open House Finder by City or ZIP\n\nFind upcoming open houses on Zillow for a city, ZIP code, or neighborhood and get one row per scheduled showing. Each row carries the showing date, start and end time, showing type and status together with the property's price, beds, baths, square footage, lot, year built, tax value, HOA, agent/broker, MLS, photos, and a direct link to the listing.\n\nThe actor is built for the real buyer question: **what can I visit this weekend, and when?** Pick a date preset such as This weekend or Next weekend, add price/bed/bath/home-type limits, and the dataset becomes a viewing itinerary you can sort by start time.\n\n## What it returns\n\n- One dataset row per open-house showing, not one row per property\n- Exact showing `eventDate`, `startDateTime`, `endDateTime`, `openHouseType`, and `openHouseStatus`\n- Listing facts: address, city, state, ZIP, latitude/longitude, price, Zestimate, beds, baths, sqft, lot area, year built, home type, status, days on Zillow, tax-assessed value, HOA fee, price per sqft\n- Listing contact and MLS data from the property page: broker, agent, MLS ID/source, description, photo URLs\n- `nextOpenHouse` — the earliest matching showing for that property, repeated on each of its rows\n- `recordType: \"open_house\"`, `sourceUrl`, `scrapedAt`, `detailStatus`, and `dataSource` for traceability\n\nFields that Zillow does not publish or that a detail page did not return are omitted rather than emitted as null or blank. Agent/broker phone numbers and any published agent email are only included when **Include agent contact details** is enabled.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `locations` | array | `[\"Austin, TX\"]` | City (`Austin, TX`), ZIP (`78704`), neighborhood (`Hyde Park, Austin, TX`), borough (`Brooklyn, NY`), or county (`Travis County, TX`). Each is resolved through Zillow's free autocomplete. |\n| `startUrls` | array | – | Zillow search or open-house URLs. Legacy open-house paths are converted to the filtered path and the open-house filter is applied automatically. |\n| `minPrice` / `maxPrice` | integer | – | Price bounds in dollars. |\n| `bedsMin` / `bedsMax` | number | – | Bedroom bounds. |\n| `bathsMin` | number | – | Minimum bathrooms; decimals allowed. |\n| `homeTypes` | array | all | Houses, condos, townhouses, multi-family, apartments, manufactured homes, or lots/land. |\n| `dateFilter` | enum | `any` | `any`, `today`, `this_weekend`, `next_weekend`, `next_7_days`, `next_30_days`, or `custom`. |\n| `dateFrom` / `dateTo` | string | – | `YYYY-MM-DD` bounds used with `custom` (or alone when no preset is selected). |\n| `includeDetails` | boolean | `true` | Visit each property page for agent/broker, photos, description, year built, lot, HOA, and MLS. Search rows still return if a detail page fails. |\n| `includeAgentContact` | boolean | `false` | Include agent/broker phone and any published agent email. |\n| `maxItems` | integer | `100` | Maximum showing rows to return, 1–500. |\n| `proxyConfiguration` | object | – | Optional Apify Proxy override. Leave empty and the actor picks a working route automatically. |\n\nAt least one location or start URL is required.\n\n### Example: one showing in Austin (default prefill)\n\n```json\n{\n    \"locations\": [\"Austin, TX\"],\n    \"maxItems\": 1,\n    \"includeDetails\": true\n}\n```\n\n### Example: this weekend, three bedrooms or more, under $900k\n\n```json\n{\n    \"locations\": [\"Austin, TX\", \"78704\"],\n    \"dateFilter\": \"this_weekend\",\n    \"bedsMin\": 3,\n    \"maxPrice\": 900000,\n    \"includeDetails\": true,\n    \"maxItems\": 100\n}\n```\n\n### Example: a custom two-day viewing window\n\n```json\n{\n    \"locations\": [\"78704\"],\n    \"dateFilter\": \"custom\",\n    \"dateFrom\": \"2026-10-25\",\n    \"dateTo\": \"2026-10-26\",\n    \"homeTypes\": [\"singleFamily\", \"townhouse\"],\n    \"maxItems\": 50\n}\n```\n\n### Example: start from a Zillow search URL\n\n```json\n{\n    \"startUrls\": [\n        \"https://www.zillow.com/austin-tx/open-houses/\"\n    ],\n    \"maxItems\": 100\n}\n```\n\n## How it works\n\n1. Locations are resolved with Zillow's free autocomplete endpoint, then searched with the server-side open-house filter (`isOpenHousesOnly`) on Zillow's filtered open-house path.\n2. Listing cards come from the page's `__NEXT_DATA__` payload, including all showing timestamps Zillow publishes for each property.\n3. With details on, each property's page is opened once to add agent/broker, MLS, photos, description, year built, lot, HOA, and any additional showing data.\n4. Date presets and custom ranges are applied to the exact showing dates after collection. Deduplication is global across pages, locations, and URLs, keyed by property ID plus showing datetime.\n5. If a listing page is blocked but detail pages are not, list-level rows still return with `detailStatus: \"failed\"`. If Zillow blocks every route, the run fails with an explicit message instead of returning a misleading empty dataset.\n\n## Use cases\n\n- **Home buyers** — turn a weekend into a route with exact start times and addresses\n- **Buyer's agents** — show clients what is open nearby and when\n- **Listing agents** — monitor competing open houses and pricing in a farm area\n- **Market researchers** — measure open-house frequency and price bands by ZIP\n- **Investors** — find actively marketed properties with upcoming showings\n\n## FAQ\n\n**Does this need a Zillow account or login?**\nNo. It reads public Zillow search and property pages. No cookies, logins, or API keys are required.\n\n**Is this one row per property or per showing?**\nPer showing. A property with two open houses on the same weekend produces two rows. `nextOpenHouse` identifies its earliest matching showing.\n\n**What timezone are the times in?**\nZillow publishes showing times as local wall-clock time without an offset, and the actor preserves them that way. Treat `startDateTime` as the property's local time and confirm with the listing agent.\n\n**What happens if Zillow blocks the run?**\nThe actor tries direct requests first and automatically routes through Apify Proxy when it sees a real block. If every route is blocked, the run fails with a clear message — it never reports zero results as if the market were empty.\n\n**What does `detailStatus` mean?**\n`ok` means the property page was read; `failed` means it was blocked or unparseable but the row still has search-level data; `skipped` means details were off or the fetch cap was reached; `degraded` means the Jina Reader fallback supplied listing-card data only.\n\n**Why are `zestimate`, `yearBuilt`, or `taxAssessedValue` missing on some rows?**\nZillow does not publish all fields for every listing. Zestimate in particular is absent on many cards. Detail enrichment fills year built, lot, HOA, and MLS when available.\n\n**Why do some rows have no agent phone or email?**\nContact details are opt-in through **Include agent contact details** and only appear when Zillow publishes them on the property page. The actor does not guess or enrich contacts from third-party databases.\n\n**How many results can I get?**\n`maxItems` caps the run at 500 showing rows. Zillow also caps a search at about 20 pages. In dense metros, split the search by ZIP code, price band, or home type.\n\n**Which URL formats work in `startUrls`?**\nStandard Zillow search URLs and open-house URLs. Legacy `/city/open-houses/` links are normalized to the filtered open-house path. Individual `/homedetails/` property URLs are not supported.\n\n**Is this affiliated with Zillow?**\nNo. This is an independent actor that reads publicly available Zillow pages and is not operated or endorsed by Zillow. Open-house times originate from MLS feeds and can change; confirm with the listing agent before visiting.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "zillow-upcoming-open-house-finder-by-city-or-zip",
      "title": "Zillow Upcoming Open House Finder by City or ZIP",
      "description": "Find upcoming Zillow open houses by city, ZIP, or search URL. Returns one row per showing with date, start/end time, type, property price and specs, agent/broker, MLS, photos and a direct listing link.",
      "version": "2.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "input": {
        "title": "Zillow Open Houses Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "US locations to search, one per line: a city (\"Austin, TX\"), ZIP code (\"78704\"), or neighborhood (\"Hyde Park, Austin, TX\"). Boroughs (\"Brooklyn, NY\") and counties (\"Travis County, TX\") also resolve. Each location is resolved through Zillow's autocomplete.",
            "editor": "stringList",
            "prefill": [
              "Austin, TX"
            ]
          },
          "startUrls": {
            "title": "Zillow search URLs",
            "type": "array",
            "description": "Zillow search or open-house URLs to scrape instead of, or in addition to, locations. Legacy open-house paths are converted to the filtered 1_open path and the open-house filter is applied automatically.",
            "editor": "requestListSources"
          },
          "minPrice": {
            "title": "Minimum price ($)",
            "type": "integer",
            "description": "Lower bound on the listing price. Leave blank for no minimum.",
            "editor": "number",
            "minimum": 0,
            "maximum": 100000000
          },
          "maxPrice": {
            "title": "Maximum price ($)",
            "type": "integer",
            "description": "Upper bound on the listing price. Leave blank for no maximum.",
            "editor": "number",
            "minimum": 0,
            "maximum": 100000000
          },
          "bedsMin": {
            "title": "Minimum bedrooms",
            "type": "number",
            "description": "Only include properties with at least this many bedrooms. Leave blank for no minimum.",
            "editor": "number",
            "minimum": 0,
            "maximum": 10
          },
          "bedsMax": {
            "title": "Maximum bedrooms",
            "type": "number",
            "description": "Only include properties with at most this many bedrooms. Leave blank for no maximum.",
            "editor": "number",
            "minimum": 0,
            "maximum": 10
          },
          "bathsMin": {
            "title": "Minimum bathrooms",
            "type": "number",
            "description": "Only include properties with at least this many bathrooms (decimals allowed, e.g. 1.5). Leave blank for no minimum.",
            "editor": "number",
            "minimum": 0,
            "maximum": 10
          },
          "homeTypes": {
            "title": "Home types",
            "type": "array",
            "description": "Limit results to specific property types. Leave empty for all types.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "singleFamily",
                "condo",
                "townhouse",
                "multiFamily",
                "apartment",
                "manufactured",
                "lotLand"
              ],
              "enumTitles": [
                "Houses",
                "Condos",
                "Townhouses",
                "Multi-family",
                "Apartments",
                "Manufactured homes",
                "Lots / land"
              ]
            }
          },
          "dateFilter": {
            "title": "Open-house date",
            "type": "string",
            "description": "Show only showings in this window. Choose Custom range to use the date fields below. Zillow has no verified server-side date filter, so this is applied to the exact showing dates after collection.",
            "editor": "select",
            "enum": [
              "any",
              "today",
              "this_weekend",
              "next_weekend",
              "next_7_days",
              "next_30_days",
              "custom"
            ],
            "enumTitles": [
              "Any date",
              "Today",
              "This weekend",
              "Next weekend",
              "Next 7 days",
              "Next 30 days",
              "Custom range"
            ],
            "default": "any",
            "prefill": "any"
          },
          "dateFrom": {
            "title": "Custom range: from (YYYY-MM-DD)",
            "type": "string",
            "description": "Include only showings on or after this date. Used when the date filter is Custom range (or when no preset is selected).",
            "editor": "textfield",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "dateTo": {
            "title": "Custom range: to (YYYY-MM-DD)",
            "type": "string",
            "description": "Include only showings on or before this date. Used when the date filter is Custom range (or when no preset is selected).",
            "editor": "textfield",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "includeDetails": {
            "title": "Include full property details",
            "type": "boolean",
            "description": "Open each listing's detail page for agent/broker, photos, description, year built, lot, HOA, and MLS. Adds one request per listing; rows still return with search-page fields when a detail page fails.",
            "default": true,
            "prefill": true
          },
          "includeAgentContact": {
            "title": "Include agent contact details",
            "type": "boolean",
            "description": "Include the listing agent and broker phone numbers and any published agent email found on the detail page. Off by default.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max showings",
            "type": "integer",
            "description": "Maximum number of open-house showing rows to return across all locations and URLs (1-500). Each row is one showing.",
            "editor": "number",
            "minimum": 1,
            "maximum": 500,
            "default": 100,
            "prefill": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (optional)",
            "type": "object",
            "description": "Optional Apify Proxy overrides. Leave empty and the actor picks the working route automatically: direct first, then Apify Proxy AUTO, then a paid unblocker/residential group only after Zillow returns a real 403/PerimeterX block.",
            "editor": "proxy"
          },
          "timeZone": {
            "title": "Time zone",
            "type": "string",
            "description": "US time zone used to interpret today/this weekend and to floor open-house dates.",
            "editor": "select",
            "enum": [
              "America/New_York",
              "America/Chicago",
              "America/Denver",
              "America/Phoenix",
              "America/Los_Angeles",
              "America/Anchorage",
              "Pacific/Honolulu"
            ],
            "enumTitles": [
              "Eastern",
              "Central",
              "Mountain",
              "Arizona",
              "Pacific",
              "Alaska",
              "Hawaii"
            ],
            "default": "America/New_York",
            "prefill": "America/New_York"
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Zillow Upcoming Open House Finder by City or ZIP Output",
        "description": "One row per open-house showing with date, start/end time, type, status, property facts, agent/broker, MLS, photos and a link to the Zillow listing.",
        "properties": {
          "openHouses": {
            "type": "string",
            "title": "Zillow open-house showings",
            "description": "Dataset of scheduled showings, one row per event.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Zillow Open-House Showings",
          "fields": {
            "type": "object",
            "properties": {
              "recordType": {
                "type": "string",
                "description": "Always open_house; one record per scheduled showing"
              },
              "zpid": {
                "type": "integer",
                "nullable": true,
                "description": "Zillow property ID"
              },
              "sourceUrl": {
                "type": "string",
                "description": "Zillow property detail page URL"
              },
              "address": {
                "type": "string",
                "nullable": true,
                "description": "Street address"
              },
              "city": {
                "type": "string",
                "nullable": true,
                "description": "City"
              },
              "state": {
                "type": "string",
                "nullable": true,
                "description": "State abbreviation"
              },
              "zipCode": {
                "type": "string",
                "nullable": true,
                "description": "ZIP code"
              },
              "latitude": {
                "type": "number",
                "nullable": true,
                "description": "Latitude"
              },
              "longitude": {
                "type": "number",
                "nullable": true,
                "description": "Longitude"
              },
              "price": {
                "type": "number",
                "nullable": true,
                "description": "Listing price ($)"
              },
              "zestimate": {
                "type": "number",
                "nullable": true,
                "description": "Zillow estimate ($), when Zillow publishes one"
              },
              "beds": {
                "type": "number",
                "nullable": true,
                "description": "Bedrooms"
              },
              "baths": {
                "type": "number",
                "nullable": true,
                "description": "Bathrooms"
              },
              "sqft": {
                "type": "number",
                "nullable": true,
                "description": "Living area (sq ft)"
              },
              "lotAreaValue": {
                "type": "number",
                "nullable": true,
                "description": "Lot area size"
              },
              "lotAreaUnit": {
                "type": "string",
                "nullable": true,
                "description": "Lot area unit: sqft or acres"
              },
              "yearBuilt": {
                "type": "integer",
                "nullable": true,
                "description": "Year built"
              },
              "homeType": {
                "type": "string",
                "nullable": true,
                "description": "Property type (e.g. SINGLE_FAMILY)"
              },
              "status": {
                "type": "string",
                "nullable": true,
                "description": "Listing status (e.g. FOR_SALE)"
              },
              "statusText": {
                "type": "string",
                "nullable": true,
                "description": "Zillow status label (e.g. Active)"
              },
              "daysOnZillow": {
                "type": "integer",
                "nullable": true,
                "description": "Days on Zillow"
              },
              "taxAssessedValue": {
                "type": "number",
                "nullable": true,
                "description": "Tax-assessed value ($)"
              },
              "hoaFee": {
                "type": "number",
                "nullable": true,
                "description": "Monthly HOA fee ($)"
              },
              "pricePerSqft": {
                "type": "number",
                "nullable": true,
                "description": "Price per square foot ($)"
              },
              "brokerName": {
                "type": "string",
                "nullable": true,
                "description": "Listing brokerage"
              },
              "brokerPhone": {
                "type": "string",
                "nullable": true,
                "description": "Broker phone, only when Include agent contact is on"
              },
              "agentName": {
                "type": "string",
                "nullable": true,
                "description": "Listing agent name"
              },
              "agentPhone": {
                "type": "string",
                "nullable": true,
                "description": "Listing agent phone, only when Include agent contact is on"
              },
              "agentEmail": {
                "type": "string",
                "nullable": true,
                "description": "Published agent email, only when Include agent contact is on"
              },
              "mlsId": {
                "type": "string",
                "nullable": true,
                "description": "MLS listing ID"
              },
              "mlsSource": {
                "type": "string",
                "nullable": true,
                "description": "MLS source name"
              },
              "description": {
                "type": "string",
                "nullable": true,
                "description": "Listing description"
              },
              "photos": {
                "type": "array",
                "nullable": true,
                "description": "Zillow photo CDN URLs"
              },
              "photoCount": {
                "type": "integer",
                "nullable": true,
                "description": "Number of photos available"
              },
              "openHouseDescription": {
                "type": "string",
                "nullable": true,
                "description": "Zillow's short showing summary for the listing"
              },
              "eventDate": {
                "type": "string",
                "description": "Showing date (YYYY-MM-DD, property local time)"
              },
              "startDateTime": {
                "type": "string",
                "description": "Showing start (ISO 8601, property local time)"
              },
              "endDateTime": {
                "type": "string",
                "nullable": true,
                "description": "Showing end (ISO 8601, property local time)"
              },
              "openHouseType": {
                "type": "string",
                "description": "INPERSON or VIRTUAL"
              },
              "openHouseStatus": {
                "type": "string",
                "description": "Showing status: scheduled or cancelled"
              },
              "nextOpenHouse": {
                "type": "string",
                "nullable": true,
                "description": "Earliest matching showing start for this property (ISO 8601)"
              },
              "detailStatus": {
                "type": "string",
                "description": "ok, failed, skipped, or degraded"
              },
              "dataSource": {
                "type": "string",
                "description": "zillow or jina_markdown"
              },
              "scrapedAt": {
                "type": "string",
                "description": "ISO 8601 scrape timestamp"
              }
            }
          },
          "views": {
            "overview": {
              "title": "Open-House Schedule",
              "transformation": {
                "fields": [
                  "startDateTime",
                  "endDateTime",
                  "address",
                  "city",
                  "state",
                  "zipCode",
                  "price",
                  "beds",
                  "baths",
                  "sqft",
                  "homeType",
                  "agentName",
                  "openHouseType",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "startDateTime": {
                    "label": "Start",
                    "format": "text"
                  },
                  "endDateTime": {
                    "label": "End",
                    "format": "text"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "city": {
                    "label": "City",
                    "format": "text"
                  },
                  "state": {
                    "label": "State",
                    "format": "text"
                  },
                  "zipCode": {
                    "label": "ZIP",
                    "format": "text"
                  },
                  "price": {
                    "label": "Price $",
                    "format": "number"
                  },
                  "beds": {
                    "label": "Beds",
                    "format": "number"
                  },
                  "baths": {
                    "label": "Baths",
                    "format": "number"
                  },
                  "sqft": {
                    "label": "Sq Ft",
                    "format": "number"
                  },
                  "homeType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "agentName": {
                    "label": "Agent",
                    "format": "text"
                  },
                  "openHouseType": {
                    "label": "Showing type",
                    "format": "text"
                  },
                  "sourceUrl": {
                    "label": "URL",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# Zillow Upcoming Open House Finder by City or ZIP\n\nFind upcoming open houses on Zillow for a city, ZIP code, or neighborhood and get one row per scheduled showing. Each row carries the showing date, start and end time, showing type and status together with the property's price, beds, baths, square footage, lot, year built, tax value, HOA, agent/broker, MLS, photos, and a direct link to the listing.\n\nThe actor is built for the real buyer question: **what can I visit this weekend, and when?** Pick a date preset such as This weekend or Next weekend, add price/bed/bath/home-type limits, and the dataset becomes a viewing itinerary you can sort by start time.\n\n## What it returns\n\n- One dataset row per open-house showing, not one row per property\n- Exact showing `eventDate`, `startDateTime`, `endDateTime`, `openHouseType`, and `openHouseStatus`\n- Listing facts: address, city, state, ZIP, latitude/longitude, price, Zestimate, beds, baths, sqft, lot area, year built, home type, status, days on Zillow, tax-assessed value, HOA fee, price per sqft\n- Listing contact and MLS data from the property page: broker, agent, MLS ID/source, description, photo URLs\n- `nextOpenHouse` — the earliest matching showing for that property, repeated on each of its rows\n- `recordType: \"open_house\"`, `sourceUrl`, `scrapedAt`, `detailStatus`, and `dataSource` for traceability\n\nFields that Zillow does not publish or that a detail page did not return are omitted rather than emitted as null or blank. Agent/broker phone numbers and any published agent email are only included when **Include agent contact details** is enabled.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `locations` | array | `[\"Austin, TX\"]` | City (`Austin, TX`), ZIP (`78704`), neighborhood (`Hyde Park, Austin, TX`), borough (`Brooklyn, NY`), or county (`Travis County, TX`). Each is resolved through Zillow's free autocomplete. |\n| `startUrls` | array | – | Zillow search or open-house URLs. Legacy open-house paths are converted to the filtered path and the open-house filter is applied automatically. |\n| `minPrice` / `maxPrice` | integer | – | Price bounds in dollars. |\n| `bedsMin` / `bedsMax` | number | – | Bedroom bounds. |\n| `bathsMin` | number | – | Minimum bathrooms; decimals allowed. |\n| `homeTypes` | array | all | Houses, condos, townhouses, multi-family, apartments, manufactured homes, or lots/land. |\n| `dateFilter` | enum | `any` | `any`, `today`, `this_weekend`, `next_weekend`, `next_7_days`, `next_30_days`, or `custom`. |\n| `dateFrom` / `dateTo` | string | – | `YYYY-MM-DD` bounds used with `custom` (or alone when no preset is selected). |\n| `includeDetails` | boolean | `true` | Visit each property page for agent/broker, photos, description, year built, lot, HOA, and MLS. Search rows still return if a detail page fails. |\n| `includeAgentContact` | boolean | `false` | Include agent/broker phone and any published agent email. |\n| `maxItems` | integer | `100` | Maximum showing rows to return, 1–500. |\n| `proxyConfiguration` | object | – | Optional Apify Proxy override. Leave empty and the actor picks a working route automatically. |\n\nAt least one location or start URL is required.\n\n### Example: one showing in Austin (default prefill)\n\n```json\n{\n    \"locations\": [\"Austin, TX\"],\n    \"maxItems\": 1,\n    \"includeDetails\": true\n}\n```\n\n### Example: this weekend, three bedrooms or more, under $900k\n\n```json\n{\n    \"locations\": [\"Austin, TX\", \"78704\"],\n    \"dateFilter\": \"this_weekend\",\n    \"bedsMin\": 3,\n    \"maxPrice\": 900000,\n    \"includeDetails\": true,\n    \"maxItems\": 100\n}\n```\n\n### Example: a custom two-day viewing window\n\n```json\n{\n    \"locations\": [\"78704\"],\n    \"dateFilter\": \"custom\",\n    \"dateFrom\": \"2026-10-25\",\n    \"dateTo\": \"2026-10-26\",\n    \"homeTypes\": [\"singleFamily\", \"townhouse\"],\n    \"maxItems\": 50\n}\n```\n\n### Example: start from a Zillow search URL\n\n```json\n{\n    \"startUrls\": [\n        \"https://www.zillow.com/austin-tx/open-houses/\"\n    ],\n    \"maxItems\": 100\n}\n```\n\n## How it works\n\n1. Locations are resolved with Zillow's free autocomplete endpoint, then searched with the server-side open-house filter (`isOpenHousesOnly`) on Zillow's filtered open-house path.\n2. Listing cards come from the page's `__NEXT_DATA__` payload, including all showing timestamps Zillow publishes for each property.\n3. With details on, each property's page is opened once to add agent/broker, MLS, photos, description, year built, lot, HOA, and any additional showing data.\n4. Date presets and custom ranges are applied to the exact showing dates after collection. Deduplication is global across pages, locations, and URLs, keyed by property ID plus showing datetime.\n5. If a listing page is blocked but detail pages are not, list-level rows still return with `detailStatus: \"failed\"`. If Zillow blocks every route, the run fails with an explicit message instead of returning a misleading empty dataset.\n\n## Use cases\n\n- **Home buyers** — turn a weekend into a route with exact start times and addresses\n- **Buyer's agents** — show clients what is open nearby and when\n- **Listing agents** — monitor competing open houses and pricing in a farm area\n- **Market researchers** — measure open-house frequency and price bands by ZIP\n- **Investors** — find actively marketed properties with upcoming showings\n\n## FAQ\n\n**Does this need a Zillow account or login?**\nNo. It reads public Zillow search and property pages. No cookies, logins, or API keys are required.\n\n**Is this one row per property or per showing?**\nPer showing. A property with two open houses on the same weekend produces two rows. `nextOpenHouse` identifies its earliest matching showing.\n\n**What timezone are the times in?**\nZillow publishes showing times as local wall-clock time without an offset, and the actor preserves them that way. Treat `startDateTime` as the property's local time and confirm with the listing agent.\n\n**What happens if Zillow blocks the run?**\nThe actor tries direct requests first and automatically routes through Apify Proxy when it sees a real block. If every route is blocked, the run fails with a clear message — it never reports zero results as if the market were empty.\n\n**What does `detailStatus` mean?**\n`ok` means the property page was read; `failed` means it was blocked or unparseable but the row still has search-level data; `skipped` means details were off or the fetch cap was reached; `degraded` means the Jina Reader fallback supplied listing-card data only.\n\n**Why are `zestimate`, `yearBuilt`, or `taxAssessedValue` missing on some rows?**\nZillow does not publish all fields for every listing. Zestimate in particular is absent on many cards. Detail enrichment fills year built, lot, HOA, and MLS when available.\n\n**Why do some rows have no agent phone or email?**\nContact details are opt-in through **Include agent contact details** and only appear when Zillow publishes them on the property page. The actor does not guess or enrich contacts from third-party databases.\n\n**How many results can I get?**\n`maxItems` caps the run at 500 showing rows. Zillow also caps a search at about 20 pages. In dense metros, split the search by ZIP code, price band, or home type.\n\n**Which URL formats work in `startUrls`?**\nStandard Zillow search URLs and open-house URLs. Legacy `/city/open-houses/` links are normalized to the filtered open-house path. Individual `/homedetails/` property URLs are not supported.\n\n**Is this affiliated with Zillow?**\nNo. This is an independent actor that reads publicly available Zillow pages and is not operated or endorsed by Zillow. Open-house times originate from MLS feeds and can change; confirm with the listing agent before visiting.\n"
    },
    "buildNumber": "2.0.1",
    "imageDigest": "816faeb03daa7679842003f82d96d7c42856a61f7df704e503e9c1c7886b3e89",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.013207777777777778
    }
  }
}