# DBA.dk Scraper — Denmark Classifieds & Prices (`logiover/dba-dk-scraper`) Actor

Scrape dba.dk, Denmark's #1 classifieds marketplace: title, price (DKK), location, image, seller type (private/dealer) and posted date — plus car make, model, year, mileage and fuel for vehicles. Paste any dba.dk search or category URL. No login, no API key.

- **URL**: https://apify.com/logiover/dba-dk-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce, Other
- **Features:** Limited permissions
- **Stats:** 9 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.
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

<div align="center">

<img src="https://cdn-icons-png.flaticon.com/128/3081/3081559.png" width="92" alt="DBA.dk Scraper"/>

</div>

## DBA.dk Scraper — Denmark Classifieds Listings, Prices & Seller Data (No API)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Classifieds](https://img.shields.io/badge/Category-Classifieds-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

Turn any **[dba.dk](https://www.dba.dk)** search or category into a clean, structured dataset. This **DBA.dk scraper** collects **Denmark classifieds data** from Den Blå Avis — Denmark's #1 second-hand marketplace — with **no login, no cookies and no API key**. Every row includes **`title`**, clean numeric **`price`** in DKK, **`location`** (+ coordinates), **`sellerType`** (private / dealer), **`postedDate`** and **`image`** — plus full car specs (**`make`**, **`model`**, **`year`**, **`mileage`**, **`fuel`**, **`transmission`**, **`regNo`**) for vehicles. Paste a URL, press start, export.

> ### 🏆 Why this DBA.dk scraper?
>
> **25+ fields per listing** · **thousands of listings per run** · reads dba.dk's own embedded listing JSON · export to JSON / CSV / Excel. The unofficial **DBA.dk API alternative** for market research, price tracking and lead generation across cars, electronics, home and everything Danes buy and sell.

***

### ✨ What this Actor does / Key features

- 🔑 **No login, no API key, no cookies** — works as an unofficial **DBA.dk API** alternative, reading Den Blå Avis's own embedded listing JSON payload.
- 🚗 **Full car specs** — scrape dba.dk vehicle listings with `make`, `model`, `year`, `mileage` (km), `fuel`, `transmission` and Danish number plate (`regNo`).
- 🏷️ **Cars + all general goods** — paste any vehicles or general `recommerce` search/category URL (electronics, home & furniture, leisure, fashion…). One parser covers both platforms.
- 🧑 **Seller type on every row** — each listing tagged `private` or `dealer`, with an optional `sellerType` filter for dealer-only or private-only runs.
- 💸 **Clean numeric prices** in DKK (`price`) alongside the raw `24.500 kr.` text (`priceRaw`).
- 📍 **Location + coordinates** — city/town name plus approximate `latitude` / `longitude`.
- 🕒 **Posted date as ISO 8601** (`postedDate`) so you can sort and filter by freshness.
- 🔁 **Auto-pagination** with de-duplication by `listingId` and `maxResults` / `maxResultsPerSearch` caps.
- 🌐 **Datacenter proxy is enough** — dba.dk is not behind a Cloudflare challenge, so runs stay fast and cheap. Export to **JSON, CSV or Excel** in one click.

***

### 🚀 Quick start (3 steps)

1. **Get a URL.** Go to [dba.dk](https://www.dba.dk), set your filters / type a keyword / open a category, then copy the URL from the address bar.
2. **Paste it** into the **Search / category URLs** (`searchUrls`) input and set `maxResults`.
3. **Run** the Actor, then download your data as **JSON, CSV or Excel** — or pull it from the Apify API.

That's it. No account on dba.dk, no API key, no cookies. Leave `searchUrls` empty to scrape Denmark used cars by default.

***

### 📥 Input

Configure a run with a few simple fields. Everything is driven by the dba.dk URL(s) you paste — the cars search (`/biler/biler/`) redirects to the mobility URL, and a keyword search or homepage category link redirects to the `recommerce/forsale/search` URL; both are supported as-is.

#### Example — Denmark used cars by filter

Set your filters on dba.dk's car search, copy the URL, paste it in:

```json
{
  "searchUrls": ["https://www.dba.dk/mobility/search/car?registration_class=1"],
  "maxResults": 1000
}
```

#### Example — Electronics search (e.g. iPhone)

```json
{
  "searchUrls": ["https://www.dba.dk/recommerce/forsale/search?q=iphone"],
  "maxResults": 500
}
```

#### Example — Dealer-only car listings

```json
{
  "searchUrls": ["https://www.dba.dk/mobility/search/car?registration_class=1"],
  "sellerType": "dealer",
  "maxResults": 500,
  "maxResultsPerSearch": 0
}
```

You can also mix vehicles and general categories in a single run by adding multiple URLs to `searchUrls`.

| Field | Type | Description |
|---|---|---|
| `searchUrls` | array | dba.dk search or category URLs copied straight from the site. Leave empty to scrape used cars by default. |
| `maxResults` | integer | Stop after this many listings across all URLs. `0` = no limit (dba.dk caps a single search at 50 pages / ~2,600 listings). Default `200`. |
| `maxResultsPerSearch` | integer | Cap listings per individual search/category URL. `0` = no per-search cap. Default `0`. |
| `sellerType` | select | Keep only `private` sellers, only `dealer`s, or `any` (as in the URL). Default `any`. |
| `useProxy` | boolean | Route requests through Apify Proxy. Default `true`. |
| `proxyConfiguration` | object | Apify Proxy settings. Datacenter is enough for dba.dk; switch to Residential only if you hit blocks. |
| `maxConcurrency` | integer | How many search/category URLs to process in parallel (1–10). Default `3`. |

***

### 📤 Output

One clean, structured row per listing. Here's a trimmed sample of a used car (vehicle fields included):

```json
{
  "listingId": "22052485",
  "url": "https://www.dba.dk/mobility/item/22052485",
  "title": "Volvo S40",
  "price": "24500",
  "priceRaw": "24.500 kr.",
  "currency": "DKK",
  "location": "Kruså",
  "latitude": "54.86647",
  "longitude": "9.43728",
  "category": "vehicles",
  "subCategory": "Personbil",
  "sellerType": "private",
  "postedDate": "2026-06-07T17:04:58.000Z",
  "image": "https://images.dbastatic.dk/dynamic/default/item/22052485/6261ef04-…",
  "imagesCount": "1",
  "make": "Volvo",
  "model": "S40",
  "year": "2006",
  "mileage": "252000",
  "fuel": "Benzin",
  "transmission": "Manuelt",
  "regNo": "EF86096"
}
```

And a general classifieds item (electronics):

```json
{
  "listingId": "22052953",
  "url": "https://www.dba.dk/recommerce/forsale/item/22052953",
  "title": "Apple MacBook bærbar computer 13\" grå",
  "price": "2000",
  "priceRaw": "2.000 kr.",
  "currency": "DKK",
  "location": "Vejle",
  "category": "general",
  "subCategory": "Elektronik og hvidevarer",
  "sellerType": "private",
  "tradeType": "Til salg",
  "brand": "Apple",
  "image": "https://images.dbastatic.dk/dynamic/default/item/22052953/f17798bc-…",
  "imagesCount": "10"
}
```

<details>
<summary><strong>Full output field reference (click to expand)</strong></summary>

**Common fields (all listings)**

| Field | Description |
|---|---|
| `listingId` | dba.dk ad ID (unique) |
| `url` | Canonical listing URL |
| `title` | Listing title / heading |
| `price` | Price as a number (DKK) |
| `priceRaw` | Raw price text, e.g. `24.500 kr.` |
| `currency` | Currency code (`DKK`) |
| `location` | City / town of the seller |
| `latitude` | Approximate latitude |
| `longitude` | Approximate longitude |
| `category` | Top-level platform: `vehicles` or `general` (recommerce) |
| `subCategory` | Search / category title from dba.dk (e.g. `Personbil`, `Elektronik og hvidevarer`) |
| `sellerType` | `private` or `dealer` |
| `tradeType` | e.g. `Til salg` (for sale), `Gives væk` (free) |
| `postedDate` | When the ad was published (ISO 8601) |
| `image` | Main image URL |
| `imagesCount` | Number of images on the listing |
| `brand` | Brand / make of the item (general items) |
| `sourceUrl` | The search/category URL this row came from |
| `scrapedAt` | Scrape timestamp (ISO 8601) |

**Vehicle-only fields (`category = vehicles`)**

| Field | Description |
|---|---|
| `make` | Car make |
| `model` | Car model |
| `year` | Registration year |
| `mileage` | Mileage in km |
| `fuel` | Fuel type |
| `transmission` | Gearbox / transmission |
| `regNo` | Danish number plate (if listed) |

</details>

Export the whole dataset to **JSON, CSV, Excel** or the **Apify API** from the Storage tab.

***

### 💡 Use cases

- 🚗 **Denmark used-car price analysis** — track DKK prices, mileage and year by make/model to build depreciation curves, valuation models and market comps from real Denmark used-cars data.
- 📊 **Marketplace & competitor monitoring** — watch prices, inventory and new-listing velocity across categories on Denmark's biggest classifieds site.
- 🧑‍💼 **Dealer lead generation** — filter to `dealer` listings to build a list of Danish car dealers and active sellers by region or category.
- 🔁 **Resale & arbitrage research** — spot underpriced electronics, furniture and gear for flipping between dba.dk and other platforms.
- 🤖 **AI / ML datasets** — feed Danish-language product titles, prices and attributes into pricing models and training sets.
- 📈 **Price tracking & dashboards** — schedule daily pulls to monitor price drops and demand trends across the Danish second-hand market.

***

### 👥 Who uses it

- **Car dealers & automotive analysts** valuing stock and tracking the Danish used-car market.
- **Resellers & flippers** hunting underpriced electronics, furniture and gear on Den Blå Avis.
- **Market researchers & data teams** building Denmark second-hand pricing and demand datasets.
- **Lead-gen & sales teams** compiling lists of active Danish dealers and private sellers.
- **Developers & data scientists** who need clean, structured classifieds data without maintaining a scraper.

***

### 💰 Pricing

This Actor runs on a **pay-per-result** model — you pay for the listings you actually collect, not for time or servers. Because dba.dk is not behind a Cloudflare challenge, **Datacenter proxy** is enough and runs stay cheap. Start on the Apify Free plan and scale up as your needs grow. See the **Pricing** tab on the Actor's page for current rates.

***

### ❓ Frequently Asked Questions

#### Is it legal to scrape DBA.dk?

This scraper collects **publicly visible listing data** — the same information any visitor sees on dba.dk without logging in. Use it responsibly, respect dba.dk's terms of service, don't store personal data beyond what you actually need, and comply with GDPR and applicable laws in your jurisdiction. You are responsible for how you use the data.

#### Is this a DBA.dk API alternative? Does DBA have a public API?

DBA.dk (Den Blå Avis) has **no public developer API**. This Actor works as an **unofficial DBA.dk API alternative** — it reads dba.dk's own structured search payload and returns clean, machine-readable rows with no API key, no login and no cookies.

#### Can I scrape DBA without API/login?

Yes. There is no login, no cookies and no API key required. Paste a dba.dk search or category URL, press start, and the Actor returns structured rows. It reads the site's own embedded listing JSON, so you get typed fields directly.

#### How do I export DBA data to CSV or JSON?

Run the Actor on any dba.dk search URL, then download the dataset from the Storage tab as **CSV, Excel or JSON** — or pull it from the Apify API. Every field above is included in one structured table, so exporting Denmark classifieds data is a single click.

#### How much data can I get?

dba.dk hard-caps any single search or category at **50 pages (~2,600 listings)** — that's a site limit, not the scraper's. To pull more, split your query into narrower searches (by category, brand, price band or region) and paste each URL into `searchUrls`. Use `maxResults` and `maxResultsPerSearch` to control run size.

#### Can I scrape DBA car listings with full specs?

Yes. Paste a `mobility/search/...` vehicle URL (car, MC, boat or van) and each row includes `make`, `model`, `year`, `mileage`, `fuel`, `transmission` and Danish number plate (`regNo`), alongside price, location, seller type and image.

#### Can I scrape only private sellers (or only dealers)?

Yes. Set `sellerType` to `private` or `dealer` and the scraper keeps only that seller type — perfect for separating private-owner cars from dealer inventory, or for dealer lead lists.

#### Does it scrape every car detail (VIN, equipment list, full description)?

It returns everything in the search payload — make, model, year, mileage, fuel, transmission, number plate, price, location, image and more. Individual listing **detail pages are not crawled separately**, so free-text descriptions, full equipment lists and VINs are out of scope. This keeps runs fast and cheap.

#### Which proxy should I use?

**Datacenter** (the default) works reliably — dba.dk is not behind a Cloudflare challenge. Switch to **Residential** in `proxyConfiguration` only if you ever see blocks.

***

### 🔗 More classifieds & marketplace scrapers by logiover

Scraping other second-hand and classifieds sites too? Pair DBA.dk with these:

- [Willhaben Scraper (Austria)](https://apify.com/logiover/willhaben-at-scraper)
- [Leboncoin Scraper (France)](https://apify.com/logiover/leboncoin-scraper)
- [Avito Scraper (Russia)](https://apify.com/logiover/avito-ru-scraper)
- [Blocket Scraper (Sweden)](https://apify.com/logiover/blocket-se-scraper)
- [Marktplaats Scraper (Netherlands)](https://apify.com/logiover/marktplaats-nl-scraper)
- [Bazaraki Scraper (Cyprus)](https://apify.com/logiover/bazaraki-scraper)
- [Craigslist Scraper](https://apify.com/logiover/craigslist-scraper)
- [Finn.no Scraper (Norway)](https://apify.com/logiover/finn-no-scraper)
- [Mercari Scraper (Japan)](https://apify.com/logiover/mercari-japan-scraper)
- [Subito Property Scraper (Italy)](https://apify.com/logiover/subito-it-property-scraper)
- [Boliga Scraper (Denmark real estate)](https://apify.com/logiover/boliga-scraper)
- [Njuškalo Property Scraper (Croatia)](https://apify.com/logiover/njuskalo-hr-property-scraper)

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

***

### ⏰ Scheduling & integration

Put the Actor on an **Apify Schedule** and get a fresh dba.dk listings feed every morning — straight to the **Apify API, a webhook, Google Sheets, Slack, S3, Zapier, Make** or your data warehouse. Track new listings and price drops across the Danish market on autopilot. Every run's dataset is available programmatically via the [Apify API](https://docs.apify.com/api/v2), so you can wire the output directly into your own pipelines.

***

### ⭐ Support & feedback

Found a bug, need a new field, or scraping a category that behaves oddly? Open an issue on the Actor's **Issues** tab. Feedback and feature requests are welcome — and a ⭐ on the Actor's page helps others discover it.

***

### ⚖️ Legal

This Actor accesses only publicly available information on dba.dk and does not bypass any login or authentication. You are responsible for using the collected data in compliance with dba.dk's terms of service, GDPR, and any other applicable laws and regulations. Do not use scraped personal data for spam or in violation of privacy law.

***

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by DBA.dk; DBA.dk and all other trademarks mentioned here are the property of their respective owners.

### 📝 Changelog

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: independence disclaimer added.

#### 2026-10-15

- Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Runs with a short timeout (API and AI-agent calls) now finish inside it with what they collected, instead of being cut off.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 26 columns returned, 70.1% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 7 column(s) came back empty in this sample (`make`, `model`, `year`, `mileage`, `fuel`, `transmission` and others); these are under review.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

#### 2026-07-06

- ✨ README overhaul: richer output sample, ready-to-run example scenarios, classifieds & marketplace cross-links, clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: comprehensive SEO rewrite — coverage for the dba.dk API alternative, scraping dba.dk car listings (dba biler), exporting Denmark classifieds data to CSV/Excel, and honest scope/coverage notes.

***

\*Maintained: last verified 2026-11-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/dba-dk-scraper/changelog.md

# Actor input Schema

## `searchUrls` (type: `array`):

dba.dk search or category URLs copied straight from the site. Cars: https://www.dba.dk/mobility/search/car?registration_class=1 — General items: https://www.dba.dk/recommerce/forsale/search?q=iphone or a category like https://www.dba.dk/recommerce/forsale/search?category=0.93 (Electronics). Set your filters on dba.dk, then paste the result URL(s) here. Leave empty to browse the whole marketplace (or pick a Category below).

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

Browse a whole dba.dk category — no URL needed. Only used when no Search URLs are provided above. 'Whole marketplace' (default) returns the newest listings across every category.

## `maxResults` (type: `integer`):

Stop after this many listings across all URLs. 0 = no limit (dba.dk caps a single search at 50 pages / ~2600 listings).

## `maxResultsPerSearch` (type: `integer`):

Cap listings per individual search/category URL. 0 = no per-search cap.

## `sellerType` (type: `string`):

Optionally keep only private sellers or only dealers. 'any' keeps everything the URL returns.

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy. Datacenter proxy works reliably on dba.dk and is the default.

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

Apify Proxy settings. Datacenter is enough for dba.dk; switch to Residential only if you hit blocks.

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

How many search/category URLs to process in parallel.

## Actor input object example

```json
{
  "searchUrls": [],
  "category": "",
  "maxResults": 285,
  "maxResultsPerSearch": 0,
  "sellerType": "any",
  "useProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

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

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "searchUrls": [],
    "maxResults": 285
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/dba-dk-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 = {
    "searchUrls": [],
    "maxResults": 285,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/dba-dk-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 '{
  "searchUrls": [],
  "maxResults": 285
}' |
apify call logiover/dba-dk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/dba-dk-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/whJ7gbiib5uuIwDgB/builds/2SbMPYE6kcyBToXKz/openapi.json
