# Fotocasa Property \[$0.99] Scraper · Spain Real Estate Listings (`memo23/fotocasa-scraper`) Actor

Scraper de Fotocasa.es: extrae anuncios desde cualquier URL de búsqueda. Precio, m², habitaciones, baños, planta, certificado energético, tipo de inmueble, características, fotos etiquetadas por estancia, coordenadas y anunciante con teléfono. 133 campos, exporta a JSON, CSV o Excel.

- **URL**: https://apify.com/memo23/fotocasa-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, AI, Agents
- **Stats:** 51 total users, 13 monthly users, 99.6% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.99 / 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.

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

## Fotocasa Property Scraper

<details>
<summary><strong>Versión en español</strong></summary>

Extrae anuncios de Fotocasa.es a partir de cualquier URL de búsqueda. Sin navegador y sin inicio de sesión: pegas la URL y recibes filas estructuradas.

**Cómo se usa**

Abre Fotocasa, aplica los filtros que necesites (provincia, precio, habitaciones, superficie), copia la URL de la barra de direcciones y pégala en `startUrls`.

**Qué obtienes**

133 campos por anuncio: precio, m², habitaciones, baños, planta, certificado energético, tipo y subtipo de inmueble, características, fotos etiquetadas por estancia, coordenadas con su precisión, jerarquía geográfica completa y los datos del anunciante con teléfono.

**Plan gratuito**

