# Zillow Scraper: Sale, Rent and Sold Property Listings (`abotapi/zillow-scraper`) Actor

Scrape zillow.com properties for sale, for rent and recently sold across the US: price, beds, baths, area, address, GPS, photos, home value and rent estimates. Optional property page read adds HOA fee, tax rate, MLS id, agent, brokerage and the fact sheet. 25 filters, or paste links.

- **URL**: https://apify.com/abotapi/zillow-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Zillow Scraper: Sale, Rent and Sold Property Listings

Pull structured property records from zillow.com across the United States: homes for sale, homes for rent and recently sold homes, in one consistent shape. Search by any US place with 25 filters, or paste links you already have. Every record carries price, beds, baths, area, full address, GPS, photos and the site's own home value and rent estimates; switch on the property page read and it also carries the description, year built, HOA fee, property tax rate, MLS id, listing agent, brokerage and the full fact sheet.

Built for people who need coverage rather than a sample: a large city holds far more homes than any single read of the site returns, so this actor covers the area by splitting it into smaller areas and reading each one, and it tells you plainly when an area still held more than the run collected.

### Why this scraper

- **Coverage past the site's own ceiling.** One read of a map area returns at most 500 records however many exist inside it. This actor splits the area into quarters and reads each, so a city with thousands of homes is genuinely covered instead of truncated at the first few hundred.
- **Honest completeness.** Every run reports whether it scanned an area end to end. A refused read, an unresolved place or a run cap all mark the scan partial, and the expiry tracking below refuses to act on a partial scan.
- **Three channels, one shape.** For sale, for rent and recently sold return the same columns, so a rental feed and a sold-comparables feed line up without post-processing.
- **25 filters that were each measured to narrow.** Price, beds, baths, area, lot size, year built, HOA fee, property type, keyword, time on market and eight feature toggles. Every one was checked against the live site and moved the result count.
- **Recurring monitoring built in.** Run the same search daily and get only what changed, marked NEW, UPDATED, REAPPEARED or EXPIRED, with the exact list of fields that moved.
- **Pay for results, not for pages.** The search-level record costs one result event. Reading each property's own page is optional and billed separately, so you never pay for detail you did not ask for.
- **No fields quietly dropped.** Agent name, phone, brokerage and MLS id are returned when the property page publishes them, rather than being silently omitted.

### Data you get

One record per property. The first block is always present; the second appears when the property page read is switched on.

| Field | Example |
| --- | --- |
| `id` / `zpid` | `"00000001"` |
| `url` | `"https://www.zillow.com/homedetails/00000001_zpid/"` |
| `listingType` | `"FOR_SALE"` |
| `homeStatus` | `"FOR_SALE"` |
| `propertyType` | `"SINGLE_FAMILY"` |
| `price` | `750000` |
| `formattedPrice` | `"$750,000"` |
| `zestimate` | `762300` |
| `rentZestimate` | `3450` |
| `taxAssessedValue` | `558793` |
| `priceChange` | `-15000` |
| `streetAddress` | `"1 Sample Street"` |
| `city` / `state` / `zipCode` | `"Austin"` / `"TX"` / `"78759"` |
| `latitude` / `longitude` | `30.4220` / `-97.7590` |
| `bedrooms` / `bathrooms` | `4` / `3` |
| `livingArea` | `2164` |
| `lotAreaValue` / `lotAreaUnit` | `9352` / `"sqft"` |
| `daysOnZillow` | `8` |
| `heroImage` / `photos` | `"https://photos.zillowstatic.com/fp/00000000-p_e.jpg"` |
| `description` | `"Single story home with a large yard..."` |
| `yearBuilt` | `1969` |
| `monthlyHoaFee` / `propertyTaxRate` | `85` / `1.46` |
| `mlsId` / `mlsName` | `"0000000"` / `"Sample MLS"` |
| `listingAgentName` / `listingAgentPhone` | `"Agent Name"` / `"(555) 010-0000"` |
| `brokerageName` | `"Sample Brokerage"` |
| `resoFacts` | `{ "parkingCapacity": 2, "propertySubType": ["Single Family Residence"] }` |

### How to use

Search one city for homes for sale:

```json
{
  "mode": "search",
  "locations": ["Austin, TX"],
  "listingType": "FOR_SALE",
  "maxItems": 200
}
```

Search several places for rentals under a price, with filters:

```json
{
  "mode": "search",
  "locations": ["Brooklyn, NY", "Jersey City, NJ"],
  "listingType": "FOR_RENT",
  "maxPrice": 3500,
  "minBeds": 2,
  "homeTypes": ["APARTMENT", "CONDO"],
  "daysOnZillow": "30_DAYS",
  "maxItems": 500
}
```

