# OLX Brasil Scraper (`dadhalfdev/olx-brasil-scraper`) Actor

Scrape cars, real estate, phones, and other ads from olx.com.br. Use the same listing filters as the site or paste an OLX URL — the URL wins when set.

- **URL**: https://apify.com/dadhalfdev/olx-brasil-scraper.md
- **Developed by:** [Marco Rodrigues](https://apify.com/dadhalfdev) (community)
- **Features:** Limited permissions
- **Stats:** 12 total users, 3 monthly users, 91.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🇧🇷 OLX Brasil Cars Scraper

Want [OLX Brasil cars](https://www.olx.com.br/autos-e-pecas/carros-vans-e-utilitarios) in a spreadsheet? This scraper makes it easy.

This actor is for **cars, vans, and utilities only** — not motos, and not the rest of the OLX marketplace.

Use **structured filters** — the same ones as the OLX cars listing; structured filters work better for AI agents — **or** paste an **`input_url`** once you've already filtered in the browser. When `input_url` is set it overrides the filters below.

OLX lists hundreds of thousands of car ads. This actor reads the public cars listing payload and returns up to 2000 rows per run.

### 💡 Perfect for...

- **Agents:** Export Toyota automatics from 2018+ without paging the site.
- **Dashboards:** Track price, year, km, fuel, and city.
- **Market research:** Slice body type, color, advertiser, FIPE, and inspection flags.
- **Data analysts:** Export structured OLX car rows with public ad URLs.
- **🤖 AI Agents:** Power Claude, Cursor, Codex, the Hermes Agent, and OpenClaw workflows with live OLX car results.
- **📚 RAG Systems:** Feed titles, specs, and locations into retrieval pipelines.
- **🔗 AI Workflows:** Plug into LangChain, AutoGPT, CrewAI, and similar stacks.

### ✨ Why you'll love this scraper

- 🔗 **Input URL or Filters:** Paste `/autos-e-pecas/carros-vans-e-utilitarios/toyota` (`input_url`) if you already filtered in the browser, or use dropdowns (better for AI agents). `input_url` always wins when set.
- 🎯 **Website-Matched Filters:** Same Marca, Modelo, Versão, Preço, Ano, Quilometragem, Câmbio, Combustível, Tipo, Cor, Portas, Direção, Motor, Opcionais, Aceita Trocas, Kit GNV, Estado financeiro, Documentação, Conservação, Final de placa, Tipo de anunciante, Ordenar, Festival de Carros, Histórico veicular, Vistoriado, and Ofertas abaixo da FIPE as olx.com.br.
- 🌐 **Nationwide:** All 27 UF slugs (`estado-sp`, `estado-rj`, …). Prefer `www.olx.com.br/estado-sp/...` over city subdomains.

### 📦 What's inside the data?

Every row includes listing fields from the public cars payload:

- **Core:** `id`, `url`, `title`, `category`, `price`, `old_price`, `currency` (BRL), `price_reduction`, `installments`
- **Vehicle:** `make`, `model`, `year`, `mileage_km`, `body_type`, `engine`, `fuel`, `transmission`, `steering`, `color`, `doors`, `plate_end`, `features`
- **Condition:** `single_owner`, `accepts_trade`, `gnv_kit`, `owner_manual`, `spare_key`, `warranty`, `dealership_serviced`, `ipva_paid`, `has_fines`, `auction`, `settled`, `financed`, `financial_status`, `documentation`, `conservation`, `festival`
- **Place / seller:** `location`, `city`, `neighbourhood`, `state`, `ddd`, `professional_ad`, `seller`, `seller_rating`
- **Flags / media:** `featured`, `fixed_on_top`, `inspected`, `vehicle_history`, `vehicle_tags`, `vehicle_pills`, `condition_report_status`, `condition_report_date`, `published_at`, `image_url`, `image_count`, `video_count`, `view360_url`

### 🚀 Quick start

**Option A — Input URL**

1. Open [OLX cars](https://www.olx.com.br/autos-e-pecas/carros-vans-e-utilitarios), apply filters, copy the URL — e.g. `https://www.olx.com.br/autos-e-pecas/carros-vans-e-utilitarios/toyota?rs=2018&gb=2`.
2. Paste it into `input_url`.
3. Set `max_results` and click **Start**.

**Option B — Structured filters (better for AI agents)**

1. Leave `input_url` empty.
2. Pick make, year, transmission, state, and any other cars filters.
3. Set `max_results` (up to 2000) and click **Start**.

***

#### Tech details for developers 🧑‍💻

**Input Example (filters):**

```json
{
  "make": "toyota",
  "transmission": "automatico",
  "year_min": 2018,
  "state": "sp",
  "max_results": 100
}
```

**Input Example (URL override):**

```json
{
  "input_url": "https://www.olx.com.br/autos-e-pecas/carros-vans-e-utilitarios/toyota?rs=2018&gb=2",
  "max_results": 50
}
```

**Output Example:**

```json
{
  "id": "1527847223",
  "url": "https://pi.olx.com.br/regiao-de-teresina-e-parnaiba/autos-e-pecas/carros-vans-e-utilitarios/toyota-hilux-sw4-srx-plat-4x4-2-8-tb-die-aut-2024-1527847223",
  "title": "Toyota Hilux SW4 SRX Plat. 4X4 2.8 TB Die. Aut. 2024",
  "category": "Carros, vans e utilitários",
  "price": 349900,
  "old_price": null,
  "currency": "BRL",
  "price_reduction": false,
  "installments": false,
  "make": "Toyota",
  "model": "Toyota SW4 SRX Plat. 4X4 2.8 TB Die. Aut.",
  "year": 2024,
  "mileage_km": 30000,
  "body_type": "SUV",
  "engine": "2.0 - 2.9",
  "fuel": "Diesel",
  "transmission": "Automático",
  "steering": "Hidráulica",
  "color": "Branco",
  "doors": "4 portas",
  "plate_end": "1",
  "features": "Air bag, Ar condicionado, Alarme, Bancos de couro, Câmera de ré, Computador de bordo, Conexão USB, Controle automático de velocidade, Navegador GPS, Rodas de liga leve, Sensor de ré, Som, Tração 4x4, Trava elétrica, Vidro elétrico, Volante multifuncional",
  "single_owner": null,
  "accepts_trade": null,
  "gnv_kit": false,
  "owner_manual": true,
  "spare_key": true,
  "warranty": null,
  "dealership_serviced": null,
  "ipva_paid": true,
  "has_fines": false,
  "auction": false,
  "settled": true,
  "financed": false,
  "financial_status": "Quitado",
  "documentation": "IPVA Pago",
  "conservation": "Com manual, Chave reserva",
  "festival": false,
  "location": "Teresina - PI",
  "city": "Teresina",
  "neighbourhood": "São Cristóvão",
  "state": "PI",
  "ddd": "86",
  "professional_ad": false,
  "seller": "João da silveira terto",
  "seller_rating": null,
  "featured": true,
  "fixed_on_top": false,
  "inspected": false,
  "vehicle_history": true,
  "vehicle_tags": ["vehiclehistory"],
  "vehicle_pills": ["IPVA pago"],
  "condition_report_status": null,
  "condition_report_date": null,
  "published_at": "2026-09-03T22:38:16+00:00",
  "image_url": "https://img.olx.com.br/images/59/592653792972449.jpg",
  "image_count": 7,
  "video_count": 0,
  "view360_url": null
}
```

**Output fields:**

| Field | Description |
|-------|-------------|
| `id` | OLX `listId`. |
| `url` | Public ad URL. |
| `title` | Ad headline (`subject`). |
| `category` | Always cars, vans, and utilities on this actor. |
| `price` | Asking price as a number. |
| `old_price` | Previous price when OLX shows a reduction. |
| `currency` | Always `BRL`. |
| `price_reduction` | Whether the ad has a price-drop badge. |
| `installments` | Whether installments are advertised. |
| `make` | Vehicle brand. |
| `model` | Vehicle model / version string. |
| `year` | Model year. |
| `mileage_km` | Odometer in kilometres. |
| `body_type` | Hatch, Sedã, SUV, Pick-up, … |
| `engine` | Motor range, e.g. `1.5` or `2.0 - 2.9`. |
| `fuel` | Gasolina, Flex, Diesel, Híbrido, Elétrico, … |
| `transmission` | Manual, Automático, Semi-Automático, Automatizado. |
| `steering` | Hidráulica, Elétrica, … |
| `color` | Body color. |
| `doors` | Door count label. |
| `plate_end` | Final de placa. |
| `features` | Opcionais string from the listing. |
| `single_owner` | Único dono when published. |
| `accepts_trade` | Aceita trocas when published. |
| `gnv_kit` | Kit GNV flag. |
| `owner_manual` | Com manual. |
| `spare_key` | Chave reserva. |
| `warranty` | Com garantia. |
| `dealership_serviced` | Revisões em concessionária. |
| `ipva_paid` | IPVA pago. |
| `has_fines` | Com multas. |
| `auction` | De leilão. |
| `settled` | Quitado. |
| `financed` | Financiado. |
| `financial_status` | Indexed financial status label. |
| `documentation` | Documentação e regularização. |
| `conservation` | Conservação e garantia. |
| `festival` | Festival de Carros flag. |
| `location` | Combined location string. |
| `city` | Municipality. |
| `neighbourhood` | Neighbourhood. |
| `state` | UF, e.g. `SP`. |
| `ddd` | Area code. |
| `professional_ad` | Professional vs private advertiser. |
| `seller` | Seller name from the listing payload. |
| `seller_rating` | OLX Pay seller rating when present. |
| `featured` | Featured / bumped ad. |
| `fixed_on_top` | Pinned to the top of the list. |
| `inspected` | Vistoriado / inspection report. |
| `vehicle_history` | Histórico veicular tag. |
| `vehicle_tags` | Raw tag slugs from the payload. |
| `vehicle_pills` | Badge labels shown on the card. |
| `condition_report_status` | Inspection report status when present. |
| `condition_report_date` | Inspection report timestamp when present. |
| `published_at` | Ad date as ISO-8601 UTC. |
| `image_url` | First photo. |
| `image_count` | Photo count. |
| `video_count` | Video count. |
| `view360_url` | 360 view URL when published. |

### 📋 Input reference (detailed)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `input_url` | string | No | — | Paste an OLX cars listing URL; overrides filters when set. |
| `query` | string | No | — | Same as the OLX search box (`?q=`). |
| `make` | string enum | No | all | Same Marca slugs as the cars page (`toyota`, `gm-chevrolet`, `vw-volkswagen`, …). |
| `model` | string | No | — | Same Modelo path after make (`corolla`). |
| `version` | string | No | — | Same Versão filter (`vv=`). |
| `state` | string enum | No | all | All 27 UF slugs (`sp`, `rj`, `mg`, …). |
| `year_min` / `year_max` | integer | No | — | Same Ano por intervalo (`rs=` / `re=`). |
| `price_min` / `price_max` | integer | No | — | Same Preço Min. / Máx. (`ps=` / `pe=`, BRL). |
| `mileage_min` / `mileage_max` | integer | No | — | Same Quilometragem (`ms=` / `me=`). |
| `transmission` | string enum | No | any | Same Câmbio (`manual`, `automatico`, `semi-automatico`, `automatizado`). |
| `fuel` | string enum | No | any | Same Combustível (`gasolina`, `alcool`, `flex`, `diesel`, `hibrido`, `eletrico`). |
| `body_type` | string enum | No | any | Same Tipo (`hatch`, `seda`, `suv`, `pick-up`, `van-utilitario`, `perua`, `coupe`, `conversivel`, `caminhao-leve`, `buggy`). |
| `color` | string enum | No | any | Same Cor (`preto`, `branco`, `prata`, `vermelho`, `cinza`, `azul`, `amarelo`, `verde`, `laranja`, `outra`). |
| `doors` | string enum | No | any | Same Portas (`2`, `3`, `4`). |
| `steering` | string enum | No | any | Same Direção (`hidraulica`, `eletrica`, `mecanica`, `eletro-hidraulica`). |
| `engine` | string enum | No | any | Same Motor (`1.0` … `4.0-plus`). |
| `accepts_trade` | string enum | No | any | Same Aceita Trocas (`sim`, `nao`). |
| `feature` | string enum | No | any | Same Opcionais (`ar-condicionado`, `air-bag`, `teto-solar`, `tracao-4x4`, …). |
| `gnv_kit` | string enum | No | any | Same Kit GNV (`sim`, `nao`). |
| `financial_status` | string enum | No | any | Same Estado financeiro (`quitado`, `financiado`). |
| `documentation` | string enum | No | any | Same Documentação (`ipva-pago`, `com-multas`, `de-leilao`). |
| `conservation` | string enum | No | any | Same Conservação (`unico-dono`, `com-manual`, `chave-reserva`, `revisoes-concessionaria`, `com-garantia`). |
| `plate_end` | string enum | No | any | Same Final de placa (`0`–`9`). |
| `advertiser` | string enum | No | any | Same Tipo de anunciante (`particular`, `profissional`). |
| `sort` | string enum | No | `relevance` | Same Ordenar por (`relevance`, `date`, `price`, `biggest_price`). |
| `festival` | boolean | No | false | Same Festival de Carros toggle (`vt=1`). |
| `vehicle_history` | boolean | No | false | Same Histórico veicular toggle (`vtvh=`). |
| `inspected` | boolean | No | false | Same Vistoriado toggle (`crss=`). |
| `below_fipe` | boolean | No | false | Same Ofertas abaixo da FIPE toggle (`fpdll=`). |
| `max_results` | integer | No | `50` | Maximum rows (`1`–`2000`). |

#### Notes on filters

- Prefer exact enum strings from the Apify input dropdowns (same labels as OLX cars).
- Chevrolet is `gm-chevrolet` and Volkswagen is `vw-volkswagen` — those are the live OLX slugs.
- `input_url` always wins over filters when provided.
- `www.olx.com.br`, `olx.com.br`, and UF hosts such as `sp.olx.com.br` are accepted.
- This actor does not scrape motos or other OLX categories.

### 🔧 Custom scrapers and agents

If you need a custom web scraper, or custom AI agents and workflows, contact me through [tuik.ai](https://www.tuik.ai). We help businesses cut costs and time by up to 10x.

# Actor input Schema

## `input_url` (type: `string`):

Paste any OLX listing URL (cars, motos, apartments, phones, …). Overrides filters when set.

## `category` (type: `string`):

Same listing category as olx.com.br. Ignored when input_url is set.

## `query` (type: `string`):

Same as the OLX search box (`?q=`). Ignored when input_url is set.

## `subcategory` (type: `string`):

Optional extra path after the category, same as OLX (apple, honda, corolla). Ignored when input_url is set.

## `state` (type: `string`):

Same /estado-{uf}/ listing prefix as OLX Brasil. Ignored when input_url is set.

## `price_min` (type: `integer`):

Same Preço Min. (`ps=`). Ignored when input_url is set.

## `price_max` (type: `integer`):

Same Preço Máx. (`pe=`). Ignored when input_url is set.

## `advertiser` (type: `string`):

Same Tipo de anunciante filter (`f=`). Ignored when input_url is set.

## `sort` (type: `string`):

Same Ordenar por filter (`sf=`). Ignored when input_url is set.

## `make` (type: `string`):

Cars path slug (`toyota`, `gm-chevrolet`). For motos, used as /motos/{make}. Ignored when input_url is set.

## `model` (type: `string`):

Cars path after make, or motos `vm=`. Ignored when input_url is set.

## `version` (type: `string`):

Same Versão filter (`vv=`). Cars and motos. Ignored when input_url is set.

## `year_min` (type: `integer`):

Same Ano (`rs=`). Cars and motos. Ignored when input_url is set.

## `year_max` (type: `integer`):

Same Ano (`re=`). Cars and motos. Ignored when input_url is set.

## `mileage_min` (type: `integer`):

Same Quilometragem (`ms=`). Cars and motos. Ignored when input_url is set.

## `mileage_max` (type: `integer`):

Same Quilometragem (`me=`). Cars and motos. Ignored when input_url is set.

## `transmission` (type: `string`):

Same Câmbio filter (`gb=`). Cars only. Ignored when input_url is set.

## `fuel` (type: `string`):

Same Combustível filter (`fu=`). Cars only. Ignored when input_url is set.

## `body_type` (type: `string`):

Same Tipo filter (`ctp=`). Cars only. Ignored when input_url is set.

## `color` (type: `string`):

Same Cor filter (`cac=`). Cars and motos. Ignored when input_url is set.

## `doors` (type: `string`):

Same Portas filter (`cad=`). Cars only. Ignored when input_url is set.

## `steering` (type: `string`):

Same Direção filter (`ics=`). Cars only. Ignored when input_url is set.

## `engine` (type: `string`):

Same Motor filter (`motp=`). Cars only. Ignored when input_url is set.

## `accepts_trade` (type: `string`):

Same Aceita Trocas filter (`exc=`). Ignored when input_url is set.

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

Same Opcionais filter (`cf=`). Cars only. Ignored when input_url is set.

## `gnv_kit` (type: `string`):

Same Kit GNV filter (`hgnv=`). Cars only. Ignored when input_url is set.

## `financial_status` (type: `string`):

Same Estado financeiro filter (`fncs=`). Cars and motos. Ignored when input_url is set.

## `documentation` (type: `string`):

Same Documentação e regularização filter (`doc=`). Cars and motos. Ignored when input_url is set.

## `conservation` (type: `string`):

Same Conservação e garantia filter (`cnwa=`). Cars only. Ignored when input_url is set.

## `plate_end` (type: `string`):

Same Final de placa filter (`et=`). Cars only. Ignored when input_url is set.

## `moto_type` (type: `string`):

Same Tipo de moto filter (`mt=`). Motos only. Ignored when input_url is set.

## `festival` (type: `boolean`):

Same Festival de Carros toggle (`vt=1`). Cars only. Ignored when input_url is set.

## `vehicle_history` (type: `boolean`):

Same Histórico Veicular toggle (`vtvh=`). Cars only. Ignored when input_url is set.

## `inspected` (type: `boolean`):

Same Vistoriado toggle (`crss=`). Cars and motos. Ignored when input_url is set.

## `below_fipe` (type: `boolean`):

Same Ofertas abaixo da FIPE toggle (`fpdll=`). Cars and motos. Ignored when input_url is set.

## `rooms` (type: `string`):

Same Número de quartos (`ros=`). Real estate only. Ignored when input_url is set.

## `bathrooms` (type: `string`):

Same Número de banheiros (`bas=`). Real estate only. Ignored when input_url is set.

## `garage_spaces` (type: `string`):

Same Vagas na garagem (`gsp=`). Real estate only. Ignored when input_url is set.

## `property_subtype` (type: `string`):

Same Subtipo do imóvel (`rts=`). Real estate only. Ignored when input_url is set.

## `area_min` (type: `integer`):

Same Área (`ss=`). Real estate only. Ignored when input_url is set.

## `area_max` (type: `integer`):

Same Área (`se=`). Real estate only. Ignored when input_url is set.

## `iptu_min` (type: `integer`):

Same IPTU (`ips=`). Real estate only. Ignored when input_url is set.

## `iptu_max` (type: `integer`):

Same IPTU (`ipe=`). Real estate only. Ignored when input_url is set.

## `moving_festival` (type: `boolean`):

Same Festival da Mudança toggle (`fma=1`). Real estate only. Ignored when input_url is set.

## `phone_brand` (type: `string`):

Same /celulares/{brand} path (apple, samsung, …). Phones only. Ignored when input_url is set.

## `phone_condition` (type: `string`):

Same Condição filter (`elcd=`). Phones only. Ignored when input_url is set.

## `donate` (type: `boolean`):

Same Para Doação toggle (`de=1`). Phones only. Ignored when input_url is set.

## `max_results` (type: `integer`):

How many rows to return (1–2000). OLX lists 50 ads per page and stops around page 100.

## Actor input object example

```json
{
  "category": "carros",
  "state": "",
  "advertiser": "",
  "sort": "relevance",
  "make": "",
  "transmission": "",
  "fuel": "",
  "body_type": "",
  "color": "",
  "doors": "",
  "steering": "",
  "engine": "",
  "accepts_trade": "",
  "feature": "",
  "gnv_kit": "",
  "financial_status": "",
  "documentation": "",
  "conservation": "",
  "plate_end": "",
  "moto_type": "",
  "festival": false,
  "vehicle_history": false,
  "inspected": false,
  "below_fipe": false,
  "rooms": "",
  "bathrooms": "",
  "garage_spaces": "",
  "property_subtype": "",
  "moving_festival": false,
  "phone_brand": "",
  "phone_condition": "",
  "donate": false,
  "max_results": 50
}
```

# Actor output Schema

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

Table view of scraped ads using the dataset overview view.

## `results` (type: `string`):

All scraped ads from the default dataset without view transformation.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dadhalfdev/olx-brasil-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dadhalfdev/olx-brasil-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 '{}' |
apify call dadhalfdev/olx-brasil-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dadhalfdev/olx-brasil-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/0aZ5HqtFr2vxZ1pzy/builds/h91dmYqegcZAzcSaz/openapi.json
