# European Commercial Property Search - 33 Portals (`studio-amba/european-commercial-property-search`) Actor

Search 33 European commercial real-estate portals in a single run. Offices, retail, industrial, land. Unified feed with EUR prices and comparable per-m2 rates.

- **URL**: https://apify.com/studio-amba/european-commercial-property-search.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#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

## European Commercial Property Search

Search thirty-three European commercial real-estate portals in a single run. This actor queries each portal in parallel, normalizes every listing to a common schema, converts prices to EUR using live ECB rates, computes a comparable per-m2 rate where the quote allows it, and removes duplicates. Offices, retail, industrial, land, hospitality and investment property across 20 countries in one feed.

Commercial portals quote prices in wildly different units: EUR per m2 per year in France, pounds per sq ft per annum in the UK, kroner per m2 per year in Scandinavia, monthly totals in Poland and Belgium, yearly totals in Denmark, and "price on application" everywhere. This actor keeps the raw quote exactly as the portal published it and adds a normalized comparison layer on top, so an office in Manchester and an office in Warsaw can be compared on the same number.

No login. No cookies. No account.

### What it does

- Searches up to 33 European commercial-property portals at once, across 20 countries. The full list is in the table below.
- Lets you run **any subset of portals** you choose, on their own or combined with a country filter.
- **Filters by listing type (sale/rent), segment, price and surface**, applied consistently across every portal.
- Normalizes every listing to a common schema (title, listing type, segment, price, surface, location).
- Preserves each portal's raw price, currency and quote unit, converts to EUR with live European Central Bank rates, and computes a comparable `annualPricePerSqmEur` (rentals) or `pricePerSqmEur` (sales) where the quote unit is unambiguous.
- Converts sq ft, acre and hectare surfaces to m2.
- Deduplicates by listing URL.

### Portals covered

All 33 portals, with the country code to use in `countries`, the exact name to use in `portals`, which side of the market the portal serves, which segments it can filter on, the currency its listings arrive in (everything is also converted to EUR), and an example `searchQuery`. Use any city or region in the portal's own country, in its native spelling.