Recently sold comparables with the property page read switched on:

```json
{
  "mode": "search",
  "locations": ["78759"],
  "listingType": "SOLD",
  "daysOnZillow": "12_MONTHS",
  "fetchDetails": true,
  "maxItems": 100
}
```

Paste links you already have:

```json
{
  "mode": "url",
  "startUrls": [
    "https://www.zillow.com/homes/for_sale/Austin,-TX/",
    "https://www.zillow.com/homedetails/00000001_zpid/"
  ],
  "maxItems": 50
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` builds the search from the location and filters. `url` takes links you already have. |
| `locations` | array | `["Austin, TX"]` | Search mode only. US places written the way you would type them into the site. |
| `listingType` | string | `FOR_SALE` | Search mode only. `FOR_SALE`, `FOR_RENT` or `SOLD`. |
| `homeTypes` | array | `[]` | Search mode only. Empty means every type. |
| `minPrice` / `maxPrice` | integer | none | Search mode only. On a rental search these are the monthly rent bounds. |
| `minBeds` / `maxBeds` | integer | none | Search mode only. |
| `minBaths` | integer | none | Search mode only. |
| `minSqft` / `maxSqft` | integer | none | Search mode only. Interior area. |
| `minLotSize` / `maxLotSize` | integer | none | Search mode only. Lot area in square feet. |
| `minYearBuilt` / `maxYearBuilt` | integer | none | Search mode only. |
| `maxHoaFee` | integer | none | Search mode only. `0` returns only properties with no HOA fee. |
| `keywords` | string | none | Search mode only. Narrows to properties whose listing text mentions the word. |
| `daysOnZillow` | string | `ANY` | Search mode only. How recently the property was listed, or sold on a sold search. |
| `sortBy` | string | `RECOMMENDED` | Search mode only. Changes the order results arrive in, not which properties match. |
| `hasPool`, `hasGarage`, `hasAirConditioning`, `isWaterfront`, `singleStoryOnly`, `has3dTour`, `openHouseOnly`, `priceReducedOnly` | boolean | `false` | Search mode only. Feature toggles. |
| `startUrls` | array | none | URL mode only. Search links or property links ending in `_zpid`. |
| `fetchDetails` | boolean | `false` | Read each property's own page. Billed per enriched result. |
| `maxItems` | integer | `20` | Run cap across every location or link. `0` means unlimited. |
| `maxPages` | integer | `0` | Optional cap on search reads per location. `0` means no read limit. |
| `resumeFromRunId` | string | none | Continue one interrupted run without returning or billing for what it already collected. |
| `incrementalMode` | boolean | `false` | Return only what changed since the previous run of the same search. |
| `stateKey` | string | none | Name a monitoring campaign, or deliberately share state between runs. |
| `emitUnchanged` | boolean | `false` | Also return unchanged results. Adds and bills extra rows. |
| `emitExpired` | boolean | `false` | Also return results that disappeared. Adds and bills extra rows. |
| `proxy` | object | Apify Proxy | How the run reaches the site. |
| `mcpConnectors` | array | none | Connectors to also send results into. See the section below. |
| `notionParentPageUrl` | string | none | Notion page under which item pages are created. Notion connector only. |
| `maxNotifyListings` | integer | `50` | Cap on items written to each connector per run. Does not affect the dataset. |

### Output example

> Sample shape - values are illustrative placeholders, not from a live listing.

