# Zoopla Scraper - Property Listings, Sold Prices & Monitoring (`abotapi/zoopla-co-uk-scraper`) Actor

Scrape UK property from Zoopla: for sale, to rent and Land Registry sold prices. Search by place with filters or paste links. Optional full detail adds EPC, floor plans, tenure, price history, stations and agent phone. Incremental mode for change monitoring.

- **URL**: https://apify.com/abotapi/zoopla-co-uk-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 property 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

## Zoopla UK Property Scraper

Pull UK property data from **Zoopla** at scale: properties **for sale**, properties **to rent**, and
**Land Registry sold prices**. Search by place name with the same filters the site itself offers, or
paste Zoopla links you already have.

Turn on **Fetch full listing details** and every record also carries what only a listing's own page
shows: **EPC rating and EPC graph images, floor plan images, tenure, council tax band, service
charge, ground rent, UPRN, price history, nearest stations with distances, EV charge points, virtual
tours, brochures and the agent's phone number**.

***

### What you get

| | |
|---|---|
| **Three channels** | For sale, To rent, Sold prices (Land Registry records with UPRN, sold price and sold date) |
| **Two modes** | Search by place with filters, or paste Zoopla links |
| **Filters** | Price range, bedrooms, bathrooms, property type, radius, added-to-site window, keyword, sort order, chain free, auction, shared ownership, retirement, reduced price, include under offer, include let agreed, furnishing, rent shown per week or month, pets allowed, bills included, sold-within window |
| **Up to 80+ fields** | Listing level plus the full detail set |
| **Recurring monitoring** | Incremental mode returns only what changed since your last run |
| **Resume** | Continue an interrupted crawl without paying for rows you already have |
| **Exports** | Send results straight into Notion, Linear, Airtable or Apify via MCP connectors |

***

### Quick start

#### Search by place

```json
{
  "mode": "search",
  "locations": ["London", "Manchester"],
  "channels": ["for-sale"],
  "minPrice": 200000,
  "maxPrice": 500000,
  "minBeds": 2,
  "propertySubTypes": ["flats"],
  "includeDetails": true,
  "maxItems": 50
}
```

Places can be a city (`Manchester`), a postcode area (`SW19`), or a district written the way you
would say it (`Islington, London`).

#### Paste links

```json
{
  "mode": "url",
  "startUrls": [
    "https://www.zoopla.co.uk/for-sale/property/london/islington/",
    "https://www.zoopla.co.uk/house-prices/london/islington/",
    "https://www.zoopla.co.uk/for-sale/details/73365838/"
  ],
  "includeDetails": true
}
```

A results page returns its listings, a house-prices page returns sold records, and a single
listing link returns that one property with full detail. A page number in a pasted address is used
as the starting page.

#### Sold prices

```json
{
  "mode": "search",
  "locations": ["Islington, London"],
  "channels": ["sold"],
  "soldPeriodMonths": "12",
  "maxItems": 100
}
```

***

### Input reference

#### Mode

| Field | Description |
|---|---|
| `mode` | `search` to look places up by name, or `url` to scrape links you paste. |

#### Search mode (only read when `mode` is `search`)

| Field | Description |
|---|---|
| `locations` | One or more UK places. Each is searched on every channel you pick. |
| `channels` | Any of `for-sale`, `to-rent`, `sold`. |
| `minPrice` / `maxPrice` | Price bounds in GBP. For rentals these are read together with `priceFrequency`. |
| `minBeds` / `maxBeds` / `minBaths` | Room count bounds. |
| `propertySubTypes` | Detached, semi-detached, terraced, flats, bungalows, farms and land, park homes, offices, retail, hospitality, industrial. On the sold channel Zoopla accepts one type, so the first is used. |
| `radius` | Widen the search around the place, from `This area only` up to 40 miles. |
| `addedSince` | Last 24 hours, 3 days, 7 days or 14 days. |
| `keywords` | Free-text keyword, for example `garden`. |
| `sortBy` | Recommended, newest, highest price, lowest price, most reduced. |
| `chainFreeOnly`, `auctionOnly`, `sharedOwnershipOnly`, `retirementOnly`, `reducedPriceOnly`, `includeUnderOffer` | For-sale switches. |
| `includeLetAgreed`, `furnishedState`, `priceFrequency`, `petsAllowed`, `billsIncluded` | To-rent switches. |
| `soldPeriodMonths` | How far back to look on the sold channel. |

Filters are applied by Zoopla itself as part of the search, so the result counts you get back match
what the site shows for the same search.

#### URL mode (only read when `mode` is `url`)