| Country | Portal | Website | Sale / rent | Segments | Currency | Example `searchQuery` |
|---------|--------|---------|-------------|----------|----------|----------------------|
| AT | OfficeRentInfo.at | officerentinfo.at | rent only | office | EUR | Vienna |
| AT | Willhaben Gewerbe | willhaben.at | both | office, retail, industrial, land, hospitality | EUR | Graz |
| BE | Immoweb Commercial | immoweb.be | both | office, retail, industrial, land | EUR | Gent |
| BE | OfficeRentInfo.be | officerentinfo.be | rent only | office, industrial | EUR | Brussels |
| BE | Spotto | spotto.be | both | office, retail, industrial, land, hospitality | EUR | Leuven |
| CZ | OfficeRentInfo.cz | officerentinfo.cz | rent only | office, industrial | CZK | Prague |
| DK | Ejendomstorvet | ejendomstorvet.dk | both | office, retail, industrial, land, hospitality | DKK | København |
| DK | Lokalebasen | lokalebasen.dk | both | office, retail, industrial, land | DKK | Aarhus |
| FI | Toimitilat.fi | toimitilat.fi | both | office, retail, industrial, land | EUR | Helsinki |
| FR | BureauxLocaux | bureauxlocaux.com | both | office, retail, industrial, land | EUR | Paris |
| FR | Geolocaux | geolocaux.com | both | office, retail, industrial, land | EUR | Lyon |
| FR | OfficeRentInfo.fr | officerentinfo.fr | rent only | office, industrial | EUR | Paris |
| FR | SeLoger Bureaux & Commerces | seloger.com | both | office, retail, industrial, land | EUR | Bordeaux |
| GB | LoopNet UK | loopnet.co.uk | both | no segment filter | GBP | london |
| GB | NovaLoca | novaloca.com | both | office, retail, industrial, land, hospitality | GBP | Manchester |
| GB | OfficeRentInfo.co.uk | officerentinfo.co.uk | rent only | office | GBP | London |
| GB | Rightmove Commercial | rightmove.co.uk | both | office, retail, industrial, land | GBP | London |
| GB | Zoopla Commercial | zoopla.co.uk | both | office, retail, industrial, land, hospitality | GBP | Leeds |
| GR | xe.gr Commercial | xe.gr | both | office, retail, industrial, land | EUR | Αθήνα |
| HR | OfficeRentInfo.com.hr | officerentinfo.com.hr | rent only | office | EUR | Zagreb |
| HU | OfficeRentInfo.hu | officerentinfo.hu | rent only | office, industrial | HUF | Budapest |
| IE | Commercial.ie | commercial.ie | both | office, retail, industrial, land, hospitality, investment | EUR | Dublin |
| IE | Daft Commercial | daft.ie | both | office, retail, industrial, land, hospitality, investment | EUR | Cork |
| IT | Commerciali.it | commerciali.it | both | office, retail, industrial, hospitality | EUR | Milano |
| LU | OfficeRentInfo.lu | officerentinfo.lu | rent only | office, industrial | EUR | Luxembourg |
| NL | Funda in Business | fundainbusiness.nl | both | office, retail, industrial, land, hospitality, investment | EUR | Amsterdam |
| NO | Finn Næring | finn.no | both | office, retail, industrial, hospitality | NOK | Oslo |
| PL | OfficeRentInfo.pl | officerentinfo.pl | rent only | office, industrial | EUR | Warsaw |
| PL | Otodom Commercial | otodom.pl | both | office, retail, industrial, land | PLN | Warszawa |
| RO | OfficeRentInfo.ro | officerentinfo.ro | rent only | office, industrial | EUR | Bucharest |
| RS | OfficeRentInfo.rs | officerentinfo.rs | rent only | office, industrial | EUR | Belgrade |
| SE | Objektvision | objektvision.se | both | office, retail, industrial, land | SEK | Stockholm |
| SK | OfficeRentInfo.sk | officerentinfo.sk | rent only | office, industrial | EUR | Bratislava |

Portal names in the `portals` input are matched case-insensitively, and the scraper slug works too (`"spotto-scraper"` or `"spotto"` both select Spotto; `"officerentinfo"` selects the whole OfficeRentInfo network). Rent-only portals are skipped on a `sale` run, and portals that cannot filter a requested segment are skipped on that segment's run, so a filtered run never bills you for listings from the wrong part of the market.

A few portals serve one side of the market by default when `listingType` is left empty: Rightmove Commercial, Zoopla Commercial and Daft Commercial return sale listings, and LoopNet UK, Objektvision, Commerciali.it, Willhaben Gewerbe and Otodom Commercial return rentals. Set `listingType` explicitly when you need a specific side from these portals.

Germany, Switzerland and Spain are not covered yet.

### Choosing which portals to run

Two inputs decide which portals a run queries, and they combine:

- **`portals`** picks specific sites by name, in any combination (for example `["Spotto", "Immoweb Commercial"]`). Leave it empty for all portals.
- **`countries`** restricts to portals in those countries (for example `["DK", "FI"]`).

Give both and the run uses the intersection. Give neither and it runs all 33.

### Filtering listings

| Filter | What it does |
|--------|--------------|
| `listingType` | `sale` or `rent`. Empty returns both. Translated to each portal's own filter (`for-sale`/`to-rent` on Zoopla, `transaction` on LoopNet). Rent-only portals are skipped on a `sale` run. |
| `segment` | `office`, `retail`, `industrial`, `land`, `hospitality` or `investment`. Translated to each portal's own category (`kontor` on the Danish and Swedish portals, `bureau` on Geolocaux, `uffici` on Commerciali.it, `warehouse` on Otodom). Portals without the requested segment are skipped. |
| `minPrice` / `maxPrice` | Price bounds in EUR. For sales they apply to the sale total; for rentals to the ANNUALIZED rent total (monthly quotes x12, weekly x52, per-m2 quotes x surface). A listing whose price cannot be normalized is excluded when a bound is set. |
| `minSize` / `maxSize` | Floor-area bounds in m2, enforced on the normalized surface (sq ft converted). |

