# Vivino Wines Scraper (`parseforge/vivino-wines-scraper`) Actor

Scrape Vivino wines with rating, price, winery, region, grapes, taste profile and food pairings. Filter by type, country, price and rating. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/vivino-wines-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 wine scrapeds

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v3.webp)

## 🍷 Vivino Wines Scraper

> 🚀 **Export Vivino wines in seconds.** Up to 41 fields per wine, including the community rating, bottle price, winery, region, grapes, taste profile and food pairings, with no Vivino account and no API key.

Vivino is the largest wine community in the world, and its explore feed lists every wine a merchant currently sells in your market with the rating drinkers gave it. This Actor reads that public feed and returns one flat row per wine vintage: how good drinkers say it is, what a merchant asks for it, and what it tastes like.

Filter by wine type, country of origin, price range and minimum rating, sort by rating, popularity or price, and let the Actor walk the results. A search that Vivino itself would stop after about 2,300 wines is cut into price bands automatically, so a big export still comes back complete. Switch on the detail columns to add alcohol percent, the drinking window, global and country rank and the critic score average from each wine's own page.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Wine retailers and importers | Benchmark your shelf prices against what the market asks |
| Restaurants and sommeliers | Build a list of highly rated wines inside a price ceiling |
| Wine apps and recommendation sites | Seed a catalogue with ratings, grapes and flavor data |
| Market researchers | Track rating and price by country, grape and vintage |
| Wine investors and collectors | Spot rated bottles with a global rank and a drinking window |
| Data and ML teams | Train taste and rating models on a labelled wine table |

### 📋 What the Vivino Wines Scraper does

> 💡 **Why it matters:** a price list tells you what a bottle costs. A rating tells you whether to buy it. This Actor puts both in one row.

- Collects wines from Vivino's public explore feed, one row per vintage.
- Returns the average rating and rating count for the vintage and for the wine across all vintages.
- Adds the lowest merchant offer: price, currency, bottle size, a link to the merchant, and any discount.
- Adds winery, region, country, wine type, style, grapes, body and acidity.
- Adds the taste profile: intensity, sweetness, tannin and acidity scores, plus the top flavors drinkers mention.
- Adds food pairings and any Vivino top-list rankings the wine holds.
- Filters by wine type, country of origin, price range and minimum rating.
- Sorts by average rating, number of ratings or price.
- Slices large searches into price bands, so one query is not capped at about 2,300 wines.
- Optional detail columns: alcohol percent, drinking window, global and country rank, critic score average and count, biodynamic flag.
- Dedupes on the Vivino vintage ID, so a wine never appears twice in one run.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every row is one Vivino wine vintage. The columns marked detail appear only when **Add Detail Columns** is on.