| Field | Description |
|---|---|
| `startUrls` | Zoopla results pages, house-prices pages, listing pages, or bare listing ids. |

Filters from the search section are **not** applied in URL mode: whatever filters your pasted
address already carries are used exactly as pasted.

#### Output and limits (read in both modes)

| Field | Description |
|---|---|
| `includeDetails` | Add the full detail set to every record. Billed as a per-listing surcharge. No effect on the sold channel, which publishes no per-property detail. |
| `maxItems` | Cap on records for the whole run. `0` means unlimited. |
| `maxPages` | Cap on result pages per place and channel. Empty or `0` covers every result page Zoopla offers, which is at most 40 per search. |

#### Resume and recurring updates

| Field | Description |
|---|---|
| `resumeFromRunId` | Continue one interrupted run without returning or paying for rows it already collected. |
| `incrementalMode` | For scheduled runs. Later runs return only `NEW`, `UPDATED` and `REAPPEARED` records. |
| `stateKey` | Name a monitoring campaign, or deliberately share state between runs. |
| `emitUnchanged` / `emitExpired` | Off by default. Each returns, and bills, extra rows. |

***

### Output

One flat record per property. Listing-level fields are always present; the rest arrive when
`includeDetails` is on.

```json
{
  "listingId": "10000001",
  "listingType": "sale",
  "channel": "for-sale",
  "url": "https://www.zoopla.co.uk/for-sale/details/10000001/",
  "title": "2 bed terraced house for sale",
  "address": "Example Court, Sample Way, London N1",
  "price": 600000,
  "priceLabel": "£600,000",
  "currency": "GBP",
  "bedrooms": 2,
  "bathrooms": 2,
  "receptionRooms": 1,
  "propertyType": "terraced",
  "sizeSqft": 875,
  "tenure": "share_of_freehold",
  "epcRating": "C",
  "epcImages": ["https://lid.zoocdn.com/1024/768/example-epc.png"],
  "floorPlanImages": ["https://lid.zoocdn.com/1024/768/example-floorplan.jpg"],
  "councilTaxBand": "E",
  "serviceCharge": "£2,836 per year",
  "chainFree": true,
  "uprn": "0000000000",
  "postcode": "N1 1AA",
  "latitude": 51.57,
  "longitude": -0.12,
  "nearestStations": [{ "name": "Example Park", "miles": 0.3 }],
  "features": ["Two double bedrooms", "Parking", "Vaulted ceilings"],
  "priceHistory": [],
  "images": ["https://lid.zoocdn.com/1024/768/example-photo.png"],
  "branchName": "Example Estates",
  "branchPhone": "01000 000000",
  "branchUrl": "https://www.zoopla.co.uk/find-agents/branch/example-estates-1/",
  "publishedOn": "2026-09-04T10:01:22",
  "detailScraped": true,
  "scrapedAt": "2026-09-04T11:00:00Z"
}
```

> The sample above uses invented values. Real runs return the real agent, address and contact
> details published on the listing.

Sold records use the same table with a different set filled in: `uprn`, `address`, `postcode`,
`latitude`, `longitude`, `lastSoldPrice`, `lastSoldDate`, `bedrooms`, `bathrooms`,
`receptionRooms`, `propertyType`, `tenure`, `floorAreaSqM`.

#### Field groups

- **Identity** `listingId`, `uprn`, `url`, `listingType`, `channel`, `listingStatus`,
  `listingCondition`
- **Price** `price`, `priceLabel`, `priceQualifier`, `currency`, `priceDrop`,
  `rentFrequencyLabel`, `priceHistory`, `lastSoldPrice`, `lastSoldDate`
- **Property** `title`, `address`, `displayAddress`, `summaryDescription`, `description`,
  `bedrooms`, `bathrooms`, `receptionRooms`, `propertyType`, `propertySubType`, `sizeSqft`,
  `floorAreaSqM`, `tenure`, `features`, `highlights`, `tags`, `smartTags`, `buyerIncentives`
- **Compliance and costs** `epcRating`, `hasEpc`, `epcImages`, `hasFloorplan`,
  `floorPlanImages`, `councilTaxBand`, `serviceCharge`, `groundRent`, `commonholdDetails`,
  `materialInformation`, `additionalInformation`, `broadband`, `parkingInfo`, `accessibility`
- **Status flags** `chainFree`, `underOffer`, `isRetirementHome`, `isSharedOwnership`,
  `furnishedState`, `availableFrom`, `statusFlag`, `isPremium`
- **Location** `postcode`, `outcode`, `incode`, `postTownName`, `countyAreaName`, `regionName`,
  `countryCode`, `latitude`, `longitude`, `nearestStations`, `evChargingStations`