### How to scrape European commercial real estate data

1. Set **Search Location** (`searchQuery`) to a city or region, for example `Dublin`. This is a location, not a keyword. Leave it empty to let each portal use its own default scope, which is the better choice when you query several countries at once.
2. Choose your coverage: pick specific sites with **Portals**, or restrict to **Countries**, or both. Leave both empty for all 33.
3. Add any **Filters** you need: listing type, segment, price range, surface range.
4. Set **Max Items Per Portal** to control how many listings are pulled from each portal.
5. Run the actor. Each portal is queried in parallel, listings are normalized, priced in EUR, filtered and deduplicated.
6. Open the dataset. Each row is one unique commercial listing with the portal it came from, the raw quote, and the comparable per-m2 rate where one could be computed.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | string | Location (city or region) passed to every selected portal. Not a keyword. Empty uses each portal's default scope. |
| `countries` | array | Optional country filter. Empty means all countries. |
| `portals` | array | Optional list of portal names to run. Empty means all portals in the selected countries. |
| `listingType` | string | `sale` or `rent`. Empty returns both. |
| `segment` | string | `office`, `retail`, `industrial`, `land`, `hospitality` or `investment`. Empty returns all segments. |
| `minPrice` / `maxPrice` | integer | Price bounds in EUR (sale totals, annualized rent totals). |
| `minSize` / `maxSize` | integer | Floor-area bounds in m2. |
| `maxItemsPerPortal` | integer | Max listings per portal (1-200, default 20). |
| `timeoutPerPortalSecs` | integer | Max seconds to wait per portal (30-600, default 120). |
| `proxyConfiguration` | object | Proxy settings passed to the underlying scrapers, geo-scoped per portal automatically. Residential is used by default and recommended. |

#### Example input

Offices for rent across Belgium:

