# Vinted Real-Time Data | Live Resale Intelligence (`b2b_leads/vinted-real-time-data-scraper`) Actor

Live Vinted resale market intelligence: keyword search, full listing details, wardrobe inventory, seller profiles, sold comps, and URL collection. Stream structured JSON in real time to your dataset, with Slack/Discord deal alerts. Built for thrift resellers, arbitrage, and pricing teams.

- **URL**: https://apify.com/b2b\_leads/vinted-real-time-data-scraper.md
- **Developed by:** [Emmanuel](https://apify.com/b2b_leads) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 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?

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

## Vinted Real-Time Data

**Live resale market intelligence, thrift price comps, wardrobe inventory, and a vintage deal finder for Vinted.**

Search the live Vinted marketplace by keyword, pull full listing records, track reseller wardrobes, profile sellers, check completed-listing comps, and process any Vinted URL — all streamed to your dataset as structured JSON the moment each row is ready.

> ⚠️ **Free Apify plans are capped at 2 results per run.** Upgrade to a paid Apify plan for unlimited vintage and thrift data exports. Paid runs are never capped.

***

### Who this is for

- **Vintage & thrift resellers** cross-listing on Vinted, Poshmark, eBay, Depop, Mercari, and Grailed.
- **Consignment owners and sourcing teams** who need fresh inventory before it sells.
- **Resale arbitrageurs** hunting underpriced Carhartt, gorpcore, Y2K, and designer denim.
- **Pricing teams and fashion researchers** modelling sell-through and category demand.
- **AI agents and pricing bots** that need a clean, portable resale schema.

### What you can do with it

- **Find undervalued inventory fast** — vintage single-stitch tees, designer denim, gorpcore shells, Y2K drops, deadstock workwear.
- **Check comps before you price** — confirm what similar pieces actually sell for.
- **Monitor competitor wardrobes** — watch a reseller's stock and repricing moves over time.
- **Get deal alerts in Slack or Discord** — every new row can be pushed to your channel in real time.
- **Keep multi-platform pricing in sync** — the output schema is portable across the whole thrift suite.
- **Feed an AI agent** — ask pricing and sourcing questions through the Apify MCP server.

***

### Feature matrix

| Feature | Checkbox | Default | What it returns |
| --- | --- | --- | --- |
| **Listing Search** | `enableListingSearch` | ✅ On | Live keyword search with brand, condition, price, and sort filters. |
| **Listing Details** | `enableListingDetails` | Off | Full records for specific listing URLs or IDs. |
| **Wardrobe Listings** | `enableClosetListings` | Off | A seller's full active wardrobe inventory. |
| **Seller Profile** | `enableSellerProfile` | Off | Reseller stats: followers, rating, reviews, wardrobe size, location. |
| **Sold Item Comps / History** | `enableSoldHistory` | Off | Completed-listing comps for pricing and sell-through. |
| **Scrape By URL** | `enableScrapeByUrl` | Off | Any Vinted URL — search, wardrobe, category, brand, or single listing. |

Enable only what you need. Everything streams to the dataset as it is collected, so RAM stays light even on 10,000+ item runs.

#### One row per listing — never duplicated

When **Listing Search** is on, each discovered listing is exactly **one row**. If you also turn on **Enrich with full listing details** (`searchFetchFullDetails`), that same row is enriched in place with description, fabric/material, colour, the full image gallery, and seller context — the row is marked `detailsFetched: true`. Nothing is filtered out, and no second copy of the row is created.

***

### Input reference

#### 🌍 Region

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `country` | string (select) | `US` | Vinted market. Affects currency and the recommended proxy country. Options include US, UK, IE, FR, DE, ES, IT, NL, BE, AT, PT, PL, LT, SE, CZ, HU, SK, RO, DK, FI, GR. |

#### 🔍 Listing Search

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableListingSearch` | boolean | `true` | On by default. |
| `searchKeywords` | string\[] | `["carhartt detroit jacket", "vintage 90s levis 501", "patagonia fleece"]` | One search per keyword. |
| `searchMaxResults` | integer | `10` | Per keyword, 1–200. |
| `searchSort` | select | `relevance` | `relevance`, `newest`, `price_low_to_high`, `price_high_to_low`. |
| `searchBrand` | string | — | True brand filter, e.g. `Carhartt`, `Levi's`, `Patagonia`. |
| `searchCondition` | select | `Any` | `new_with_tags`, `new_without_tags`, `very_good`, `good`, `satisfactory`. |
| `searchMinPrice` | integer | — | Market currency. |
| `searchMaxPrice` | integer | — | Market currency. |
| `searchFetchFullDetails` | boolean | `false` | Enrich each search row in place. |

**Example searches:** `carhartt detroit jacket`, `vintage 90s levis 501`, `patagonia fleece`, `single stitch band tee`, `stussy hoodie`, `ralph lauren cable knit`, `nike acg jacket`, `y2k baby tee`.

#### 📦 Listing Details

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableListingDetails` | boolean | `false` | |
| `listingUrls` | string\[] | `[]` | Full listing URLs. |
| `listingIds` | string\[] | `[]` | Numeric listing IDs. |

#### 👚 Wardrobe Listings

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableClosetListings` | boolean | `false` | |
| `sellerUsernames` | string\[] | `[]` | Vinted member URLs or numeric member IDs. Shared with Seller Profile. |
| `sellerMaxListings` | integer | `30` | Per seller, 1–1000. |

#### 👤 Seller Profile

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableSellerProfile` | boolean | `false` | Uses the same seller list. |

#### 🧾 Sold Item Comps / History

Vinted removes sold items from public wardrobes, so there is no browse-all sold feed. This feature works from the **sold listing URLs or IDs you provide** and reports each listing's final status and last price — the comp data behind pricing decisions.

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableSoldHistory` | boolean | `false` | |
| `soldItemUrls` | string\[] | `[]` | Sold or completed listing URLs. |
| `soldItemIds` | string\[] | `[]` | Sold or completed listing IDs. |
| `soldMaxItems` | integer | `30` | Per run, 1–1000. |

#### 🔗 Scrape By URL

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `enableScrapeByUrl` | boolean | `false` | |
| `scrapeUrls` | string\[] | `[]` | Any Vinted search, member, category, brand, or listing URL. Page type is detected automatically. |

#### 🔔 Delivery & 🌐 Connection

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `webhookUrl` | string | — | Optional real-time push in addition to the dataset. |
| `webhookFormat` | select | `json` | `json` or `slack`. |
| `proxyConfiguration` | object | Apify Residential (US) | Residential proxy recommended. Match the country to the market. |

***

### Output schema

Every row shares a portable core so you can union datasets across platforms:

`featureType, scrapedAt, url, item_id, item_url, title, description, main_image_url, additional_image_urls, status, current_price, original_price, currency, discount_percentage, brand, size, condition, category, department, color, style_tags, material, likes_count, is_sold, seller_username, seller_id, detailsFetched`

`featureType` is one of: `listing_search`, `listing_details`, `closet_listings`, `seller_profile`, `sold_history`, `scrape_by_url`.

#### Pricing & engagement

| Field | Meaning |
| --- | --- |
| `current_price` | Listed price in the market currency. |
| `total_price` | All-in price incl. Buyer Protection, when shown. |
| `service_fee` | Buyer Protection fee, when available. |
| `original_price` / `discount_percentage` | Markdown baseline and % off, when the seller has reduced the price. |
| `currency` | ISO currency for the selected market (`USD`, `GBP`, `EUR`, …). |
| `likes_count` | Favourites/saves — a strong demand signal. |
| `views_count` | Views, when available (wardrobe inventory). |
| `is_promoted` | Seller bumped the listing for extra exposure. |

#### Product attributes

| Field | Meaning |
| --- | --- |
| `brand` / `brand_id` | Brand name and catalog id. |
| `size` | Seller-declared size. |
| `condition` | New with tags → Satisfactory. |
| `category` / `department` | Marketplace taxonomy. |
| `color` / `material` | Colour and fabric. |
| `style_tags` / `hashtags` | Style descriptors and hashtags. |

#### Seller metrics

| Field | Meaning |
| --- | --- |
| `seller_username` / `seller_id` | Seller identity. |
| `seller_rating` / `seller_review_count` | Rating and number of reviews (Seller Profile). |
| `followers` / `following` | Social proof (Seller Profile). |
| `total_listings` | Active wardrobe size (Seller Profile). |
| `seller_items_listed` | Wardrobe size observed alongside a listing. |
| `location` / `city` / `country` | Seller location. |

#### Status & metadata

| Field | Meaning |
| --- | --- |
| `status` | `available`, `sold`, `reserved`, `hidden`, `not_for_sale`, or `deleted`. |
| `is_sold` / `is_reserved` | Clear boolean flags for filtering. |
| `detailsFetched` | `true` when a search row was enriched in place. |
| `position` | Rank within the page the item was found on. |
| `pageType` | Detected page type on `scrape_by_url` rows. |

Dataset views are available per feature (`All results`, `Overview`, `Listing Search`, `Listing Details`, `Wardrobe Listings`, `Seller Profiles`, `Sold Item Comps`, `Scrape By URL`).

***

### Webhook guide

Every record is always saved to the run dataset. If you set `webhookUrl`, each new row is **also** POSTed to your URL in real time (Slack, Discord, Zapier, Make, n8n, or your own pricing bot). Delivery is best-effort and never blocks the run.

**Slack** (`webhookFormat: "slack"`) sends a ready-to-post message:

```json
{
  "text": ":shopping_bags: *Carhartt Detroit Jacket*\n*Type:* listing_search  •  *Price:* USD 65 (was USD 90)  •  *Brand:* Carhartt  •  *Size:* M  •  *Condition:* Very good  •  *Seller:* thrifty_mia  •  42 favourites\n<https://www.vinted.com/items/123456789-carhartt-detroit-jacket|Open on Vinted>"
}
```

**JSON** (`webhookFormat: "json"`) sends the full dataset record object, so your bot can read any field directly.

***

### Use with AI agents (Apify MCP)

Connect the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) and point your agent at this Actor. Example questions:

- "What is the average asking price for a 90s Carhartt J97 jacket on Vinted?"
- "Find underpriced Patagonia fleece listings under €40 and alert my Slack channel."
- "List every item in this seller's wardrobe and flag anything more than 30 days old."
- "Compare sold comps for Levi's 501 to live asking prices."

***

### FAQ

**How fresh is the data?** Every row is collected live during your run and streamed immediately — there is no cached or stale inventory.

**Do I need a proxy?** A residential proxy is recommended and is the Apify default. Match its country to the market for the most reliable results, especially at scale.

**Why am I only getting 2 results?** Free Apify plans are capped at a 2-result sample per run. Upgrade to a paid plan for unlimited exports. This is a policy limit, not a bug.

**Can I get more than 200 results per keyword?** Run multiple keywords, or use Wardrobe Listings and Scrape By URL to walk a seller or category in full.

**How do I avoid seeing the same listing twice?** Rows are de-duplicated by listing identity within a run, so a listing is written once.

**Why is `is_sold` false almost everywhere on search?** Live search returns active stock. Use Sold Item Comps with completed listing URLs to check final prices.

**Will it work for other markets?** Yes — pick the market in the Region section; currency and matching proxy country follow automatically.

***

### Local development

```bash
npm install
cp .env.example .env      # add your residential proxy values
cp local.input.example.json local.input.json
npm run start:local       # streams rows to output/local_results.jsonl
```