- **Media** `imageUrl`, `images`, `imageCount`, `floorPlanCount`, `videoCount`, `virtualTours`,
  `brochures`
- **Agent** `branchName`, `branchId`, `branchPhone`, `branchLettingsPhone`,
  `branchCommercialPhone`, `branchLogoUrl`, `branchUrl`, `isDeveloper`, `contactUrl`
- **Run metadata** `publishedOn`, `searchMode`, `sourceUrl`, `detailScraped`, `scrapedAt`
- **Incremental mode only** `changeType`, `changedFields`, `firstSeenAt`, `lastSeenAt`

***

### Recurring monitoring

Set `incrementalMode` to `true` and schedule the run. The first run returns everything as `NEW`.
Every later run returns only what actually changed:

| `changeType` | Meaning |
|---|---|
| `NEW` | Seen for the first time on this search. |
| `UPDATED` | Something real changed. `changedFields` names exactly what. |
| `REAPPEARED` | Came back after disappearing. |
| `UNCHANGED` | Returned only if you switch `emitUnchanged` on. |
| `EXPIRED` | Returned only if you switch `emitExpired` on, and only after a run that scanned the whole tracked search. |

Advertising placement and relative-age badges ("Just added", "Reduced today") are deliberately kept
out of change detection, so a listing is never reported as updated just because a week went by.

State is kept separately for each combination of places, channels, filters and detail setting, so
two different searches never mix. Use `stateKey` to name a campaign or to deliberately share state.

***

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

Results can be pushed straight into the tools you already use, without any glue code.

1. Authorize a connector under **Apify, Settings, API & Integrations**.
2. Select it in `mcpConnectors`.
3. For Notion, also set `notionParentPageUrl` to the page new item pages should be created under.
4. Use `maxNotifyListings` to cap how many items are written per connector per run. It does not
   affect the dataset.

Supported: Notion, Linear, Airtable and Apify. Leave `mcpConnectors` empty to skip this entirely;
it never changes the dataset output.

***

### Pricing

You are charged for what the run produces:

- **Property result** for each record returned.
- **Full listing detail** once per property, only when `includeDetails` is on **and** the listing
  page was actually read. A listing that could not be read is returned at listing level and is not
  charged the surcharge.
- **Actor start** once per run.

Turning `includeDetails` off gives a fast, cheap listing-level pull with no surcharge at all.

***

### Notes and limits

- Zoopla serves at most 40 result pages per search, about 1000 records. To go deeper, split the
  search: narrow by price band, bedroom count, property type, or search smaller places.
- Premium listings are pinned to the top of the first page whatever sort order you pick. This is
  Zoopla's own behaviour, not the actor's.
- Sold price records come from the house-prices section and have no listing page, so
  `includeDetails` does nothing for them.
- A run that cannot read any pages fails loudly with a connection message instead of quietly
  returning an empty dataset.
- Only public information published on Zoopla is collected. Use it in line with Zoopla's terms and
  applicable law, including UK GDPR where records include an agent's contact details.

# Actor input Schema

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

Choose 'search' to look up places by name and apply filters, or 'url' to scrape Zoopla links you paste, results pages, house-price pages and individual listing pages are all accepted.

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

One or more UK places, for example 'London', 'Manchester', 'SW19', or 'Islington, London' for a district inside a city. Each place is searched separately on every channel you pick below.

## `channels` (type: `array`):

Which parts of Zoopla to search. 'For sale' and 'To rent' return live listings; 'Sold prices' returns Land Registry sale records from the house-prices section (address, sold price, sold date, UPRN, tenure, floor area). Pick more than one to cover several at once.

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

Optional. Lowest price to include. For rentals this is read together with 'Rent price shown per' below.

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

Optional. Highest price to include. For rentals this is read together with 'Rent price shown per' below.

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

Optional. Only return properties with at least this many bedrooms.

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

Optional. Only return properties with at most this many bedrooms.

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

Optional. Only return properties with at least this many bathrooms.

## `propertySubTypes` (type: `array`):

Optional. Narrow to specific property types. Leave empty for every type. On the 'Sold prices' channel Zoopla accepts a single type only, so the first one you pick is used there.

## `radius` (type: `string`):

Optional. Widen the search around the place you named. 'This area only' is Zoopla's own default.

## `addedSince` (type: `string`):

Optional. Only return listings published within this window. Very useful for a daily monitoring run.

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

Optional. Free-text keyword Zoopla matches against the listing, for example 'garden', 'garage' or 'balcony'.

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

Order Zoopla returns results in. Note that paid-for premium listings are pinned to the top of the first page whatever you pick here.