| Field | Type | Description |
| --- | --- | --- |
| 🖼 `imageUrl` | string | Bottle photo |
| 🍷 `wineName` | string | Full wine name with the vintage |
| 🏭 `winery` | string | Producer |
| 📅 `vintageYear` | number | Vintage year, or `N/V` for a non-vintage wine |
| 🎨 `wineType` | string | Red, White, Sparkling, Rosé, Dessert or Fortified |
| 🧭 `wineStyle` | string | Vivino style, for example `Italian Amarone` |
| 📍 `region` | string | Wine region |
| 🌍 `country` | string | Country of origin |
| ⭐ `rating` | number | Average rating of this vintage, 1 to 5 |
| 💬 `ratingsCount` | number | Ratings behind the vintage average |
| 📊 `wineRating` | number | Average rating across all vintages of the wine |
| 🗳 `wineRatingsCount` | number | Ratings across all vintages |
| 💵 `price` | number | Merchant price for one bottle |
| 💱 `currency` | string | Currency of the market |
| 🏷 `priceBeforeDiscount` | number | Price before a discount, or `N/A` |
| 🍾 `bottleSize` | string | Bottle size of the offer |
| 🛒 `offerUrl` | string | Merchant offer link |
| 🧮 `offersCount` | number | Merchant offers returned |
| 🍇 `grapes` | string | Grape varieties |
| 💪 `body` | string | Body description |
| 🍋 `acidity` | string | Acidity description |
| 🔥 `tasteIntensity` | number | Intensity score |
| 🍯 `tasteSweetness` | number | Sweetness score |
| 🌰 `tasteTannin` | number | Tannin score |
| 🍏 `tasteAcidity` | number | Acidity score |
| 👃 `topFlavors` | string | Flavors drinkers mention most |
| 🍽 `foodPairings` | string | Foods Vivino suggests |
| 🏆 `topListRankings` | string | Vivino top lists the wine is on, or `N/A` |
| 🌿 `isNatural` | string | `Yes` for a natural wine |
| 🆔 `wineId` | string | Vivino wine ID |
| 🔢 `vintageId` | string | Vivino vintage ID |
| 🔗 `url` | string | Vivino page URL |
| 🥃 `alcoholPercent` | number | Alcohol by volume (detail) |
| ⏳ `drinkingWindow` | string | Recommended drinking years (detail) |
| 🌐 `globalRank` | number | Global Vivino rank (detail) |
| 🚩 `countryRank` | number | Rank within the country (detail) |
| 🎓 `criticScoreAverage` | number | Average critic score (detail) |
| 📰 `criticReviewCount` | number | Critic reviews found (detail) |
| ♻️ `biodynamic` | string | `Yes` when certified biodynamic (detail) |
| 🕒 `scrapedAt` | string | ISO 8601 timestamp of the extraction |
| ❌ `error` | string | Error message on a failed row, `null` on a real wine |

Three real records from a run:

```json
[
  {
    "imageUrl": "https://images.vivino.com/thumbs/RqFtSGpgTlKL1VwkBjccxA_pl_480x640.png",
    "wineName": "Quintarelli Giuseppe Amarone della Valpolicella Classico 2003",
    "winery": "Quintarelli Giuseppe",
    "vintageYear": 2003,
    "wineType": "Red",
    "wineStyle": "Italian Amarone",
    "region": "Amarone della Valpolicella Classico",
    "country": "Italy",
    "rating": 4.8,
    "ratingsCount": 987,
    "wineRating": 4.7,
    "wineRatingsCount": 11168,
    "price": 1495,
    "currency": "USD",
    "priceBeforeDiscount": "N/A",
    "bottleSize": "Bottle (0.75l)",
    "offerUrl": "https://www.drinkdivino.com/quintarelli-giuseppe-amarone-della-valpol-61894496.html",
    "offersCount": 1,
    "grapes": "Corvina, Rondinella, Corvinone",
    "body": "Very full-bodied",
    "acidity": "High",
    "tasteIntensity": 4.59,
    "tasteSweetness": 3.29,
    "tasteTannin": 2.31,
    "tasteAcidity": 2.38,
    "topFlavors": "raisin, chocolate, plum, cherry, tobacco, leather",
    "foodPairings": "Beef, Lamb, Game (deer, venison), Blue cheese",
    "topListRankings": "#2 Vivino's 2019 Wine Style Awards: Italian Amarone",
    "isNatural": "No",
    "wineId": "84065",
    "vintageId": "1503453",
    "url": "https://www.vivino.com/wines/1503453",
    "alcoholPercent": 17,
    "drinkingWindow": "2008-2028",
    "globalRank": 23,
    "countryRank": 2,
    "criticScoreAverage": 94,
    "criticReviewCount": 1,
    "biodynamic": "No",
    "scrapedAt": "2026-10-23T14:16:03.431Z",
    "error": null
  },
  {
    "imageUrl": "https://images.vivino.com/thumbs/gNqENZhnSFqU1BIv9insRA_pl_480x640.png",
    "wineName": "Antinori Tenuta Tignanello 'Solaia' 2016",
    "winery": "Antinori",
    "vintageYear": 2016,
    "wineType": "Red",
    "wineStyle": "Tuscan Red",
    "region": "Toscana",
    "country": "Italy",
    "rating": 4.7,
    "ratingsCount": 1014,
    "wineRating": 4.6,
    "wineRatingsCount": 41927,
    "price": 1204,
    "currency": "USD",
    "priceBeforeDiscount": "N/A",
    "bottleSize": "Bottle (0.75l)",
    "offerUrl": "https://www.drinkdivino.com/antinori-tenuta-tignanello-solaia-2016.html",
    "offersCount": 1,
    "grapes": "Cabernet Sauvignon, Merlot, Sangiovese, Canaiolo Nero",
    "body": "Medium-bodied",
    "acidity": "Medium",
    "tasteIntensity": 3.49,
    "tasteSweetness": 1.9,
    "tasteTannin": 2.99,
    "tasteAcidity": 3.07,
    "topFlavors": "leather, oak, blackberry, tobacco, chocolate, plum",
    "foodPairings": "Beef, Lamb, Veal, Poultry, Cured Meat",
    "topListRankings": "N/A",
    "isNatural": "No",
    "wineId": "1651",
    "vintageId": "85547126",
    "url": "https://www.vivino.com/wines/85547126",
    "alcoholPercent": 14.5,
    "drinkingWindow": "2021-2036",
    "globalRank": 626,
    "countryRank": 65,
    "criticScoreAverage": 97.8,
    "criticReviewCount": 11,
    "biodynamic": "No",
    "scrapedAt": "2026-10-23T14:16:04.113Z",
    "error": null
  },
  {
    "imageUrl": "https://images.vivino.com/thumbs/LtqnB-H2QFmN6ixL3FQcdw_pl_480x640.png",
    "wineName": "Antinori Tignanello 2023",
    "winery": "Antinori",
    "vintageYear": 2023,
    "wineType": "Red",
    "wineStyle": "Tuscan Red",
    "region": "Toscana",
    "country": "Italy",
    "rating": 4.5,
    "ratingsCount": 657,
    "wineRating": 4.5,
    "wineRatingsCount": 181816,
    "price": 169,
    "currency": "USD",
    "priceBeforeDiscount": "N/A",
    "bottleSize": "Bottle (0.75l)",
    "offerUrl": "https://awsfindingwine.myshopify.com/products/marchesi-antinori-tignanello-750-ml-2023",
    "offersCount": 1,
    "grapes": "Cabernet Sauvignon, Merlot, Sangiovese, Canaiolo Nero",
    "body": "Medium-bodied",
    "acidity": "Medium",
    "tasteIntensity": 3.44,
    "tasteSweetness": 1.72,
    "tasteTannin": 3,
    "tasteAcidity": 3.09,
    "topFlavors": "leather, oak, tobacco, cherry, chocolate, blackberry",
    "foodPairings": "Beef, Lamb, Veal, Poultry, Cured Meat",
    "topListRankings": "N/A",
    "isNatural": "No",
    "wineId": "1652",
    "vintageId": "173697416",
    "url": "https://www.vivino.com/wines/173697416",
    "alcoholPercent": 14.5,
    "drinkingWindow": "2025-2033",
    "globalRank": 10330,
    "countryRank": 1481,
    "criticScoreAverage": "Not Disclosed",
    "criticReviewCount": 0,
    "biodynamic": "No",
    "scrapedAt": "2026-10-23T14:16:08.971Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- **Rating and price in one row.** Most wine feeds give one or the other.
- **Complete big exports.** Vivino stops a single search after about 2,300 wines. The Actor cuts the search into price bands so you are not stuck at that ceiling.
- **Your market, your currency.** Pick the United States, United Kingdom, Germany, France, Italy, Spain, Canada or Australia.
- **Taste data, not just labels.** Intensity, sweetness, tannin, acidity, flavors and food pairings are on the row.
- **Honest limits.** Free-text search is not offered, and the limits are listed below.
- **Clean tables.** Fixed column order, no nulls, ready for CSV, Excel, JSON or XML.

### 📈 How it compares to alternatives

| | This Actor | Typical Vivino scraper | Manual browsing |
| --- | --- | --- | --- |
| Rating and merchant price per wine | ✅ | ✅ | ✅ one at a time |
| Taste profile and food pairings | ✅ | Sometimes | ✅ one at a time |
| Exports past the 2,300 wine search ceiling | ✅ price bands | ❌ | ❌ |
| Eight markets and currencies | ✅ | Sometimes | ✅ |
| Alcohol, drinking window, global rank | ✅ optional | Sometimes | ✅ one at a time |
| Free-text wine search | ❌ filters only | Sometimes | ✅ |
| Individual user reviews | ❌ | Sometimes | ✅ |

### 🚀 How to use

1. Create a free Apify account. New accounts get $5 in free credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Vivino Wines Scraper and click **Try for free**.
3. Pick one or more wine types and countries of origin, or leave both empty for every wine.
4. Set a minimum rating, a price range and the market country.
5. Set how many wines you want.
6. Turn on **Add Detail Columns** if you need alcohol percent, drinking window or rank.
7. Click **Start** and watch the run log.
8. When the run finishes, open the **Storage** tab and download CSV, Excel, JSON or XML, or pull the same rows through the Apify API.

### 💼 Business use cases

#### Retail and wholesale benchmarking

Export the wines in your price band, sorted by rating, and compare what a merchant asks for each bottle against how drinkers rate it. Bottles rated 4.2 or higher under a set price are the ones to stock.

#### Wine list building

Restaurants can pull every highly rated red from one country under a price ceiling, with food pairings and body on the same row, and shortlist a list in an afternoon.

#### Catalogue seeding

Wine apps and shops can start a catalogue from rated, photographed wines with grapes, region and style already filled in.

#### Market research

Run the same filters across several markets and compare rating, price and currency by country, grape or vintage year.

### 🔌 Automating Vivino Wines Scraper

- **Make and Zapier**: run the Actor on a schedule and push new rows into a spreadsheet or a store.
- **Slack**: post an alert when a wine above a rating threshold drops under your price.
- **Airbyte**: sync the dataset into a warehouse and join it to your own sales data.
- **GitHub Actions**: run weekly and commit the CSV so a price history builds itself.
- **Google Drive**: drop each export into a shared folder for the buying team.
- **Apify Scheduler**: run daily, weekly or hourly with no external tooling at all.

### 🌟 Beyond business use cases

- **Research**: study how rating relates to price, grape and country across thousands of wines.
- **Personal**: find the best rated bottle under your budget before a dinner.
- **Non-profit**: build a tasting list for a charity auction from rated wines.
- **Experimentation**: train a taste model on intensity, sweetness, tannin and acidity scores.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant:

> I am using the Vivino Wines Scraper on Apify. It returns fields such as wineName, winery, vintageYear, wineType, region, country, rating, ratingsCount, price, currency, grapes, tasteIntensity, tasteTannin, topFlavors and foodPairings. Help me design an analysis that finds the best rated wines per grape under a fixed price in one country.

### ❓ Frequently Asked Questions

#### 🔑 Do I need a Vivino account or API key?

No. The Actor reads Vivino's public explore feed. There is nothing to sign up for and no key to paste.

#### 🌍 What does the market country change?

Vivino decides which wines have a merchant offer, and in which currency, from the location of the visitor. The Actor sends its traffic through a residential IP in the market country you choose, so the United States market returns dollar prices and the German market returns euro prices.

#### 🔎 Can I search by wine name?

No. Vivino serves free-text search only as a rendered page with the first 25 results, so the Actor works with filters instead: type, country of origin, price range and minimum rating.

#### 📦 How many wines can I export?

A single Vivino search stops after about 2,300 wines. The Actor splits the search into price bands, so a run can go far past that. A sample search for red Italian wines rated 4.0 or higher returned 6,722 matches in the United States market.

#### ⭐ How are ratings calculated?

They come straight from Vivino. `rating` is the average for the vintage and `wineRating` is the average for the wine across all vintages. A vintage with no ratings yet reports `Not Disclosed`.

#### 💵 Why is the price the lowest offer?

Vivino returns one headline merchant offer per wine in the explore feed. `offersCount` and `offerUrl` tell you how many offers came back and where the headline one is.

#### 🥃 What do the detail columns add?

Alcohol percent, drinking window, global and country rank, critic score average and count, and the biodynamic flag. Each needs one extra request per wine, so runs with it on are slower.

#### 🔀 Can the same wine appear twice?

No. Rows are deduped on the Vivino vintage ID within a run.

#### ⚡ How fast is it?

Each page of 24 wines answers in roughly one second. With detail columns on, expect a few wines per second less.

#### 🌐 Do I need a proxy?

Yes, and the default already is one. Vivino blocks datacenter IPs, so the Actor uses Apify residential proxy in the market country. Leave the default unless you bring your own residential proxies.

#### 🛑 What happens when Vivino blocks the run?

The Actor retries with fresh IPs. If Vivino still does not answer, the run ends as failed with an error row instead of finishing empty.

#### 🧹 Why do I see "Not Disclosed" and "N/A" instead of empty cells?

`Not Disclosed` means Vivino has no value for that field on that wine. `N/A` means the field does not apply, for example no discount exists so there is no price before discount.

### 🔌 Integrate with any app

Every run writes to an Apify dataset you can read over the REST API, stream into a webhook, or export as CSV, Excel, JSON or XML. Apify's integrations cover Make, Zapier, Airbyte, Slack, Google Drive, GitHub, Google Sheets and plain HTTP webhooks, so the rows land wherever your team already works.

### 🔗 Recommended Actors

- [Reverb Item Reviews Scraper](https://apify.com/parseforge/reverb-item-reviews-scraper) for the same flat rating-plus-market table on musical gear.
- [Google Shopping Prices Scraper](https://apify.com/parseforge/google-shopping-prices-scraper) to compare retail prices across stores.
- [Home Depot Products Scraper](https://apify.com/parseforge/home-depot-products-scraper) for the same flat table treatment on a very different catalogue.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or connected to Vivino. It collects only publicly available data.

# Actor input Schema

## `wineTypeIds` (type: `array`):

Keep only these wine types. Leave empty for all types.

## `originCountryIds` (type: `array`):

Keep only wines made in these countries. Leave empty for every country.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `marketCountry` (type: `string`):

Which Vivino market to read. It sets the proxy country and the price currency.

## `minRating` (type: `number`):

Keep only wines rated at or above this average, from 1 to 5. Leave empty for no minimum.

## `priceMin` (type: `number`):

Lowest bottle price, in the currency of the chosen market. Leave empty for no minimum.

## `priceMax` (type: `number`):

Highest bottle price, in the currency of the chosen market. Leave empty for no maximum.

## `orderBy` (type: `string`):

What to sort the wines by.

## `sortDirection` (type: `string`):

Highest first or lowest first.

## `includeDetails` (type: `boolean`):

Fetch each wine's own page for 7 extra columns: alcohol percent, drinking window, global and country rank, critic score average and count, biodynamic flag. Slower, one extra request per wine.

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

Apify residential proxy by default. Only change this if you bring your own residential proxies.

## Actor input object example

```json
{
  "wineTypeIds": [
    "1"
  ],
  "originCountryIds": [
    "it"
  ],
  "maxItems": 10,
  "marketCountry": "US",
  "orderBy": "ratings_average",
  "sortDirection": "desc",
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Key wine fields in a readable table.

## `fullData` (type: `string`):

Complete dataset with every field.

# 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 = {
    "wineTypeIds": [
        "1"
    ],
    "originCountryIds": [
        "it"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/vivino-wines-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 = {
    "wineTypeIds": ["1"],
    "originCountryIds": ["it"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/vivino-wines-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 '{
  "wineTypeIds": [
    "1"
  ],
  "originCountryIds": [
    "it"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/vivino-wines-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/vivino-wines-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/8kGaW0YbSbhN333Kj/builds/ClGfZ1C2HYaFgbiJ8/openapi.json