Con una cuenta gratuita de Apify obtienes hasta 100 resultados por ejecución, sin pagar nada. Los planes de pago quitan el límite: [precios de Apify](https://apify.com/pricing).

Dudas o campos que falten: abre una issue en la página del actor.

</details>

Scrape property listings from **Fotocasa.es** — Spain's major real-estate portal. Paste any buy or rent search URL and get clean, structured rows: price, property type, rooms, bathrooms, surface (m²), full address, GPS coordinates, photos, agency, features and listing date. One row per property. Pure HTTP, no browser.

![How it works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-fotocasa.png)

### Why use this scraper

- **Everything on the listing page** — price, m², rooms, coordinates, photos and agency all come from one fetch; no slow per-property crawling.
- **Buy *and* rent** — works on any `comprar` or `alquiler` search, with all your on-site filters honoured and paginated automatically.
- **Clean, flat output** — one row per property; nested address/features flattened for CSV by default.
- **Pure HTTP, no browser** — fast and cheap; no Playwright, no headless Chrome.
- **Optional agency email enrichment** — discover the listing agency's website and harvest a contact email (opt-in, billed only on a hit).

### What it does

Give it one or more Fotocasa **search/listing** URLs. For each, it reads the live results and emits one dataset row per property with all the fields below. Searches paginate automatically until you hit `Maximum items`.

### Search without a URL

You do not need to open fotocasa.es. Leave **Start URLs** empty and describe the search instead:

| Filter | Values |
|---|---|
| `location` | City or area, e.g. `Madrid`, `Málaga`, `Barcelona`. Provincial capitals and bilingual names are resolved for you (`Madrid` becomes `madrid-capital`, `San Sebastián` becomes `donostia-san-sebastian`). |
| `operation` | `comprar` (for sale) or `alquiler` (for rent) |
| `propertyType` | `viviendas`, `casas`, `pisos`, `atico`, `duplex`, `estudio`, `garajes`, `oficinas`, `locales`, `naves`, `terrenos`, `trasteros`, `edificios` |
| `rooms` | 1 to 4 |
| `feature` | `terraza`, `ascensor`, `piscina`, `jardin`, `obra-nueva`, `amueblado`, `no-amueblado`, `con-chimenea`, `con-vistas-al-mar`, `a-reformar`, `reformado`, `lujo`, `banco`, `chollo` |
| `publishedLast48h` | only listings published in the last 48 hours |
| `sortBy` | `relevance`, `newest`, `cheapest`, `most-expensive`, `largest`, `smallest`, `cheapest-per-m2` |
| `minPrice` / `maxPrice` | in euros |
| `minSurface` / `maxSurface` | in m² |

**Start URLs win.** Give one and every filter above is ignored, because a pasted URL is a more precise statement of what you want than a set of filters.

**Fotocasa allows only one of `rooms`, `feature` and `publishedLast48h` per search.** Setting two stops the run with an explanatory message rather than returning a silently wrong result. To combine them, build the search on fotocasa.es and paste that URL instead.

Radius search around a coordinate is not offered: Fotocasa ignores latitude/longitude parameters on its search pages, so such an input would do nothing.

### Supported inputs

| Input | Example |
|---|---|
| Buy search | `fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l` |
| Rent search | `fotocasa.es/es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l` |
| Filtered search | run any search on fotocasa.es, copy the URL from the address bar |

### Use cases

- **Real-estate market & price research** across Spanish cities and zones.
- **Lead generation** — agency names, listing URLs (optional contact emails).
- **Investment analysis** — €/m², price distribution, new-build vs resale.
- **Aggregation & portals** — pull fresh listings into your own product.

### How it works

1. You paste Fotocasa search URLs.
2. The actor reads each listing page's embedded property data and paginates through results.
3. Each property is normalised into one flat row and pushed to the dataset.

### Input configuration

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Fotocasa **search** URLs (auto-paginated). |
| `maxItems` | integer | Hard cap on properties collected. Default 10000. |
| `fetchDetails` | boolean | Opt-in: open each property's detail page for **energy certificate** (A–G), **exact street**, **construction type**, **ground surface**, **quality rating**, **rent price index** and a **decoded feature list**. +1 request/property, billed per `additional-data` event. Default off. |
| `flatten` | boolean | Flatten nested objects/arrays into CSV columns (default on). |
| `enrichEmails` | boolean | Opt-in agency contact-email enrichment (billed per email found). |
| `maxConcurrency` | integer | Parallel row processing (mainly for enrichment). Default 8. |
| `proxy` | object | Proxy config. Defaults to Apify Residential. |

### Output sample

```json
{
  "portal": "fotocasa",
  "id": "190021901",
  "url": "https://www.fotocasa.es/es/comprar/vivienda/madrid-capital/aire-acondicionado-calefaccion-ascensor-amueblado/190021901/d",
  "transactionType": "buy",
  "propertyType": "Flat",
  "propertySubtype": "Flat",
  "title": "Hay oportunidades que aparecen muy pocas veces en el mercado, y esta es una de ellas.",
  "description": "Hay oportunidades que aparecen muy pocas veces en el mercado, y esta es una de ellas.\n\nEngel & Völkers presenta en ex...",
  "price": "350.000 €",
  "rawPrice": 350000,
  "pricePerSqm": 11290,
  "reducedPrice": 0,
  "rooms": 1,
  "bathrooms": 1,
  "surface": 31,
  "floor": "6",
  "address_street": null,
  "address_neighborhood": "Goya",
  "address_district": "Barrio de Salamanca",
  "address_cityZone": null,
  "address_upperLevel": "Goya",
  "address_city": "Madrid",
  "address_municipality": "Madrid",
  "address_county": "Madrid, Zona de",
  "address_province": "Madrid",
  "address_regionLevel1": "Madrid",
  "address_regionLevel2": "Madrid",
  "address_zipCode": "28001",
  "address_country": "España",
  "location": "Calle de Jorge Juan, Goya",
  "latitude": 40.423670774665496,
  "longitude": -3.679176002780123,
  "coordinatesAccuracy": 0,
  "photos": [
    "https://static.fotocasa.es/images/ads/e6bebfa3-f5d9-46f3-a679-41f9add19f4c?rule=original",
    "https://static.fotocasa.es/images/ads/ba9937ea-e257-49c5-8053-0c7ab5b82b50?rule=original"
  ],
  "photosDetailed_json": "[{\"url\":\"https://static.fotocasa.es/images/ads/e6bebfa3-f5d9-46f3-a679-41f9add19f4c?rule=original\",\"roomType\":\"living...",
  "photoCount": 27,
  "videoUrls": [],
  "virtualTourUrl": null,
  "floorPlanUrls": [],
  "hasVideo": null,
  "hasVirtualTour": false,
  "hasFloorPlans": false,
  "amenities_parking": false,
  "amenities_terrace": false,
  "amenities_balcony": false,
  "amenities_elevator": true,
  "amenities_airConditioning": true,
  "amenities_heating": true,
  "amenities_furnished": true,
  "amenities_storageRoom": false,
  "amenities_swimmingPool": false,
  "amenities_garden": false,
  "amenities_communityZone": false,
  "amenities_porter": false,
  "amenities_wardrobes": true,
  "amenities_internet": false,
  "isNewConstruction": false,
  "isNew": false,
  "isOpportunity": false,
  "isRentedWithTenants": false,
  "isAuctioned": false,
  "dynamicFeatures": [
    "IS_EXTERIOR",
    "IS_MODERN"
  ],
  "minPrice": 0,
  "promotionTitle": null,
  "promotionUrl": null,
  "promotionLogo": "https://static.fotocasa.es/images/client/01336661-942a-46d2-997a-1f511a6696d0/20250519082212?rule=original",
  "agency": "ENGEL & VÖLKERS MADRID",
  "agencyId": "9202765062251",
  "agencyType": "professional",
  "agencyUrl": "https://www.fotocasa.es/es/inmobiliaria-engel-volkers-madrid/comprar/viviendas/espana/todas-las-zonas/l?clientId=9202...",
  "publisherId": "01336661-942a-46d2-997a-1f511a6696d0",
  "phone": "+34912774500",
  "externalContactUrl": null,
  "realEstateAdId": "bfca9618-6e77-42e3-8ac9-dec3300f88da",
  "typeId": 2,
  "subtypeId": 1,
  "transactionTypeId": 1,
  "periodicityId": 0,
  "flags_hasListLogo": true,
  "flags_hasPhoneVisibility": true,
  "flags_hasSubsidies": true,
  "flags_hasQualitySeal": false,
  "flags_hasFloorPlans": false,
  "flags_isBareOwnership": false,
  "flags_isDiscarded": false,
  "flags_isExternalContact": false,
  "flags_isHighlighted": false,
  "flags_isMainTypology": false,
  "flags_isNew": false,
  "flags_isNewConstruction": false,
  "flags_isOccupied": false,
  "flags_isAuctioned": false,
  "flags_isRentedWithTenants": false,
  "flags_isOpportunity": false,
  "flags_isPackAdvancePriority": false,
  "flags_isPackBasicPriority": false,
  "flags_isPackMinimalPriority": false,
  "flags_isPackPremiumPriority": true,
  "flags_isPremium": false,
  "flags_isPromotion": false,
  "flags_isTemporaryRental": false,
  "flags_isTop": true,
  "flags_isTopPlus": true,
  "flags_isTrackedPhone": true,
  "flags_isVirtualTour": false,
  "flags_isVisited": false,
  "flags_hasOpenHouse": false,
  "features_air_conditioner": 1,
  "features_cabinets": 2,
  "features_heating": 3,
  "features_elevator": 13,
  "features_furnished": 19,
  "features_equiped_kitchen": 131,
  "features_antiquity": 9,
  "features_bathrooms": 1,
  "features_conservationStatus": 2,
  "features_floor": 6,
  "features_rooms": 1,
  "features_surface": 31,
  "listedDate": "2026-06-19T13:13:47.600Z",
  "firstListedDate": "2026-06-19T13:13:47.600Z",
  "detailFetched": false,
  "energyRating": null,
  "energyValue": null,
  "environmentImpactRating": null,
  "street": null,
  "streetNumber": null,
  "groundSurface": null,
  "qualityRate": null,
  "constructionType": null,
  "rentPriceIndex": null,
  "detailFeatures": {},
  "scrapedAt": "2026-08-11T12:16:31.981Z"
}
```

### Key output fields

| Field | Description |
|---|---|
| `id` / `url` | Fotocasa property id + listing URL |
| `transactionType` | buy / rent |
| `propertyType` / `propertySubtype` | e.g. Flat / Penthouse |
| `price` / `rawPrice` | display text + numeric value |
| `rooms` / `bathrooms` / `surface` | counts + m² |
| `address.*` | street, neighborhood, district, city, municipality, province, zipCode |
| `latitude` / `longitude` | GPS coordinates |
| `photos` / `photoCount` | image URLs + count |
| `agency` / `agencyUrl` | listing agency + profile URL |
| `features` | parsed feature map (heating, elevator, antiquity…) |
| `listedDate` | when the listing was posted |
| `contactEmail` / `contactWebsite` | agency contact (only when `enrichEmails` is on) |
| `energyRating` / `environmentImpactRating` / `street` / `constructionType` / `qualityRate` / `rentPriceIndex` / `detailFeatures` | property detail (only when `fetchDetails` is on) |

### Free tier

You can run this scraper on a free Apify account before paying anything:

| | Free account |
|---|---|
| Results per run | up to **100** |
| Start URLs per run | up to **100** |
| Cost | nothing — the free plan includes monthly platform credit |

That is enough to check the field list and the data quality against your own URLs. Paid plans lift both caps; see [Apify pricing](https://apify.com/pricing).

### FAQ

**Buy and rent both?** Yes — pass a `comprar` (buy) or `alquiler` (rent) search URL; `transactionType` is set accordingly.

**Do filters work?** Yes — any filter you set on fotocasa.es is encoded in the URL and honoured.

**Full description?** The listing description shown on the search results is included; everything else (price, rooms, m², coordinates, photos) comes straight from the page data.

**Do I need a proxy?** Apify Residential (the default) is recommended for larger runs.

### Support

Found an issue or want a field added? Open an issue on the actor's Issues tab and we'll take a look.

### Additional services

Need agency contact emails? Turn on `enrichEmails` to append a best-effort contact email + website per agency (billed only when an email is found).

### Explore more scrapers

Check the publisher's profile for more real-estate and directory scrapers (Idealista, Redfin, Zillow, Realtor, Immobilienscout24 and more).

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/fotocasa-scraper`).

**Purpose:** Turn any Fotocasa.es buy (`comprar`) or rent (`alquiler`) search URL into one flat row per property — price, rooms, m², address, GPS, photos, agency — via pure HTTP.

**Minimal input:**

```json
{
  "startUrls": ["https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l"],
  "maxItems": 30
}
```

Rent works the same way — swap in an `alquiler` search URL (e.g. `.../es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l`); `transactionType` is set accordingly.

**Output:** one row per property — `portal`, `id`, `url`, `transactionType` (buy/rent), `propertyType`, `propertySubtype`, `title`, `price`, `rawPrice`, `pricePerSqm`, `rooms`, `bathrooms`, `surface`, `floor`, `address_*` (street/neighborhood/district/city/municipality/province/zipCode), `latitude`, `longitude`, `photos[]`, `photoCount`, `amenities_*`, `agency`, `agencyUrl`, `phone`, `listedDate`, `scrapedAt`. `fetchDetails` adds `energyRating`, `street`, `constructionType`, `groundSurface`, `qualityRate`, `rentPriceIndex`, `detailFeatures`. `enrichEmails` adds `contactEmail`, `contactWebsite`.

**Behaviors an agent should know:**

- Always set `maxItems` — each search page returns ~30 listings and paginates automatically until the cap (default 10000).
- `startUrls` accepts only search/listing URLs; every on-site filter (price, rooms, m², zone) is honoured from the URL.
- `fetchDetails` (off) opens each property's detail page for +1 request and charges an `additional-data` event per property; `enrichEmails` (off) is billed per email found, never for misses.
- `flatten` (on by default) flattens nested objects/arrays into CSV columns; disable to keep nested JSON.
- Pay-per-event billing — see the Pricing tab on the actor page.

### ⚠️ Disclaimer

This actor collects only publicly available property-listing data for legitimate research, lead-generation and aggregation use. Respect Fotocasa's terms of service and applicable laws (including data-protection rules) in your jurisdiction. You are responsible for how you use the scraped data.

### SEO Keywords

fotocasa scraper, fotocasa api, fotocasa.es scraper, spain real estate scraper, spanish property data, idealista alternative, comprar vivienda scraper, alquiler scraper, property listings spain, real estate data madrid, real estate data barcelona, m2 price data, property coordinates scraper, real estate lead generation

# Actor input Schema

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

Full Fotocasa.es search URLs. Each is paginated automatically until `Maximum items` is reached. Start URLs take priority: when one is given, every filter below is ignored.

## `location` (type: `string`):

City or area in Spain, e.g. Madrid, Malaga, Alicante. Used only when Start URLs is empty. Provincial capitals are resolved automatically (Madrid becomes madrid-capital).

## `operation` (type: `string`):

Used only when Start URLs is empty.

## `propertyType` (type: `string`):

Used only when Start URLs is empty.

## `rooms` (type: `integer`):

Exact bedroom count, 1 to 4. Fotocasa allows only ONE of Rooms / Feature / Published in last 48 h per search.

## `feature` (type: `string`):

One Fotocasa feature filter. Only ONE of Rooms / Feature / Published in last 48 h can be used at a time.

## `publishedLast48h` (type: `boolean`):

Only ONE of Rooms / Feature / Published in last 48 h can be used at a time.

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

Used only when Start URLs is empty.

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

Used only when Start URLs is empty.

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

Used only when Start URLs is empty.

## `minSurface` (type: `integer`):

Used only when Start URLs is empty.

## `maxSurface` (type: `integer`):

Used only when Start URLs is empty.

## `flatten` (type: `boolean`):

When enabled (default), nested objects/arrays (e.g. `address`, `features`, `photos`) are flattened into CSV-friendly columns. Disable to keep the full nested JSON.

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

If enabled, opens each property's detail page to add the **energy certificate** rating (A–G + value + environmental impact), **exact street + number**, **construction type**, **ground surface**, **quality rating**, the **rent price index**, and a fully **decoded feature list** (ELEVATOR=NO, FURNISHED=YES…). Adds one extra request per property and charges an `additional-data` event each time. Leave off for the fast/cheap search-only output.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each listing agency by discovering the agency's website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns. Best-effort, billed per email found; never charged for misses.

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

Hard cap on the number of properties collected. Each search page returns ~30 listings and paginates automatically; use this cap to control billing.

## `maxConcurrency` (type: `integer`):

Maximum number of rows processed in parallel (mainly relevant when agency-email enrichment is on). 6-12 is the sweet spot.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

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

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l",
    "https://www.fotocasa.es/es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l"
  ],
  "location": "Madrid",
  "operation": "comprar",
  "propertyType": "viviendas",
  "publishedLast48h": false,
  "sortBy": "relevance",
  "flatten": true,
  "fetchDetails": false,
  "enrichEmails": false,
  "maxItems": 10000,
  "maxConcurrency": 8,
  "maxRequestRetries": 5
}
```

# 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 = {
    "startUrls": [
        "https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l",
        "https://www.fotocasa.es/es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/fotocasa-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 = { "startUrls": [
        "https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l",
        "https://www.fotocasa.es/es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/fotocasa-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 '{
  "startUrls": [
    "https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l",
    "https://www.fotocasa.es/es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l"
  ]
}' |
apify call memo23/fotocasa-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/fotocasa-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/jqQF1tNQj00XtOpva/builds/bHxwCd31Yz8B6HcQs/openapi.json