```bash
npm run typecheck
npm run build
```

Never commit `.env` or `local.input.json` with real values.

***

### Output contract portability

Field names intentionally line up with the wider thrift & resale suite so a single pricing bot or warehouse can union Vinted, Poshmark, Depop, Grailed, Mercari, ShopGoodwill, and eBay datasets without per-site remapping.

# Actor input Schema

## `country` (type: `string`):

Vinted market for this run. Affects currency and the recommended proxy country.

## `enableListingSearch` (type: `boolean`):

Live keyword search across Vinted — thrift brands, streetwear, and vintage finds. On by default and prefilled so you can click Start and get results in seconds.

## `searchKeywords` (type: `array`):

One or more search terms, e.g. "carhartt detroit jacket", "vintage 90s levis 501", "patagonia fleece", "single stitch band tee". Required when Listing Search is on.

## `searchMaxResults` (type: `integer`):

Maximum listings to return for each keyword (1–200). Default 10 — perfect for instant demo runs.

## `searchSort` (type: `string`):

How to order search results. "Just listed" is ideal for deal alerts on fresh inventory.

## `searchBrand` (type: `string`):

Limit results to a brand, e.g. Carhartt, Levi's, Patagonia, The North Face, Stüssy, Ralph Lauren.

## `searchCondition` (type: `string`):

