# Coles Scraper - Prices, Specials, Half Price & Nutrition (`topapi/coles-scraper`) Actor

Scrape Coles Australia by keyword, category, aisle, specials (half price, multi-buy, online only), link or product number: price, was price, unit price per kg/L, offer, stock, limits, category, images. Barcode, ingredients, nutrition add-on. Store directory. $0.45 per 1,000 products, no start fee.

- **URL**: https://apify.com/topapi/coles-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** E-commerce, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.45 / 1,000 products

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

### What does Coles Scraper do?

**Coles Scraper** reads products from [coles.com.au](https://www.coles.com.au), Coles Australia's online supermarket, and returns one row per product: price, was price, the special (half price, % off, multi-buy), unit price, availability and stock count, purchase limits, Coles' category path and images. Search by keyword, read a category or aisle, pull the On Special catalogue, or paste Coles links and product numbers.

Also known as: Coles API, Coles price scraper, Coles specials scraper, Coles half price scraper, Australian grocery price tracker.

- 🛒 **Any way in**: search terms, categories and aisles, the whole On Special catalogue (all, half price, multi-buy, online only), Coles links, product numbers, or every department at once.
- 💲 **Full price picture**: shelf price, was price, saving in $ and %, Coles' badge ("1/2 Price", "40% Off"), multi-buy terms split into numbers ("Pick any 2 for $10.50" → 2, $10.50, $5.25 each).
- ⚖️ **Comparable unit prices**: Coles' own "$3.39/ 100g" plus a per-kg, per-litre or per-item price, so 100 g and 1 kg labels compare directly.
- 🧾 **Product details add-on**: barcode (GTIN), ingredients, allergens, nutrition per serve and per 100 g, storage, dimensions, country of origin.
- 🏪 **Store directory**: all 878 Coles supermarkets with address, phone, coordinates and trading hours.
- 🔁 **Monitoring**: later runs deliver only new products and price, special or stock changes.
- 💸 **$0.45 per 1,000 products**, no start fee. Filtered products and unchanged monitor products are never charged.
- 🔓 **No Coles account, no login, no cookies, no browser.**

### What data can you get from Coles?

| | | |
|---|---|---|
| 🆔 Product number `product_id` | 🏷️ Name `name` + `brand` | 📦 Size `size` |
| 💲 Price `price` | ↩️ Was price `original_price` | 💰 Saving `discount_amount` / `discount_percent` |
| 🔖 Special `special_type` + `price_description` | 🛍️ Multi-buy `offer_description` | 🔢 Multi-buy terms `multibuy_quantity` / `multibuy_price` |
| ⚖️ Unit price `comparable` | 📏 Per kg / L / each `price_per_base_unit` | 🧮 `price_per_kg` · `price_per_litre` · `price_per_item` |
| ✅ Available `availability` | 📊 Stock count `available_quantity` | 🚫 Limits `retail_limit` / `promotional_limit` |
| 🗂️ Category path `category_path` | 🏬 Coles' merchandise codes `category` / `class_name` | 🖼️ Images `image_url` / `image_urls` |
| 🔍 Barcode `gtin` | 🥣 Ingredients `ingredients` | ⚠️ Allergens `allergens` |
| 🍎 Nutrition `nutrition` + per-100 g columns | 🌏 Country of origin `country_of_origin` | 🏪 Stores: address, phone, hours, coordinates |

### How to scrape Coles with Coles Scraper

1. [Sign up for a free Apify account](https://console.apify.com/sign-up) - it comes with free monthly credit.
2. Open **Coles Scraper** and type a search term (e.g. `milk`), a category (`dairy-eggs-fridge/milk`), or paste a Coles link.
3. Or pick a **Specials** list - half price, multi-buy or the whole catalogue.
4. Set **Max per search**, and switch on **Product details** if you need barcodes, ingredients or nutrition.
5. Click **Start**. The prefilled run (20 milk products) finished in 5-6 seconds in our tests.
6. Download the rows as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `searchTerms` | array | Search terms, one per line (`milk`, `tim tam`). A product number finds that product. |
| `startUrls` | array | Coles links: product, category or aisle, search (its sort and filters are kept), specials, store page. |
| `categories` | array | Departments, categories or aisles by name or slug path: `Dairy, Eggs & Fridge`, `dairy-eggs-fridge/milk`, `milk`. |
| `allDepartments` | boolean | Every department (18; tobacco only when named). Default `false`. |
| `specials` | select | `none` (default), `all`, `halfprice`, `multibuy`, `onlineonly`. With categories: that category's specials. |
| `productIds` | array | Coles product numbers, e.g. `8150288`. |
| `storeDirectory` | boolean | Add store rows (878 stores). `storeStates` narrows it to NSW, VIC, QLD, WA, SA, TAS, ACT, NT. |
| `sortBy` | select | `relevance` (default), `priceAscending`, `priceDescending`, `unitPriceAscending`. |
| `specialsOnly`, `halfPriceOnly`, `inStockOnly` | boolean | Keep only specials / half price / available products. |
| `minPrice`, `maxPrice`, `minDiscountPercent` | number | Price range and minimum saving. |
| `brands`, `excludeCategories` | array | Keep these brands / drop these categories. |
| `includeSponsored` | boolean | Keep the sponsored tiles at the top of page 1 (default `true`; they count in Coles' own result total). |
| `includeSuggested` | boolean | Add the cross-sell product Coles suggests beside results. Default `false`. |
| `includeDetails` | boolean | Product details add-on. Default `false`. |
| `dietary`, `excludeAllergens`, `maxSugarPer100g`, `minProteinPer100g` | array / number | Label filters (turn details on). |
| `monitorMode` | boolean | Only new or changed products on later runs. `onlyChanged` (default `true`), `includeDisappeared`, `monitorStoreName`. |
| `maxResultsPerSearch` | integer | Products per search, category, specials list or link. Default 100, `0` = all. |
| `maxItems` | integer | Rows per run in total. Default 1,000, `0` = no limit. |
| `maxPages` | integer | Optional page cap per search (48 products a page). |
| `proxyConfiguration`, `maxConcurrency`, `requestIntervalMs` | | Advanced: see "Limits" below. |

#### Input JSON

```json
{
  "searchTerms": ["tim tam"],
  "categories": ["dairy-eggs-fridge/milk"],
  "specials": "halfprice",
  "includeDetails": true,
  "maxResultsPerSearch": 100
}
```

#### Name a category the way Coles' links do

`dairy-eggs-fridge/milk/full-cream-milk` is department / category / aisle, exactly as in the link `coles.com.au/browse/dairy-eggs-fridge/milk/full-cream-milk`. A bare name like `milk` or `Full Cream Milk` is matched against Coles' own menu.

#### Combine specials with a category or a search

`specials: "halfprice"` alone reads the whole half-price catalogue (1,809 products on 2026-10-28). Add `categories: ["pantry"]` for the pantry half-price list, or a search term for the half-price products that match it.

#### Use the whole catalogue with a schedule

`allDepartments: true` with `maxResultsPerSearch: 0` reads every department (about 31,000 listings before overlaps). Category and specials reads longer than one page come in price order: Coles' own order repeats products from page to page (94 of 803 rows in one test), the price order does not.

### ⬆️ Output

One row per product (a run that also asks for stores adds store rows, `row_type: "store"`). A real row from a test run of the specials catalogue, shortened:

```json
{
  "product_id": "1593542",
  "name": "Mini Italian Herb Mozzarella Sticks",
  "brand": "Pickers",
  "size": "230g",
  "price": 7.8,
  "original_price": null,
  "on_special": true,
  "special_type": "MULTI_SAVE",
  "offer_description": "Pick any 2 for $10.50",
  "multibuy_quantity": 2,
  "multibuy_price": 10.5,
  "multibuy_unit_price": 5.25,
  "comparable": "$3.39/ 100g",
  "price_per_base_unit": 33.9,
  "unit_price_basis": "kg",
  "availability": true,
  "available_quantity": 21,
  "retail_limit": 20,
  "promotional_limit": 12,
  "category_path": "Frozen > Frozen Pastry & Party Food > Party Food",
  "image_url": "https://cdn.productimages.coles.com.au/productimages/1/1593542.jpg",
  "url": "https://www.coles.com.au/product/pickers-mini-italian-herb-mozzarella-sticks-230g-1593542"
}
```

With **Product details** on, the same row also carries (real values from a test run):

```json
{
  "gtin": "9300682058780",
  "ingredients": "Sugar, Glucose Syrup, Milk Solids, Cocoa Butter, Cocoa Mass, ...",
  "allergens": "Contains Egg, Gluten, Milk, Soy May Contain Peanut",
  "country_of_origin": "MADE IN AUSTRALIA",
  "serving_size": "16g",
  "sugars_per_100": 57.5,
  "protein_per_100": 3.3
}
```

#### Fields and how often they are filled

Measured on a 1,000-product run of the specials catalogue and a 24-product details run (2026-10-28).

| Field | Filled |
|---|---|
| `product_id`, `name`, `brand`, `size`, `price`, `availability`, `category_path`, `image_url`, `url` | 100% |
| `comparable`, `unit_price`, `price_per_base_unit` | 100% |
| `available_quantity` | 99% |
| `original_price` (was price; only when Coles shows one) | 54% of specials |
| `offer_description`, `multibuy_*` (multi-buy deals) | 39% of specials |
| `min_guarantee` (freshness guarantee) | 45% |
| `store_aisle` (in-store aisle, when Coles lists one) | 11% |
| Details: `gtin`, `country_of_origin`, `dimensions`, `last_updated` | 100% |
| Details: `ingredients`, `allergens`, `long_description` | 96% |
| Details: `nutrition` and the per-100 g columns | 92% |
| Details: `storage` | 83% |

Monitoring adds `change_type` (NEW, PRICE_DROP, PRICE_RISE, BACK_IN_STOCK, OUT_OF_STOCK, SPECIAL_STARTED, SPECIAL_ENDED, WAS_PRICE_CHANGED, DISAPPEARED), `old_price`, `price_delta`, `price_delta_pct`, `old_available_quantity` and `first_seen_at`. Every field is described in the dataset schema (Output tab).

### Use cases

- 🏷️ **Grocery price tracking**: follow shelf and unit prices of a category every week.
- 🔥 **Specials monitoring**: list every half-price and multi-buy deal each Wednesday when the catalogue turns over.
- 📊 **Brand and category managers**: see your range and your competitors' prices, specials and stock in one table.
- 🧪 **Nutrition and labelling data**: barcode, ingredients, allergens and nutrition per 100 g for a whole aisle.
- 🧾 **Price comparison apps**: product numbers and barcodes as keys, unit prices that compare across pack sizes.
- 🏪 **Store location data**: every Coles supermarket with coordinates and trading hours.

### How much does it cost to scrape Coles?

| Event | Price |
|---|---|
| Product row | **$0.45 per 1,000** ($0.00045 each) |
| Product details (add-on, only on rows that got them) | $0.36 per 1,000 |
| Store row | $0.72 per 1,000 |

| Run | Cost |
|---|---|
| 100 products | $0.045 |
| 1,000 products | $0.45 |
| 1,000 products with details | $0.81 |
| All 878 stores | $0.63 |

There is nothing else to pay: Apify platform usage is included in these prices, and there is no start fee. Set a maximum charge on the run and it stops cleanly when the charge is reached; every delivered row is charged once, never more.

### Integrations, API, scheduling & MCP

- **Schedule** the run in Apify (e.g. every Wednesday for the new specials) and switch on **Only new or changed** so each run returns only what moved.
- **Webhooks** send the dataset to your system when a run finishes; **Make, Zapier, n8n, Google Sheets and Slack** connect from the Integrations tab.
- **API**: start runs and read rows with the [Python](https://docs.apify.com/api/client/python) or [JavaScript](https://docs.apify.com/api/client/js) client, or `POST https://api.apify.com/v2/acts/TopApi~coles-scraper/run-sync-get-dataset-items` for small runs.
- **MCP**: AI agents can call Coles Scraper as a tool through the [Apify MCP server](https://mcp.apify.com).

### More Australian grocery scrapers

| | | |
|---|---|---|
| 🛒 [ALDI Australia Scraper](https://apify.com/TopApi/aldi-au-scraper) - ALDI products, Special Buys and stores | 🥬 [Woolworths Scraper](https://apify.com/TopApi/woolworths-scraper) - Woolworths products and specials | 🛍️ [E-commerce Product Scraper](https://apify.com/TopApi/ecommerce-product-scraper) - products from any online store |

All our actors: [apify.com/TopApi](https://apify.com/TopApi).

### Limits & empty runs

- **Prices are Coles' online prices before a store is chosen** (what coles.com.au shows a new visitor). Per-store prices and stock are not available.
- **No ratings or reviews**: Coles' own product data carries none.
- **Barcode search is not available** (Coles' search does not match barcodes); barcodes come with Product details.
- **Coles' firewall** turns away bursts from one address, so requests are spaced (1.5 s by default) and the run moves from a direct connection to Apify's datacenter proxy, then an Australian residential proxy, only when Coles turns it away. If all three are turned away the run stops, keeps what it read and says so in the status; nothing else is charged.
- **Speed**: about 48 products per request. A 1,000-product specials run took 35 seconds; product details add about 1.5 seconds per product.
- **Empty searches**: when Coles finds nothing, or only shows look-alikes, the run delivers nothing and names the search in the status.
- **Store rows** carry address, phone, coordinates and trading hours; Coles' store pages listed no holiday hours, services or neighbouring stores for any of the 46 stores read on 2026-10-28, so those are not in the rows.

### ❓ FAQ

#### How much does Coles Scraper cost?

$0.45 per 1,000 products, plus $0.36 per 1,000 for the details add-on and $0.72 per 1,000 store rows. No start fee, and platform usage is included.

#### How many products can Coles Scraper return?

Every product Coles lists for a search, category or specials list (48 per page, all pages). The whole catalogue is about 31,000 listings across 18 departments.

#### Can Coles Scraper track price changes and specials over time?

Yes. Turn on **Only new or changed** and schedule the run: later runs deliver new products and price, was price, special and availability changes, with the old price and the change.

#### Does Coles Scraper get the half-price specials?

Yes: set **Specials** to Half price (or All, Multi-buy, Online only), on its own or with a category or search term.

#### Does Coles Scraper give barcodes and nutrition?

Yes, with **Product details** on: GTIN barcode, ingredients, allergens, dietary statement, nutrition per serve and per 100 g, storage and country of origin.

#### Can Coles Scraper give prices for my local store?

No. Rows carry the prices coles.com.au shows before a store is chosen. The store directory gives every store's address, phone and trading hours.

#### Do I need a Coles account or API key for Coles Scraper?

No. It reads the public website without a login.

#### Can I use Coles Scraper through the Apify API?

Yes. Every input above works as JSON through the API and the Python or JavaScript client.

#### Can AI agents use Coles Scraper through MCP?

Yes, through the Apify MCP server, as a tool that takes the same inputs.

#### Why did my Coles Scraper run return no products?

The search matched nothing on Coles, a filter removed everything (filtered products are not charged), or monitoring found nothing new since the last run. The status message and the `RUN_SUMMARY` record say which.

#### Your feedback

Found a bug or need a field? Open an issue in the **Issues** tab and we will look at it.

# Actor input Schema

## `searchTerms` (type: `array`):

Products to search for, one per line, e.g. "milk", "tim tam", "nappies". A Coles product number (e.g. 8150288) finds that product.

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

Any coles.com.au link: a product page, a category or aisle (…/browse/dairy-eggs-fridge/milk), a search (…/search/products?q=coffee, with the sort and filters you set there), the specials (…/on-special?filter_Special=halfprice) or a store page (…/find-stores/coles/wa/karratha-313).

## `categories` (type: `array`):

Departments, categories or aisles by name or slug path, e.g. "Dairy, Eggs & Fridge", "dairy-eggs-fridge/milk", "pantry/breakfast", "milk". Every product in it is read (up to Max per search).

## `allDepartments` (type: `boolean`):

Read all 18 Coles departments, about 31,000 products before overlaps (tobacco only when you name it in Categories). Set Max per search to 0 for everything.

## `specials` (type: `string`):

Read Coles' On Special catalogue. On its own it reads the whole catalogue; with Categories it reads that category's specials; with Search terms it keeps the matching specials.

## `productIds` (type: `array`):

Coles product numbers, the digits at the end of a product link, e.g. "8150288".

## `storeDirectory` (type: `boolean`):

Add Coles store rows: address, phone, coordinates, trading and holiday hours, services (878 stores; narrow with States). Charged per store row.

## `storeStates` (type: `array`):

Only stores in these states.

## `sortBy` (type: `string`):

Order of Coles' listings.

## `specialsOnly` (type: `boolean`):

Keep only products Coles marks as a special (half price, % off, multi-buy, was-price).

## `halfPriceOnly` (type: `boolean`):

Keep only half-price specials.

## `inStockOnly` (type: `boolean`):

Keep only products Coles shows as available.

## `minPrice` (type: `number`):

Lowest shelf price to keep.

## `maxPrice` (type: `number`):

Highest shelf price to keep.

## `minDiscountPercent` (type: `number`):

Keep only products with at least this saving off the was price, e.g. 40.

## `brands` (type: `array`):

Keep only these brands, e.g. "Coles", "Arnott's".

## `excludeCategories` (type: `array`):

Drop products in these departments, categories or aisles, e.g. "Liquorland", "Baby".

## `includeSponsored` (type: `boolean`):

Coles puts a few advertised products at the top of page 1; they count in Coles' own result total, so they are kept by default (each product once, flagged is_sponsored). Off: Coles' unsponsored list only.

## `includeSuggested` (type: `boolean`):

Add the cross-sell product Coles suggests beside some results (flagged is_associated_result; not part of the search).

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

Read each product's page: barcode (GTIN), ingredients, allergens, dietary, nutrition panel (per serve and per 100 g), storage, dimensions, country of origin, long description, variants. One extra request per product.

## `dietary` (type: `array`):

Keep only products whose label says all of these, e.g. "vegan", "gluten free". Turns details on.

## `excludeAllergens` (type: `array`):

Drop products whose allergen or ingredient text mentions any of these, e.g. "peanut", "milk". Turns details on.

## `maxSugarPer100g` (type: `number`):

Keep only products at or under this many grams of sugars per 100 g. Turns details on.

## `minProteinPer100g` (type: `number`):

Keep only products with at least this many grams of protein per 100 g. Turns details on.

## `monitorMode` (type: `boolean`):

Remember what earlier runs with the same inputs delivered. Later runs deliver only new products and those whose price, was price, special or availability changed, each with change_type, old_price and price_delta.

## `onlyChanged` (type: `boolean`):

With monitoring on: off delivers every product with its change fields (unchanged ones as UNCHANGED, charged).

## `includeDisappeared` (type: `boolean`):

With monitoring on: add a DISAPPEARED row for each product an earlier run delivered that Coles no longer lists in the same inputs (only after a run that read the whole scope).

## `monitorStoreName` (type: `string`):

Name of the key-value store that remembers delivered products. Use a different name per watchlist.

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

Products per search term, category, specials list or link. 0 = no limit.

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

Rows per run across every input (stores count too). 0 = no limit.

## `maxPages` (type: `integer`):

Optional: stop each search, category or specials list after this many Coles pages (48 products a page).

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

Leave empty: the run starts direct and moves to Apify's datacenter, then Australian residential proxy only if Coles turns it away. Your own proxy replaces the direct start.

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

Requests in flight at once. Requests to Coles are spaced on one address either way.

## `requestIntervalMs` (type: `integer`):

Time between two requests from the same address. Coles' firewall turns away bursts; 1,500 ms is the tested pace.

## Actor input object example

```json
{
  "searchTerms": [
    "milk"
  ],
  "allDepartments": false,
  "specials": "none",
  "storeDirectory": false,
  "sortBy": "relevance",
  "specialsOnly": false,
  "halfPriceOnly": false,
  "inStockOnly": false,
  "includeSponsored": true,
  "includeSuggested": false,
  "includeDetails": false,
  "monitorMode": false,
  "onlyChanged": true,
  "includeDisappeared": false,
  "monitorStoreName": "coles-scraper-state",
  "maxResultsPerSearch": 20,
  "maxItems": 1000,
  "maxConcurrency": 2,
  "requestIntervalMs": 1500
}
```

# Actor output Schema

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

One item per product: id, name, brand, size, price, was price, special and multi-buy terms, unit price, availability, categories, images, link; details when switched on. Store rows when the store directory is asked for.

## `summary` (type: `string`):

Sources read with Coles' own totals, products filtered, sponsored or unchanged, inputs skipped and why, transport.

# 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 = {
    "searchTerms": [
        "milk"
    ],
    "maxResultsPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/coles-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 = {
    "searchTerms": ["milk"],
    "maxResultsPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/coles-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 '{
  "searchTerms": [
    "milk"
  ],
  "maxResultsPerSearch": 20
}' |
apify call topapi/coles-scraper --silent --output-dataset

```

## MCP server setup

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