```json
{
  "id": "00000001",
  "zpid": "00000001",
  "url": "https://www.zillow.com/homedetails/00000001_zpid/",
  "listingType": "FOR_SALE",
  "homeStatus": "FOR_SALE",
  "statusText": "Active",
  "propertyType": "SINGLE_FAMILY",
  "price": 750000,
  "formattedPrice": "$750,000",
  "currency": "USD",
  "zestimate": 762300,
  "rentZestimate": 3450,
  "taxAssessedValue": 558793,
  "priceChange": -15000,
  "priceChangeDate": "2026-01-01",
  "streetAddress": "1 Sample Street",
  "city": "Austin",
  "state": "TX",
  "zipCode": "78759",
  "country": "USA",
  "address": "1 Sample Street, Austin, TX 78759",
  "latitude": 30.422,
  "longitude": -97.759,
  "bedrooms": 4,
  "bathrooms": 3,
  "livingArea": 2164,
  "lotAreaValue": 9352,
  "lotAreaUnit": "sqft",
  "daysOnZillow": 8,
  "brokerName": "Sample Brokerage",
  "isZillowOwned": false,
  "has3dTour": true,
  "heroImage": "https://photos.zillowstatic.com/fp/00000000-p_e.jpg",
  "photos": ["https://photos.zillowstatic.com/fp/00000000-p_e.jpg"],
  "description": "Single story home with a large yard and a covered patio.",
  "yearBuilt": 1969,
  "monthlyHoaFee": 85,
  "propertyTaxRate": 1.46,
  "pricePerSquareFoot": 254,
  "mlsId": "0000000",
  "mlsName": "Sample MLS",
  "listingAgentName": "Agent Name",
  "listingAgentPhone": "(555) 010-0000",
  "brokerageName": "Sample Brokerage",
  "resoFacts": {
    "parkingCapacity": 2,
    "propertySubType": ["Single Family Residence"]
  },
  "detailFetched": true,
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Send results into your apps (MCP connectors)

Results can be piped straight into the tools you already use, through Model Context Protocol connectors, without writing any glue.

1. Authorize a connector once under Apify, Settings, Integrations.
2. Select it in `mcpConnectors`.
3. For Notion, also set `notionParentPageUrl` to the page under which item pages should be created.
4. Use `maxNotifyListings` to cap how many items reach each connector per run. The dataset is unaffected.

Supported connectors: Notion, Linear, Airtable and Apify. Each connector receives a condensed, human-readable summary per item; the complete record always stays in the dataset.

### Resume and recurring updates

Two different things, in one input section.

**Resume** continues ONE interrupted run. Paste that run's id into `resumeFromRunId` and this run returns only what the previous one did not collect, without billing again for rows you already have.

**Incremental mode** is for running the same search over and over. Switch on `incrementalMode` and the first run returns every match as `NEW`; later runs return only `NEW`, `UPDATED` and `REAPPEARED`, each with `changedFields` listing exactly what moved, plus `firstSeenAt` and `lastSeenAt`. Counters that tick on their own, such as a property's age in days, are deliberately ignored so an unchanged property does not re-bill every day.

Switch on `emitExpired` to also receive properties that were present before and are gone now. Expiry is only reported after a run scanned the search end to end: a capped run, a resumed run, a refused read or an unresolved place all mark the scan partial, and a partial scan never marks anything expired.

State is kept separately per mode, locations or links, every filter and the property page setting, so two differently configured searches never mix. Set `stateKey` to name a campaign, or to deliberately share one.

### Notes on coverage

- Coverage is US only.
- One read of a map area returns at most 500 records regardless of how many exist there, so the actor splits a busy area into quarters and reads each. A very dense area can still hold more than the split reaches, and when that happens the run says so in its log rather than reporting a complete scan.
- Price history, tax history and school assignments are not returned. Those tables are not published on the pages this actor reads, and inventing empty columns for them would be worse than leaving them out.
- Rental results include building and community entries, which carry a price range rather than one price. They are returned with the fields the site publishes for them.

### Plan requirement

Runs on any Apify plan.

# Actor input Schema

## `mode` (type: `string`):

How to start. 'Search by location' builds the search from the location and filters below. 'Direct URLs' takes zillow.com search or property links you already have.

## `locations` (type: `array`):

Search mode only. One or more US places, written the way you would type them into the site: 'Austin, TX', 'Brooklyn, NY', '90210'. Each one is walked separately, and the run cap below is shared evenly between them.

## `listingType` (type: `string`):

Search mode only. For sale, for rent, or recently sold properties.

## `homeTypes` (type: `array`):

Search mode only. Leave empty for every type. Selecting one or more returns only those types.

## `minPrice` (type: `integer`):

Search mode only. Lowest price in USD. On a for-rent search this is the lowest monthly rent.

## `maxPrice` (type: `integer`):

Search mode only. Highest price in USD. On a for-rent search this is the highest monthly rent.

## `minBeds` (type: `integer`):

Search mode only. Fewest bedrooms.

## `maxBeds` (type: `integer`):

Search mode only. Most bedrooms.

## `minBaths` (type: `integer`):

Search mode only. Fewest bathrooms.

## `minSqft` (type: `integer`):

Search mode only. Smallest interior area in square feet.

## `maxSqft` (type: `integer`):

Search mode only. Largest interior area in square feet.

## `minLotSize` (type: `integer`):

Search mode only. Smallest lot in square feet. One acre is 43560 square feet.

## `maxLotSize` (type: `integer`):

Search mode only. Largest lot in square feet.

## `minYearBuilt` (type: `integer`):

Search mode only. Earliest year built.

## `maxYearBuilt` (type: `integer`):

Search mode only. Latest year built.

## `maxHoaFee` (type: `integer`):

Search mode only. Highest monthly HOA fee in USD. Set 0 to return only properties with no HOA fee.

## `keywords` (type: `string`):

Search mode only. Narrows to properties whose listing text mentions this word, for example pool, casita, cul-de-sac. Leave empty for no keyword filter.

## `daysOnZillow` (type: `string`):

Search mode only. How recently the property was listed. On a recently-sold search this is how recently it sold.

## `sortBy` (type: `string`):

Search mode only. Result ordering. This changes the order results arrive in, it does not change which properties match.

## `hasPool` (type: `boolean`):

Search mode only.

## `hasGarage` (type: `boolean`):

Search mode only.

## `hasAirConditioning` (type: `boolean`):

Search mode only.

## `isWaterfront` (type: `boolean`):

Search mode only.

## `singleStoryOnly` (type: `boolean`):

Search mode only.

## `has3dTour` (type: `boolean`):

Search mode only.

## `openHouseOnly` (type: `boolean`):

Search mode only.

## `priceReducedOnly` (type: `boolean`):

Search mode only.

## `startUrls` (type: `array`):

URL mode only. Paste zillow.com search links (walked automatically) or property links ending in \_zpid (returned as one record each). Multiple links supported. The filters above are ignored in this mode, because a pasted link already carries its own.

## `fetchDetails` (type: `boolean`):

Adds description, year built, HOA fee, property tax rate, MLS id and name, listing agent and brokerage, full photo gallery, parking and the property fact sheet. Costs one extra read per result and is billed per enriched result under the surcharge named in this section. Leave off for the search-level record, which already carries price, beds, baths, address, GPS, home value estimate, rent estimate and a photo.

## `maxItems` (type: `integer`):

Maximum number of results to return across every location or link. This is the run cap. Set 0 for unlimited.

## `maxPages` (type: `integer`):

Optional safety cap on how many search reads to spend on each location or link. A large area is covered by splitting it into smaller areas, so a big city needs more than one read. 0 means no read limit; the run still stops at Max results.

## `resumeFromRunId` (type: `string`):

Paste a previous run ID (or dataset ID) from this actor to continue a large crawl without returning or billing for results already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead.

## `incrementalMode` (type: `boolean`):

Turn this on for recurring monitoring. The first run returns every match as NEW. Later runs return only NEW, UPDATED and REAPPEARED results. State is kept separately per mode, locations or links, every filter and the property-page setting, so two different searches never mix. To continue one specific interrupted run instead, use Resume from a previous run above.

## `stateKey` (type: `string`):

Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key from the mode, locations or links, every filter and the property-page setting.

## `emitUnchanged` (type: `boolean`):

Off by default. Turn on to also return results that have not changed since the last run, marked UNCHANGED. This returns, and bills for, extra rows you already have, so leave it off unless you want the full snapshot every run.

## `emitExpired` (type: `boolean`):

Off by default. Turn on to also return results that were present in a previous run and are no longer found, marked EXPIRED, once a run has scanned the whole search end to end. Adds, and bills for, extra rows, so leave it off unless you need expiry tracking.

## `proxy` (type: `object`):

How this run reaches the site. The prefilled option is billed by traffic on top of the run itself; see https://apify.com/pricing for rates. You can also supply your own connection URLs instead.

## `mcpConnectors` (type: `array`):

Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (address plus key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "locations": [
    "Austin, TX"
  ],
  "listingType": "FOR_SALE",
  "homeTypes": [],
  "daysOnZillow": "ANY",
  "sortBy": "RECOMMENDED",
  "hasPool": false,
  "hasGarage": false,
  "hasAirConditioning": false,
  "isWaterfront": false,
  "singleStoryOnly": false,
  "has3dTour": false,
  "openHouseOnly": false,
  "priceReducedOnly": false,
  "startUrls": [
    "https://www.zillow.com/homes/for_sale/Austin,-TX/"
  ],
  "fetchDetails": false,
  "maxItems": 20,
  "maxPages": 0,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "locations": [
        "Austin, TX"
    ],
    "listingType": "FOR_SALE",
    "startUrls": [
        "https://www.zillow.com/homes/for_sale/Austin,-TX/"
    ],
    "fetchDetails": false,
    "maxItems": 20,
    "maxPages": 0,
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/zillow-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "locations": ["Austin, TX"],
    "listingType": "FOR_SALE",
    "startUrls": ["https://www.zillow.com/homes/for_sale/Austin,-TX/"],
    "fetchDetails": False,
    "maxItems": 20,
    "maxPages": 0,
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/zillow-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "locations": [
    "Austin, TX"
  ],
  "listingType": "FOR_SALE",
  "startUrls": [
    "https://www.zillow.com/homes/for_sale/Austin,-TX/"
  ],
  "fetchDetails": false,
  "maxItems": 20,
  "maxPages": 0,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call abotapi/zillow-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/zillow-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/73zI6vYOBAkXWHzeK/builds/opHjqmu75AqG0lrXJ/openapi.json
