Zillow Upcoming Open House Finder by City or ZIP
Find upcoming Zillow open houses by city, ZIP, or search URL, with showing start and end times plus property price, beds/baths, square footage and location.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
locations | array | optional | 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. |
startUrls | array | optional | 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. |
minPrice | integer | optional | Lower bound on the listing price. Leave blank for no minimum. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
locations | array | optional | 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. |
startUrls | array | optional | 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. |
minPrice | integer | optional | Lower bound on the listing price. Leave blank for no minimum. |
maxPrice | integer | optional | Upper bound on the listing price. Leave blank for no maximum. |
bedsMin | number | optional | Only include properties with at least this many bedrooms. Leave blank for no minimum. |
bedsMax | number | optional | Only include properties with at most this many bedrooms. Leave blank for no maximum. |
bathsMin | number | optional | Only include properties with at least this many bathrooms (decimals allowed, e.g. 1.5). Leave blank for no minimum. |
homeTypes | array | optional | Limit results to specific property types. Leave empty for all types. |
dateFilter | string | optional | 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. |
dateFrom | string | optional | Include only showings on or after this date. Used when the date filter is Custom range (or when no preset is selected). |
dateTo | string | optional | Include only showings on or before this date. Used when the date filter is Custom range (or when no preset is selected). |
includeDetails | boolean | optional | 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. |
includeAgentContact | boolean | optional | Include the listing agent and broker phone numbers and any published agent email found on the detail page. Off by default. |
maxItems | integer | optional | Maximum number of open-house showing rows to return across all locations and URLs (1-500). Each row is one showing. |
proxyConfiguration | object | optional | 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. |
timeZone | string | optional | US time zone used to interpret today/this weekend and to floor open-house dates. |
Download the published input schema
View complete JSON
{
"properties": {
"bathsMin": {
"description": "Only include properties with at least this many bathrooms (decimals allowed, e.g. 1.5). Leave blank for no minimum.",
"editor": "number",
"maximum": 10,
"minimum": 0,
"title": "Minimum bathrooms",
"type": "number"
},
"bedsMax": {
"description": "Only include properties with at most this many bedrooms. Leave blank for no maximum.",
"editor": "number",
"maximum": 10,
"minimum": 0,
"title": "Maximum bedrooms",
"type": "number"
},
"bedsMin": {
"description": "Only include properties with at least this many bedrooms. Leave blank for no minimum.",
"editor": "number",
"maximum": 10,
"minimum": 0,
"title": "Minimum bedrooms",
"type": "number"
},
"dateFilter": {
"default": "any",
"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"
],
"prefill": "any",
"title": "Open-house date",
"type": "string"
},
"dateFrom": {
"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}$",
"title": "Custom range: from (YYYY-MM-DD)",
"type": "string"
},
"dateTo": {
"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}$",
"title": "Custom range: to (YYYY-MM-DD)",
"type": "string"
},
"homeTypes": {
"description": "Limit results to specific property types. Leave empty for all types.",
"editor": "select",
"items": {
"enum": [
"singleFamily",
"condo",
"townhouse",
"multiFamily",
"apartment",
"manufactured",
"lotLand"
],
"enumTitles": [
"Houses",
"Condos",
"Townhouses",
"Multi-family",
"Apartments",
"Manufactured homes",
"Lots / land"
],
"type": "string"
},
"title": "Home types",
"type": "array"
},
"includeAgentContact": {
"default": false,
"description": "Include the listing agent and broker phone numbers and any published agent email found on the detail page. Off by default.",
"prefill": false,
"title": "Include agent contact details",
"type": "boolean"
},
"includeDetails": {
"default": true,
"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.",
"prefill": true,
"title": "Include full property details",
"type": "boolean"
},
"locations": {
"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"
],
"title": "Locations",
"type": "array"
},
"maxItems": {
"default": 100,
"description": "Maximum number of open-house showing rows to return across all locations and URLs (1-500). Each row is one showing.",
"editor": "number",
"maximum": 500,
"minimum": 1,
"prefill": 1,
"title": "Max showings",
"type": "integer"
},
"maxPrice": {
"description": "Upper bound on the listing price. Leave blank for no maximum.",
"editor": "number",
"maximum": 100000000,
"minimum": 0,
"title": "Maximum price ($)",
"type": "integer"
},
"minPrice": {
"description": "Lower bound on the listing price. Leave blank for no minimum.",
"editor": "number",
"maximum": 100000000,
"minimum": 0,
"title": "Minimum price ($)",
"type": "integer"
},
"proxyConfiguration": {
"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",
"title": "Proxy configuration (optional)",
"type": "object"
},
"startUrls": {
"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",
"title": "Zillow search URLs",
"type": "array"
},
"timeZone": {
"default": "America/New_York",
"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"
],
"prefill": "America/New_York",
"title": "Time zone",
"type": "string"
}
},
"required": [],
"schemaVersion": 1,
"title": "Zillow Open Houses Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
openHouses | string | optional | Dataset of scheduled showings, one row per event. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"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": {
"description": "Dataset of scheduled showings, one row per event.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Zillow open-house showings",
"type": "string"
}
},
"title": "Zillow Upcoming Open House Finder by City or ZIP Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"fields": {
"properties": {
"address": {
"description": "Street address",
"nullable": true,
"type": "string"
},
"agentEmail": {
"description": "Published agent email, only when Include agent contact is on",
"nullable": true,
"type": "string"
},
"agentName": {
"description": "Listing agent name",
"nullable": true,
"type": "string"
},
"agentPhone": {
"description": "Listing agent phone, only when Include agent contact is on",
"nullable": true,
"type": "string"
},
"baths": {
"description": "Bathrooms",
"nullable": true,
"type": "number"
},
"beds": {
"description": "Bedrooms",
"nullable": true,
"type": "number"
},
"brokerName": {
"description": "Listing brokerage",
"nullable": true,
"type": "string"
},
"brokerPhone": {
"description": "Broker phone, only when Include agent contact is on",
"nullable": true,
"type": "string"
},
"city": {
"description": "City",
"nullable": true,
"type": "string"
},
"dataSource": {
"description": "zillow or jina_markdown",
"type": "string"
},
"daysOnZillow": {
"description": "Days on Zillow",
"nullable": true,
"type": "integer"
},
"description": {
"description": "Listing description",
"nullable": true,
"type": "string"
},
"detailStatus": {
"description": "ok, failed, skipped, or degraded",
"type": "string"
},
"endDateTime": {
"description": "Showing end (ISO 8601, property local time)",
"nullable": true,
"type": "string"
},
"eventDate": {
"description": "Showing date (YYYY-MM-DD, property local time)",
"type": "string"
},
"hoaFee": {
"description": "Monthly HOA fee ($)",
"nullable": true,
"type": "number"
},
"homeType": {
"description": "Property type (e.g. SINGLE_FAMILY)",
"nullable": true,
"type": "string"
},
"latitude": {
"description": "Latitude",
"nullable": true,
"type": "number"
},
"longitude": {
"description": "Longitude",
"nullable": true,
"type": "number"
},
"lotAreaUnit": {
"description": "Lot area unit: sqft or acres",
"nullable": true,
"type": "string"
},
"lotAreaValue": {
"description": "Lot area size",
"nullable": true,
"type": "number"
},
"mlsId": {
"description": "MLS listing ID",
"nullable": true,
"type": "string"
},
"mlsSource": {
"description": "MLS source name",
"nullable": true,
"type": "string"
},
"nextOpenHouse": {
"description": "Earliest matching showing start for this property (ISO 8601)",
"nullable": true,
"type": "string"
},
"openHouseDescription": {
"description": "Zillow's short showing summary for the listing",
"nullable": true,
"type": "string"
},
"openHouseStatus": {
"description": "Showing status: scheduled or cancelled",
"type": "string"
},
"openHouseType": {
"description": "INPERSON or VIRTUAL",
"type": "string"
},
"photoCount": {
"description": "Number of photos available",
"nullable": true,
"type": "integer"
},
"photos": {
"description": "Zillow photo CDN URLs",
"nullable": true,
"type": "array"
},
"price": {
"description": "Listing price ($)",
"nullable": true,
"type": "number"
},
"pricePerSqft": {
"description": "Price per square foot ($)",
"nullable": true,
"type": "number"
},
"recordType": {
"description": "Always open_house; one record per scheduled showing",
"type": "string"
},
"scrapedAt": {
"description": "ISO 8601 scrape timestamp",
"type": "string"
},
"sourceUrl": {
"description": "Zillow property detail page URL",
"type": "string"
},
"sqft": {
"description": "Living area (sq ft)",
"nullable": true,
"type": "number"
},
"startDateTime": {
"description": "Showing start (ISO 8601, property local time)",
"type": "string"
},
"state": {
"description": "State abbreviation",
"nullable": true,
"type": "string"
},
"status": {
"description": "Listing status (e.g. FOR_SALE)",
"nullable": true,
"type": "string"
},
"statusText": {
"description": "Zillow status label (e.g. Active)",
"nullable": true,
"type": "string"
},
"taxAssessedValue": {
"description": "Tax-assessed value ($)",
"nullable": true,
"type": "number"
},
"yearBuilt": {
"description": "Year built",
"nullable": true,
"type": "integer"
},
"zestimate": {
"description": "Zillow estimate ($), when Zillow publishes one",
"nullable": true,
"type": "number"
},
"zipCode": {
"description": "ZIP code",
"nullable": true,
"type": "string"
},
"zpid": {
"description": "Zillow property ID",
"nullable": true,
"type": "integer"
}
},
"type": "object"
},
"title": "Zillow Open-House Showings",
"views": {
"overview": {
"display": {
"component": "table",
"properties": {
"address": {
"format": "text",
"label": "Address"
},
"agentName": {
"format": "text",
"label": "Agent"
},
"baths": {
"format": "number",
"label": "Baths"
},
"beds": {
"format": "number",
"label": "Beds"
},
"city": {
"format": "text",
"label": "City"
},
"endDateTime": {
"format": "text",
"label": "End"
},
"homeType": {
"format": "text",
"label": "Type"
},
"openHouseType": {
"format": "text",
"label": "Showing type"
},
"price": {
"format": "number",
"label": "Price $"
},
"scrapedAt": {
"format": "text",
"label": "Scraped At"
},
"sourceUrl": {
"format": "link",
"label": "URL"
},
"sqft": {
"format": "number",
"label": "Sq Ft"
},
"startDateTime": {
"format": "text",
"label": "Start"
},
"state": {
"format": "text",
"label": "State"
},
"zipCode": {
"format": "text",
"label": "ZIP"
}
}
},
"title": "Open-House Schedule",
"transformation": {
"fields": [
"startDateTime",
"endDateTime",
"address",
"city",
"state",
"zipCode",
"price",
"beds",
"baths",
"sqft",
"homeType",
"agentName",
"openHouseType",
"sourceUrl",
"scrapedAt"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Zillow Upcoming Open House Finder by City or ZIP
Find 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.
The 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.
What it returns
- One dataset row per open-house showing, not one row per property
- Exact showing
eventDate,startDateTime,endDateTime,openHouseType, andopenHouseStatus - 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
- Listing contact and MLS data from the property page: broker, agent, MLS ID/source, description, photo URLs
nextOpenHouse— the earliest matching showing for that property, repeated on each of its rowsrecordType: "open_house",sourceUrl,scrapedAt,detailStatus, anddataSourcefor traceability
Fields 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.
Input
| Field | Type | Default | Description |
|---|---|---|---|
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. |
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. |
minPrice / maxPrice |
integer | – | Price bounds in dollars. |
bedsMin / bedsMax |
number | – | Bedroom bounds. |
bathsMin |
number | – | Minimum bathrooms; decimals allowed. |
homeTypes |
array | all | Houses, condos, townhouses, multi-family, apartments, manufactured homes, or lots/land. |
dateFilter |
enum | any |
any, today, this_weekend, next_weekend, next_7_days, next_30_days, or custom. |
dateFrom / dateTo |
string | – | YYYY-MM-DD bounds used with custom (or alone when no preset is selected). |
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. |
includeAgentContact |
boolean | false |
Include agent/broker phone and any published agent email. |
maxItems |
integer | 100 |
Maximum showing rows to return, 1–500. |
proxyConfiguration |
object | – | Optional Apify Proxy override. Leave empty and the actor picks a working route automatically. |
At least one location or start URL is required.
Example: one showing in Austin (default prefill)
{
"locations": ["Austin, TX"],
"maxItems": 1,
"includeDetails": true
}
Example: this weekend, three bedrooms or more, under $900k
{
"locations": ["Austin, TX", "78704"],
"dateFilter": "this_weekend",
"bedsMin": 3,
"maxPrice": 900000,
"includeDetails": true,
"maxItems": 100
}
Example: a custom two-day viewing window
{
"locations": ["78704"],
"dateFilter": "custom",
"dateFrom": "2026-10-25",
"dateTo": "2026-10-26",
"homeTypes": ["singleFamily", "townhouse"],
"maxItems": 50
}
Example: start from a Zillow search URL
{
"startUrls": [
"https://www.zillow.com/austin-tx/open-houses/"
],
"maxItems": 100
}
How it works
- 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. - Listing cards come from the page's
__NEXT_DATA__payload, including all showing timestamps Zillow publishes for each property. - 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.
- 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.
- 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.
Use cases
- Home buyers — turn a weekend into a route with exact start times and addresses
- Buyer's agents — show clients what is open nearby and when
- Listing agents — monitor competing open houses and pricing in a farm area
- Market researchers — measure open-house frequency and price bands by ZIP
- Investors — find actively marketed properties with upcoming showings
FAQ
Does this need a Zillow account or login? No. It reads public Zillow search and property pages. No cookies, logins, or API keys are required.
Is this one row per property or per showing?
Per showing. A property with two open houses on the same weekend produces two rows. nextOpenHouse identifies its earliest matching showing.
What timezone are the times in?
Zillow 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.
What happens if Zillow blocks the run? The 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.
What does detailStatus mean?
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.
Why are zestimate, yearBuilt, or taxAssessedValue missing on some rows?
Zillow 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.
Why do some rows have no agent phone or email? Contact 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.
How many results can I get?
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.
Which URL formats work in startUrls?
Standard 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.
Is this affiliated with Zillow? No. 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.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build 9UNU0GfG6ARoCoY2R. Documentation is regenerated from the default published build; private drafts are not included.