## `chainFreeOnly` (type: `boolean`):

Optional, for sale only. Only return properties advertised as chain free.

## `auctionOnly` (type: `boolean`):

Optional, for sale only. Only return properties being sold at auction.

## `sharedOwnershipOnly` (type: `boolean`):

Optional, for sale only. Only return shared-ownership properties.

## `retirementOnly` (type: `boolean`):

Optional, for sale only. Only return retirement properties.

## `reducedPriceOnly` (type: `boolean`):

Optional. Only return listings whose asking price has been reduced.

## `includeUnderOffer` (type: `boolean`):

Optional, for sale only. Also return properties marked under offer or sold subject to contract, which Zoopla hides by default.

## `includeLetAgreed` (type: `boolean`):

Optional, to rent only. Also return properties marked let or let agreed, which Zoopla hides by default.

## `furnishedState` (type: `string`):

Optional, to rent only. Narrow rentals by how they are furnished.

## `priceFrequency` (type: `string`):

Optional, to rent only. Whether the minimum and maximum price above are per month or per week. Zoopla treats rents as per month unless you change this.

## `petsAllowed` (type: `boolean`):

Optional, to rent only. Only return rentals that accept pets.

## `billsIncluded` (type: `boolean`):

Optional, to rent only. Only return rentals where bills are included.

## `soldPeriodMonths` (type: `string`):

Optional, sold prices only. How far back to look for sold records.

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

Paste Zoopla addresses: a results page such as https://www.zoopla.co.uk/for-sale/property/london/islington/ , a house-prices page such as https://www.zoopla.co.uk/house-prices/london/islington/ , or a single listing such as https://www.zoopla.co.uk/for-sale/details/73365838/ . A bare numeric listing id also works. A pasted page number is honoured as the starting page.

## `includeDetails` (type: `boolean`):

Add the full detail set to every record: EPC rating and EPC graph images, floor plan images, tenure, council tax band, service charge, ground rent, UPRN, price history, full description, features, nearest stations with distances, EV charge points, virtual tours, brochures and the agent's phone number. Billed as a per-listing surcharge, so leave it off for a fast, cheap listing-level pull. It has no effect on the 'Sold prices' channel, which publishes no per-property detail.

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

Maximum number of records to return across the whole run. Use 0 for unlimited.

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

Maximum result pages to cover per place and channel. Leave empty or 0 to cover every result page Zoopla offers, which is at most 40 pages (about 1000 records) per search, the site's own limit.

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

Paste a previous run ID or dataset ID to continue a large crawl without returning, or charging for, records already collected there. For recurring monitoring of the same search use Incremental mode below instead.

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

Turn this on for daily or recurring monitoring. The first run returns everything as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. State is kept separately for each combination of places, channels, filters and detail setting; use State key to name or deliberately share a monitoring campaign. 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 search itself, so two different searches never mix state.

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

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

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

Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, never when Max results capped it or when Resume was used. This returns, and bills, extra synthetic rows.

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

Apify Proxy is required for reliable results. The standard pool is used by default. This actor never upgrades a run to a metered pool on its own, so the pool you pick here is the pool it uses.

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

Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; this never changes the dataset output. 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": [
    "London"
  ],
  "channels": [
    "for-sale"
  ],
  "radius": "0",
  "addedSince": "",
  "sortBy": "recommended",
  "chainFreeOnly": false,
  "auctionOnly": false,
  "sharedOwnershipOnly": false,
  "retirementOnly": false,
  "reducedPriceOnly": false,
  "includeUnderOffer": false,
  "includeLetAgreed": false,
  "furnishedState": "",
  "priceFrequency": "",
  "petsAllowed": false,
  "billsIncluded": false,
  "soldPeriodMonths": "all-time",
  "startUrls": [
    "https://www.zoopla.co.uk/for-sale/property/london/islington/"
  ],
  "includeDetails": false,
  "maxItems": 20,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true
  },
  "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": [
        "London"
    ],
    "channels": [
        "for-sale"
    ],
    "startUrls": [
        "https://www.zoopla.co.uk/for-sale/property/london/islington/"
    ],
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/zoopla-co-uk-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": ["London"],
    "channels": ["for-sale"],
    "startUrls": ["https://www.zoopla.co.uk/for-sale/property/london/islington/"],
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/zoopla-co-uk-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": [
    "London"
  ],
  "channels": [
    "for-sale"
  ],
  "startUrls": [
    "https://www.zoopla.co.uk/for-sale/property/london/islington/"
  ],
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/zoopla-co-uk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/zoopla-co-uk-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/irkQpv5crxCsCTc8k/builds/NsLcgxLb91CYRUEue/openapi.json