```json
{
    "countries": ["BE"],
    "listingType": "rent",
    "segment": "office",
    "maxItemsPerPortal": 25,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

Industrial space on the two Danish portals only, up to 2,000 m2:

```json
{
    "portals": ["Ejendomstorvet", "Lokalebasen"],
    "segment": "industrial",
    "maxSize": 2000,
    "maxItemsPerPortal": 50,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Output

Each item in the dataset is one unique commercial listing:

```json
{
    "itemTitle": "Kontorlejemål i København SV",
    "listingType": "rent",
    "segment": "kontor",
    "price": 875,
    "currency": "DKK",
    "priceUnit": "kr/m2/år",
    "priceText": null,
    "priceEur": 117.25,
    "annualPricePerSqmEur": 117.25,
    "pricePerSqmEur": null,
    "surface": 452,
    "location": "København SV",
    "country": "DK",
    "url": "https://...",
    "source": "Lokalebasen",
    "imageUrl": "https://...",
    "scrapedAt": "2026-08-18T09:00:00.000Z"
}
```

| Field | Description |
|-------|-------------|
| `itemTitle` | Listing title. |
| `listingType` | Sale or rent, as the portal reports it. |
| `segment` | Commercial segment, as the portal labels it (`kontor`, `bureau`, `office`, ...). |
| `price` / `currency` / `priceUnit` / `priceText` | The raw quote exactly as the portal published it. |
| `priceEur` | The quoted number converted to EUR, still in the portal's own unit. |
| `annualPricePerSqmEur` | Comparable rent: EUR per m2 per YEAR. Computed from the quote unit (per-sq-ft x10.7639, monthly x12, weekly x52, totals divided by surface). Null when the unit is ambiguous. |
| `pricePerSqmEur` | Comparable sale price: EUR per m2. Null when it cannot be derived. |
| `surface` | Floor area in m2 (sq ft, acres and hectares converted). |
| `location` | City or address, if available. |
| `country` | ISO country code of the source portal. |
| `url` | Link to the original listing. |
| `source` | Name of the portal the listing came from. |
| `scrapedAt` | ISO 8601 timestamp. |

A final `__SUMMARY__` item lists which portals answered, which failed, the totals before and after dedup and filtering, and `comparablePriceCoverage` (the share of returned listings that carry a comparable per-m2 rate).

### Price normalization

Commercial quotes are not comparable as published. The same office floor can be quoted as EUR/m2/year in Paris, GBP per sq ft per annum in London, kr/m2/år in Stockholm, a monthly total in Warsaw, or a yearly total in Copenhagen. The actor parses each portal's quote unit and converts:

- per-sq-ft rates to per-m2 (x10.7639)
- monthly rates to annual (x12), weekly to annual (x52)
- total rents to per-m2 where the listing exposes its surface
- every currency to EUR with live ECB reference rates

The result is one number per rental (`annualPricePerSqmEur`) and one per sale (`pricePerSqmEur`) that means the same thing everywhere. When the quote unit is ambiguous (a bare "per sq ft" with no period, an Italian rent quote that mixes monthly and annual figures, a "price on application"), the comparable stays null. The raw price, currency and unit are always preserved, so nothing is lost and nothing is guessed.

"Price on application" is normal in this vertical. Expect a meaningful share of listings without a price on every portal; the summary's `comparablePriceCoverage` tells you exactly what a run yielded.

### Use cases

- Cross-border office, retail and industrial market research with one comparable rent metric.
- Rent benchmarking per m2 across European cities and countries.
- Feeding a commercial-property aggregator or dashboard with EUR-normalized listings from a chosen set of portals.
- Sourcing investment property and land across 20 markets in one query.

### Pricing and cost

This actor charges its own start fee and a small per-result fee. The portal scrapers it launches each bill their own per-result price to your account on top, exactly as if you ran them directly. The ceiling is `maxItemsPerPortal` times the number of portals you run. A run's usage cost only settles after the run reports SUCCEEDED; a mid-run reading undercounts it.

Two portals fetch detail pages for complete price data (the OfficeRentInfo network and Geolocaux), which costs one extra request per listing on those portals. This is what makes their rent figures usable and is already reflected in their per-result price.

### Notes

- This is a meta-actor. It orchestrates our individual national commercial-property scrapers and runs them in parallel.
- Field and filter coverage depends on each portal. Not every portal exposes surface or a usable quote unit. Price and size bounds are still enforced afterwards on the normalized values, so the returned set always respects them.
- `searchQuery` is a location, not a keyword. Use `segment` and the numeric filters to narrow by type.
- Residential proxies are used by default, geo-scoped to each portal's country, and give the most reliable results.

### FAQ

**Why do some listings have no `annualPricePerSqmEur`?**
Either the portal published no price ("price on application" is common in commercial property), or the quote unit was ambiguous and converting it would mean guessing. The raw `price`, `currency` and `priceUnit` are always kept, so you can apply your own rules.

**How is a UK "£32.50 per sq ft per annum" made comparable?**
Multiplied by 10.7639 to get per-m2, converted to EUR at the live ECB rate. A bare "per sq ft" without a stated period is left unconverted, because assuming a period would be a guess.

**Do I need an account or API key for any of the portals?**
No. Every portal is scraped without a login, and there is nothing to configure beyond the input fields above.

**I searched "Gent" across all portals and most returned other cities. Why?**
A city name only exists on the portals of its own country. The other portals fall back to their default scope. When you search a specific city, add its country in `countries`.

**Can I run just one portal?**
Yes. Set `portals` to one name from the table, for example `["Objektvision"]`. The run then behaves like that single scraper, plus EUR conversion, the normalized schema and the comparable per-m2 rate.

**Why is a portal listed under `portalsFailed` in the summary?**
It was blocked, timed out, or returned nothing usable for your query. The other portals are unaffected and the run still succeeds. A rerun usually recovers it; for slow portals, raise `timeoutPerPortalSecs`.

**Why was a portal skipped from my run entirely?**
Either it only serves one side of the market (the OfficeRentInfo network is rent-only) and you filtered for the other, or it cannot filter the segment you asked for (LoopNet UK has no segment filter at all). Skipping avoids billing you for listings you did not ask for.

**How much does a run cost?**
A start fee plus a small per-result fee for this actor, plus each portal scraper's own per-result price for the listings it returns. The ceiling is `maxItemsPerPortal` times the number of portals you run. The cost settles once the run has finished successfully.

**How fresh is the data?**
Every run scrapes the portals live. Nothing is served from a cached index.

**Why is there no portal for Germany or Spain?**
Their national commercial portals need credentials the meta cannot supply on your account. The table above is the current coverage; it grows as portals become callable credential-free.

# Actor input Schema

## `searchQuery` (type: `string`):

Location (city or region) passed to every selected portal. Leave empty to use each portal's default scope (recommended when searching multiple countries — a city name only matches its own country).

## `countries` (type: `array`):

Filter which countries to include. Leave empty for all (AT, BE, CZ, DK, FI, FR, GB, GR, HR, HU, IE, IT, LU, NL, NO, PL, RO, RS, SE, SK).

## `portals` (type: `array`):

Pick a specific subset of portals by name. Leave empty for all portals in the selected countries. Combines with Countries: both narrow the set. Available: BureauxLocaux, Commercial.ie, Commerciali.it, Daft Commercial, Ejendomstorvet, Finn Næring, Funda in Business, Geolocaux, Immoweb Commercial, Lokalebasen, LoopNet UK, NovaLoca, Objektvision, OfficeRentInfo.at, OfficeRentInfo.be, OfficeRentInfo.co.uk, OfficeRentInfo.com.hr, OfficeRentInfo.cz, OfficeRentInfo.fr, OfficeRentInfo.hu, OfficeRentInfo.lu, OfficeRentInfo.pl, OfficeRentInfo.ro, OfficeRentInfo.rs, OfficeRentInfo.sk, Otodom Commercial, Rightmove Commercial, SeLoger Bureaux & Commerces, Spotto, Toimitilat.fi, Willhaben Gewerbe, xe.gr Commercial, Zoopla Commercial. The scraper slug works too (e.g. 'spotto-scraper' or 'spotto').

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

Narrow to for-sale or to-rent listings. Translated to each portal's own filter; rent-only portals (the OfficeRentInfo network) are skipped on a sale run. Leave empty for both.

## `segment` (type: `string`):

Commercial segment, translated to each portal's own category filter (kontor, bureau, uffici, ...). Portals that do not carry or cannot filter the requested segment are skipped for that run. Leave empty for all segments.

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

Lower price bound in EUR. For sales this applies to the sale total; for rentals to the ANNUALIZED rent total. Listings whose price cannot be normalized are excluded when a bound is set.

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

Upper price bound in EUR. For sales this applies to the sale total; for rentals to the ANNUALIZED rent total. Listings whose price cannot be normalized are excluded when a bound is set.

## `minSize` (type: `integer`):

Minimum floor area in m², enforced on the normalized surface (sq ft converted).

## `maxSize` (type: `integer`):

Maximum floor area in m², enforced on the normalized surface (sq ft converted).

## `maxItemsPerPortal` (type: `integer`):

Maximum items to fetch from each portal. The run's cost ceiling is this number times the number of portals queried.

## `timeoutPerPortalSecs` (type: `integer`):

Maximum seconds to wait for each portal scraper.

## `proxyConfiguration` (type: `object`):

Proxy settings passed to the underlying scrapers, geo-scoped to each portal's country automatically. Residential recommended.

## Actor input object example

```json
{
  "countries": [
    "DK",
    "IE"
  ],
  "listingType": "",
  "segment": "",
  "maxItemsPerPortal": 5,
  "timeoutPerPortalSecs": 120,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "countries": [
        "DK",
        "IE"
    ],
    "maxItemsPerPortal": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/european-commercial-property-search").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 = {
    "countries": [
        "DK",
        "IE",
    ],
    "maxItemsPerPortal": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/european-commercial-property-search").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 '{
  "countries": [
    "DK",
    "IE"
  ],
  "maxItemsPerPortal": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/european-commercial-property-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/european-commercial-property-search"
        }
    }
}

```

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/3KOKCZnkztDsV2nyA/builds/iAMH3lqMCP4WOlfIy/openapi.json
