# Trendyol \[$0.5💰] Products · Prices · Reviews · Seller Emails (`memo23/trendyol-scraper`) Actor

Scrape Trendyol in Turkey and 33 more countries (Germany, Bulgaria, Greece, Romania, Poland, UAE, Saudi Arabia and more): products, prices, specs, reviews, and every seller's contact details (email, address, tax ID) for the main and all other sellers. Goes past the 5,000-result limit.

- **URL**: https://apify.com/memo23/trendyol-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, AI, Agents
- **Features:** Limited permissions
- **Stats:** 99 total users, 31 monthly users, 97.5% runs succeeded, 0 bookmarks
- **User rating**: 4.36 out of 5 stars

## Pricing

from $0.50 / 1,000 product listings

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?

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

## Trendyol Scraper

**Turn Trendyol into structured product, pricing, seller & review data.** Scrape [Trendyol](https://www.trendyol.com) — Turkey's largest online marketplace — from any search, category, product, or reviews URL (or just a keyword). Get product **listings**, full **product detail** (price, discount, seller, specs, images, stock, rating), and **customer reviews** — plus optional **seller B2B contact emails**. Works on **Turkey and 33 more Trendyol marketplaces** (Germany, Austria, Bulgaria, Greece, Romania, Poland, Hungary, Czechia, the EU countries, UAE, Saudi Arabia, Qatar, Kuwait, ...), each in its own currency, with every seller's **contact details** (company name, email, address, tax and registration number) for the main seller and all other sellers of each product. JSON or CSV out, billed per result.

#### How it works

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

### Why use this Trendyol Scraper

- **Three levels of depth in one actor** — product listings, deep product detail, and full reviews. Turn any of them on or off to control cost.
- **Real seller intelligence** — every product carries its seller's brand **and official company name**, so you can map who sells what.
- **Opt-in seller B2B emails** — discover a contact email for each product's seller company. Best-effort, billed only per email found. (Most Trendyol products are sold by third-party merchants — real companies you can reach.)
- **Complete, paginated reviews** — not just a teaser: rating, title, comment text, date, seller, helpful-count, and reviewer size/variant, page after page.
- **34 marketplaces** — Turkey plus Germany, Austria, Belgium, Bulgaria, Croatia, Czechia, Denmark, Estonia, Finland, France, Greece, Hungary, Italy, Latvia, Lithuania, Luxembourg, Netherlands, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden, Serbia, Ukraine, Moldova, Qatar, Kuwait, Oman, Bahrain, UAE and Saudi Arabia. Pick countries in the input or paste their URLs; prices come back in each marketplace's own currency. A marketplace homepage URL crawls its Beauty category by default.
- **No 5,000-product ceiling** — Trendyol shows at most about 5,000 products per search or category. When you ask for more, the actor splits the listing into price ranges automatically and collects them all, without duplicates.
- **Every seller's contact details** — each product carries its main seller's company name, email, address, city, country, tax and registration number. Turn on **All sellers of each product** to get one row per seller of each product, including every other seller and their offer price.
- **Monitoring mode** — run on a schedule and get only the products you haven't seen before.
- **No browser, no CAPTCHA solving for you** — fast HTTP scraping with automatic retries and rotating residential proxies built in.

### Seller contact data

Trendyol's international marketplaces show each seller's legal details in the seller info box on the product page (fullest on the EU marketplaces). The actor returns them as columns, so you can export a seller list straight to Excel:

| Field | Example |
|---|---|
| `sellerName` / `sellerOfficialName` | ThinkInBeauty / BEAUTY LUXE DISTRIBUTIONS S.L. |
| `sellerEmail` | ana.cano@engelsa.com |
| `sellerAddress`, `sellerCity`, `sellerCountry` | C/ ASIPO, 4 07011 Palma de Mallorca / Palma / Spain |
| `sellerTaxNumber`, `sellerRegistrationNumber`, `sellerTaxOffice` | ESB57818197 |
| `sellerScore` | 9.5 |

With **All sellers of each product** on, you also get `type: "seller"` rows: one for the main seller and one for every other seller of the same product, each with its own `offerPrice`, `inStock`, `offerUrl` and full contact fields. A seller that appears on many products is looked up once per run. Use **Maximum products per keyword per country** to split the budget evenly when you crawl several marketplaces in one run.

**A list of brands:** enter them in **Brands or keywords** (one per line) and turn on **Only products from these brands**. Each brand is searched on every selected marketplace; if you paste marketplace homepages (`trendyol.com/de`, `/bg`, `/el`) instead of picking Countries, those marketplaces are used. Rows carry `searchKeyword`, so you can filter the export by brand.

**Several countries in one run:** select them in **Countries**. With no start URLs, each country runs your Keyword search, or its homepage category (Beauty by default). Some marketplaces share one web address (the EU English site `/en`, `/de` for Germany and Austria, `/ro` for Romania and Moldova); a pasted URL on a shared address runs once for each selected country that uses it.

### What it extracts

| Tier | What you get |
|---|---|
| **Product listing** | One row per product from a search or category page — name, brand, price, rating, image, badges, position. |
| **Product detail** | Full price / original / discounted / discount %, currency, rating breakdown, stock, favourite count, main seller (store name, company, email, address, tax and registration number), category, all images, and product specs/attributes. |
| **Sellers** *(opt-in)* | One row per seller of each product, main and every other seller, with their offer price, stock and the same contact details. |
| **Reviews** | Every review — rating, title, comment, date, seller name, helpful-count, reviewer size & variant (reviewer names are masked by Trendyol). |
| **Web email lookup** *(opt-in)* | A best-effort contact email + website found on the web for each product's seller company (mainly for Turkish sellers). |

### Supported inputs

Paste any of these into **Trendyol URLs** — they're auto-classified:

- **Search pages** — `https://www.trendyol.com/sr?q=laptop`
- **Category pages** — any Trendyol category listing URL
- **Product pages** — `https://www.trendyol.com/{brand}/{slug}-p-{id}`
- **Reviews pages** — `https://www.trendyol.com/{brand}/{slug}-p-{id}/yorumlar`

…or skip URLs entirely and just set a **Keyword** (e.g. `sneakers`, `coffee machine`, `laptop`).

### Use cases

- **Price & promotion monitoring** — track prices, discounts, and stock across competitors and your own catalog.
- **Competitive & catalog intelligence** — pull entire categories with brand, seller, specs, and ratings.
- **Seller / merchant research** — map third-party sellers on Trendyol and build B2B lead lists with the email add-on.
- **Review & reputation analysis** — mine full review corpora for sentiment, sizing feedback, and product issues.
- **Market research** — compare assortment, pricing bands and rating distributions across Turkey and the international Trendyol marketplaces.

### How it works

1. You provide search/category/product/reviews URLs or a keyword.
2. The actor collects products from each search or category page (with pagination) and returns a **listing** record for each.
3. For every product (optional), it opens the product page and returns a rich **detail** record — price, seller, specs, images, stock, rating.
4. For every product (optional), it pulls the **reviews**, page by page, up to your per-product limit.
5. Optionally, it discovers a **seller contact email** for each product's seller company.
6. Results stream to your dataset as clean JSON/CSV rows, each tagged with a `type` (`listing` / `product` / `review`).

### Input configuration

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Trendyol search, category, product or reviews URLs from any supported marketplace (auto-classified). A marketplace homepage such as `https://www.trendyol.com/de` crawls `storefrontRootCategory`. |
| `countries` | array | Marketplaces to crawl: `TR`, `DE`, `AT`, `BG`, `GR`, `RO`, `PL`, `HU`, `CZ`, `SK`, `NL`, `FR`, `IT`, `ES`, ... `AE`, `SA`. With no URLs, each runs the keyword search (or its homepage category). With URLs, picks the country for shared addresses (`/en`, `/de`, `/ro`). Empty = Turkey. |
| `keywords` | array | Search terms, e.g. a list of brand names (`Essence`, `Maybelline`, `L'Oreal`). One search per keyword per country. Countries come from `countries`, or from marketplace homepage URLs in `startUrls`. Every row carries `searchKeyword`. |
| `brandMatchOnly` | boolean | For brand lists: keep only products whose brand starts with the keyword. Skipped products are not charged. Default **false**. |
| `storefrontRootCategory` | string | Category for marketplace homepage URLs and keyword-less country runs. Default `beauty-x-c89` (Beauty). |
| `scrapeProductDetails` | boolean | Fetch each product's page: full price, main seller with contact details, specs, images, stock. Default **true**. |
| `includeOtherSellers` | boolean | One `seller` row per seller of each product (main + every other seller) with offer price and contact details. Default **false**. |
| `scrapeReviews` | boolean | Fetch each product's reviews. Default **false**. |
| `maxReviewsPerProduct` | integer | Cap reviews collected per product. Default `100`. |
| `enrichEmails` | boolean | Look up a seller email on the web (best-effort, billed per email found). Rarely needed outside Turkey. Default **false**. |
| `maxItems` | integer | Hard cap on **products** across all URLs and countries. Default `1000`. |
| `maxItemsPerStartUrl` | integer | Optional cap per URL, keyword or country, so one cannot use the whole budget. |
| `splitByPrice` | boolean | Go past Trendyol's ~5,000-result limit by splitting large listings into price ranges. Default **true**. |
| `monitoringMode` | boolean | Only return products not seen on previous runs. Default **false**. |
| `resetMonitoringState` | boolean | One-shot: clear the "products already seen" record. |
| `maxConcurrency` | integer | Product pages processed in parallel. Default `10`. |
| `maxRequestRetries` | integer | Retries per page on a fresh IP before it is skipped. Default `7`. |
| `proxy` | object | Optional. A residential proxy is built in; set this only to use your own. |

### Output samples

**Product listing**

```json
{
  "source": "trendyol",
  "type": "listing",
  "productId": "879885114",
  "name": "Unisex Beyaz Siyah Termo Taban Yanı Şeritli Bağcıklı Spor Ayakkabı",
  "brand": "Tonny Black",
  "categoryName": "Sneaker",
  "price": 699.95,
  "currency": "TL",
  "ratingAverage": 4.08,
  "ratingCount": 4558,
  "freeCargo": true,
  "url": "https://www.trendyol.com/tonny-black/...-p-879885114"
}
```

**Product detail**

```json
{
  "source": "trendyol",
  "type": "product",
  "productId": "879885114",
  "name": "Tonny Black Unisex Beyaz Siyah ... Spor Ayakkabı",
  "price": 1249,
  "priceText": "1.249 TL",
  "currency": "TL",
  "currencyCode": "TRY",
  "discountedPrice": 1161.57,
  "discountPercentage": 7,
  "ratingAverage": 4.08,
  "commentCount": 2729,
  "inStock": true,
  "favoriteCount": 249755,
  "sellerName": "Tonny Black",
  "sellerOfficialName": "AYPİMA AYAKKABI İMALAT PAZARLAMA VE MATBAACILIK SANAYİ TİCARET LİMİTED ŞİRKETİ",
  "attributes": [{ "name": "Cinsiyet", "value": "Unisex" }],
  "images": ["https://cdn.dsmcdn.com/..."]
}
```

**Review**

```json
{
  "source": "trendyol",
  "type": "review",
  "productId": "819543890",
  "reviewId": "423518919",
  "userFullName": "D** T**",
  "rate": 5,
  "comment": "Çok güzel bir numara büyük almanızı öneririm...",
  "date": "06 Eylül 2024",
  "sellerName": "Tonny Black",
  "likeCount": 4,
  "productSize": "41"
}
```

**Product with seller email** (when `enrichEmails` is on)

```json
{
  "type": "product",
  "sellerOfficialName": "AYPİMA AYAKKABI İMALAT ... LİMİTED ŞİRKETİ",
  "contactEmail": "info@example.com",
  "contactWebsite": "https://example.com",
  "emailEnrichment": { "emails": ["info@example.com"], "website": "https://example.com" }
}
```

### Key output fields

- **Identity:** `productId`, `productGroupId`, `productCode`, `name`, `brand`, `categoryName`, `url`
- **Pricing:** `price`, `priceText`, `currency`, `currencyCode`, `originalPrice`, `discountedPrice`, `discountPercentage`
- **Signals:** `ratingAverage`, `ratingCount`, `commentCount`, `favoriteCount`, `inStock`, `freeCargo`
- **Seller:** `sellerName`, `sellerOfficialName`, `sellerId` (+ `contactEmail` / `contactWebsite` when enrichment is on)
- **Detail:** `attributes[]` (specs), `images[]`
- **Reviews:** `reviewId`, `rate`, `title`, `comment`, `date`, `sellerName`, `likeCount`, `productSize`, `variant`

### FAQ

**Which currency are prices in?** Each marketplace's own: Turkish Lira on trendyol.com, euro on most EU marketplaces, and the local currency elsewhere (HUF, RON, PLN, CZK, AED, SAR, ...). Every row carries `currencyCode` and `storefront`.

**Do reviews include the reviewer's name?** No — Trendyol masks reviewer names (e.g. `D** T**`). Rating, title, comment text, date, size, and helpful-count are all included.

**Can I get all reviews for a product?** Yes — reviews are collected page by page up to your `maxReviewsPerProduct` limit (popular products can have thousands).

**Does it include seller emails?** Yes, wherever Trendyol shows the seller's legal details (all EU marketplaces, and most others): email, address, tax and registration number come with each product, and with **All sellers of each product** for every other seller too. `enrichEmails` additionally searches the web for a contact email, mainly useful for Turkish sellers.

**Can I get more than 5,000 products from one category?** Yes. Trendyol pages through about 5,000 per search; the actor splits larger listings into price ranges automatically and skips duplicates.

**Do I need my own proxies?** No — residential proxies are built in.

**Can I run it on a schedule for only new products?** Yes — enable **Monitoring mode**.

### Support

Questions, a field you need, or a custom Trendyol data pipeline? Open an issue on the actor's **Issues** tab and we'll help.

### 🤖 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/trendyol-scraper`).

**Purpose:** Extract Trendyol product listings, full product detail, every seller's contact details, and customer reviews as flat rows, from Turkey and 33 international Trendyol marketplaces, each in its own currency.

**Minimal input:**

```json
{ "keyword": "laptop", "maxItems": 50 }
```

Brand list on three marketplaces, with all sellers:

```json
{ "startUrls": ["https://www.trendyol.com/de", "https://www.trendyol.com/bg", "https://www.trendyol.com/el"], "keywords": ["Essence", "Maybelline", "L'Oreal"], "brandMatchOnly": true, "includeOtherSellers": true, "maxItems": 3000, "maxItemsPerStartUrl": 300 }
```

Multi-country with all sellers:

```json
{ "startUrls": ["https://www.trendyol.com/de", "https://www.trendyol.com/bg"], "includeOtherSellers": true, "maxItems": 400, "maxItemsPerStartUrl": 200 }
```

`keywords` (array) runs one search per keyword per country (countries from `countries`, or from marketplace homepage URLs in `startUrls`); with `brandMatchOnly` only that brand's products are kept. `startUrls` accepts search (`/sr?q=...`), category, product (`.../{slug}-p-{id}`) and reviews (`.../{slug}-p-{id}/yorumlar`) URLs from any supported marketplace; a marketplace homepage crawls `storefrontRootCategory` (default Beauty).

**Output:** rows tagged by `type` (`listing` / `product` / `seller` / `review`), each with `storefront` (country code). listing: `productId`, `name`, `brand`, `categoryName`, `price`, `currency`, `ratingAverage`, `ratingCount`, `url`; product: `priceText`, `currencyCode`, `originalPrice`, `discountedPrice`, `inStock`, `sellerName`, `sellerOfficialName`, `sellerEmail`, `sellerAddress`, `sellerCity`, `sellerCountry`, `sellerTaxNumber`, `sellerRegistrationNumber`, `sellerScore`, `otherSellerCount`, `attributes[]`, `images[]`; seller: `isMainSeller`, `sellerPosition`, `sellerName`, `sellerOfficialName`, `sellerEmail`, `sellerAddress`, `sellerTaxNumber`, `offerPrice`, `currencyCode`, `inStock`, `offerUrl`, `contactFetched`; review: `reviewId`, `rate`, `comment`, `date`, `sellerName`.

**Behaviors an agent should know:**

- Always set `maxItems`: it caps PRODUCTS (default 1000); each product can fan out to a detail page, seller rows and reviews. Use `maxItemsPerStartUrl` to share the budget across countries.
- Some marketplaces share one address (`/en` for most EU countries, `/de` for Germany and Austria, `/ro` for Romania and Moldova); set `countries` to say which ones a shared URL means.
- Seller contact details come from the marketplace's own seller disclosure; they are fullest on the EU marketplaces. A seller is looked up once per run.
- `splitByPrice` (default true) lets one search or category return more than Trendyol's ~5,000-result page limit.
- `monitoringMode` returns only products not delivered on earlier runs (tracked per country); `resetMonitoringState` clears that baseline.
- Billed per event: product listing, product detail, seller row, review, and web-found email.

### ⚠️ Disclaimer

This actor scrapes only publicly available information from Trendyol. It does not log in, does not access private data, and returns reviewer names exactly as Trendyol displays them (masked). Use the data in compliance with Trendyol's Terms of Service and applicable laws (including data-protection rules when using seller contact data for outreach). You are responsible for how you use the output.

### SEO keywords

Trendyol scraper, Trendyol product scraper, Trendyol price scraper, Trendyol review scraper, Trendyol seller scraper, Trendyol API, Turkey e-commerce scraper, Trendyol data extraction, Trendyol product data, Trendyol reviews, Trendyol pricing, Trendyol seller emails, Turkish marketplace scraper, Trendyol Germany scraper, Trendyol Europe scraper, Trendyol seller contact details, Trendyol marketplace sellers, e-commerce price monitoring, product catalog scraper.

# Actor input Schema

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

Which Trendyol marketplaces to search. Pick one or more, e.g. Germany, Bulgaria, Greece. Empty = Turkey.

## `keywords` (type: `array`):

One per line, e.g. Essence, Maybelline, L'Oreal. Each is searched in every selected country. Leave empty to crawl a whole category instead (see Advanced).

## `brandMatchOnly` (type: `boolean`):

Turn on when the list above is brand names: products of other brands that show up in the search are skipped (and not charged).

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

Instead of countries + keywords you can paste Trendyol links: a search, category, product or reviews page, from any marketplace. A marketplace homepage such as https://www.trendyol.com/de counts as choosing that country.

## `scrapeProductDetails` (type: `boolean`):

Full price, stock, specs, images, rating, and the main seller's company name, email, address, tax and registration number.

## `includeOtherSellers` (type: `boolean`):

Adds one row per seller of each product (main seller and every other seller) with their price and contact details.

## `scrapeReviews` (type: `boolean`):

Each product's customer reviews.

## `maxReviewsPerProduct` (type: `integer`):

Only used when Reviews is on.

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

Total cap across all countries and keywords. Controls cost.

## `maxItemsPerStartUrl` (type: `integer`):

Optional. E.g. 300 = at most 300 products for each brand in each country. Empty = no per-keyword cap.

## `monitoringMode` (type: `boolean`):

On scheduled runs, return only products you have not received before.

## `resetMonitoringState` (type: `boolean`):

Forget which products were already delivered, and start a new baseline.

## `storefrontRootCategory` (type: `string`):

Category path from a Trendyol category link. Default `beauty-x-c89` (Beauty).

## `splitByPrice` (type: `boolean`):

Trendyol shows about 5,000 products per search; larger ones are split by price range automatically.

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

Searches the web for a seller email. Rarely needed: the seller's email already comes with Product details on most marketplaces.

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

Product pages processed in parallel.

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

How many times a blocked or empty page is retried on a fresh IP before it is skipped.

## `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
{
  "countries": [
    "TR"
  ],
  "brandMatchOnly": false,
  "scrapeProductDetails": true,
  "includeOtherSellers": false,
  "scrapeReviews": false,
  "maxReviewsPerProduct": 100,
  "maxItems": 1000,
  "monitoringMode": false,
  "resetMonitoringState": false,
  "storefrontRootCategory": "beauty-x-c89",
  "splitByPrice": true,
  "enrichEmails": false,
  "maxConcurrency": 10,
  "maxRequestRetries": 7
}
```

# 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": [
        "TR"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/trendyol-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 = { "countries": ["TR"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/trendyol-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 '{
  "countries": [
    "TR"
  ]
}' |
apify call memo23/trendyol-scraper --silent --output-dataset

```

## MCP server setup

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