Filter by item condition.

## `searchMinPrice` (type: `integer`):

Minimum listing price in the selected market currency.

## `searchMaxPrice` (type: `integer`):

Maximum listing price — pair with "Just listed" sort to catch underpriced steals fast.

## `searchFetchFullDetails` (type: `boolean`):

When on, each search result stays ONE row (featureType listing\_search, detailsFetched=true) but is enriched with description, fabric/material, colour, full image gallery, and seller context. Adds a little extra time per listing. When off, you get fast search cards with price, title, brand, size, favourites, and condition. Every discovered item is always saved — never filtered out.

## `enableListingDetails` (type: `boolean`):

Fetch the full record for specific Vinted listings by URL or listing ID.

## `listingIds` (type: `array`):

Vinted listing IDs, e.g. 10114456571.

## `listingUrls` (type: `array`):

Full Vinted listing URLs (https://www.vinted.com/items/...).

## `enableClosetListings` (type: `boolean`):

Collect the full active inventory of any reseller or thrift wardrobe — track competitor stock and repricing moves.

## `sellerUsernames` (type: `array`):

Vinted member URLs (https://www.vinted.com/member/12345-username) or numeric member IDs. Shared by Wardrobe Listings, Seller Profile, and Sold Comps.

## `sellerMaxListings` (type: `integer`):

Maximum active listings to collect per wardrobe (1–1000).

## `enableSellerProfile` (type: `boolean`):

Extract reseller stats: followers, rating and reviews, wardrobe size, verification signals, and location.

## `enableSoldHistory` (type: `boolean`):

Completed-listing comps for pricing decisions. Vinted hides sold items from public wardrobes, so this works from sold listing URLs or IDs you provide and reports final status and last price.

## `soldItemUrls` (type: `array`):

Sold or completed Vinted listing URLs to check for comps.

## `soldItemIds` (type: `array`):

Sold or completed Vinted listing IDs to check for comps.

## `soldMaxItems` (type: `integer`):

Maximum sold listings to check per run (1–1000).

## `enableScrapeByUrl` (type: `boolean`):

Paste any Vinted URL — search results, member wardrobe, category page, brand feed, or single listing.

## `scrapeUrls` (type: `array`):

Any Vinted search, member, category, brand, or listing URL.

## `webhookUrl` (type: `string`):

Optional. Every record is always saved to the run dataset — this webhook is an ADDITIONAL real-time push. Each new row is also POSTed to this URL (Slack, Discord, Zapier, Make, n8n, custom pricing bot).

## `webhookFormat` (type: `string`):

json = full record object; slack = Slack-friendly message payload.

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

Residential proxy recommended. Match the country to the Market region above (US by default).

## Actor input object example

```json
{
  "country": "US",
  "enableListingSearch": true,
  "searchKeywords": [
    "carhartt detroit jacket",
    "vintage 90s levis 501",
    "patagonia fleece"
  ],
  "searchMaxResults": 10,
  "searchSort": "relevance",
  "searchBrand": "",
  "searchCondition": "",
  "searchFetchFullDetails": false,
  "enableListingDetails": false,
  "listingIds": [],
  "listingUrls": [],
  "enableClosetListings": false,
  "sellerUsernames": [
    "https://www.vinted.com/member/3186166439-abbier399"
  ],
  "sellerMaxListings": 30,
  "enableSellerProfile": false,
  "enableSoldHistory": false,
  "soldItemUrls": [],
  "soldItemIds": [],
  "soldMaxItems": 30,
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://www.vinted.com/catalog?search_text=vintage%20carhartt"
  ],
  "webhookUrl": "",
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Full dataset for this run (every featureType).

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

Core fields across features, including detailsFetched for search rows.

## `search` (type: `string`):

featureType=listing\_search only. One listing = one row; full details are merged when "Enrich with full listing details" is enabled.

## `details` (type: `string`):

featureType=listing\_details — only from the Listing Details feature (specific IDs/URLs), not from search enrichment.

## `closet_listings` (type: `string`):

No description

## `seller_profile` (type: `string`):

No description

## `sold_history` (type: `string`):

No description

## `scrape_by_url` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "country": "US",
    "enableListingSearch": true,
    "searchKeywords": [
        "carhartt detroit jacket",
        "vintage 90s levis 501",
        "patagonia fleece"
    ],
    "searchMaxResults": 10,
    "searchSort": "relevance",
    "searchCondition": "",
    "searchFetchFullDetails": false,
    "enableListingDetails": false,
    "listingIds": [],
    "listingUrls": [],
    "enableClosetListings": false,
    "sellerUsernames": [
        "https://www.vinted.com/member/3186166439-abbier399"
    ],
    "sellerMaxListings": 30,
    "enableSellerProfile": false,
    "enableSoldHistory": false,
    "soldItemUrls": [],
    "soldItemIds": [],
    "soldMaxItems": 30,
    "enableScrapeByUrl": false,
    "scrapeUrls": [
        "https://www.vinted.com/catalog?search_text=vintage%20carhartt"
    ],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/vinted-real-time-data-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 = {
    "country": "US",
    "enableListingSearch": True,
    "searchKeywords": [
        "carhartt detroit jacket",
        "vintage 90s levis 501",
        "patagonia fleece",
    ],
    "searchMaxResults": 10,
    "searchSort": "relevance",
    "searchCondition": "",
    "searchFetchFullDetails": False,
    "enableListingDetails": False,
    "listingIds": [],
    "listingUrls": [],
    "enableClosetListings": False,
    "sellerUsernames": ["https://www.vinted.com/member/3186166439-abbier399"],
    "sellerMaxListings": 30,
    "enableSellerProfile": False,
    "enableSoldHistory": False,
    "soldItemUrls": [],
    "soldItemIds": [],
    "soldMaxItems": 30,
    "enableScrapeByUrl": False,
    "scrapeUrls": ["https://www.vinted.com/catalog?search_text=vintage%20carhartt"],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/vinted-real-time-data-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 '{
  "country": "US",
  "enableListingSearch": true,
  "searchKeywords": [
    "carhartt detroit jacket",
    "vintage 90s levis 501",
    "patagonia fleece"
  ],
  "searchMaxResults": 10,
  "searchSort": "relevance",
  "searchCondition": "",
  "searchFetchFullDetails": false,
  "enableListingDetails": false,
  "listingIds": [],
  "listingUrls": [],
  "enableClosetListings": false,
  "sellerUsernames": [
    "https://www.vinted.com/member/3186166439-abbier399"
  ],
  "sellerMaxListings": 30,
  "enableSellerProfile": false,
  "enableSoldHistory": false,
  "soldItemUrls": [],
  "soldItemIds": [],
  "soldMaxItems": 30,
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://www.vinted.com/catalog?search_text=vintage%20carhartt"
  ],
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call b2b_leads/vinted-real-time-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_leads/vinted-real-time-data-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/hJEs5YnhwtsPbTxus/builds/t4KzFL6Mbv44zwizx/openapi.json
