# TikTok Shop Scraper No Cookies (`maximedupre/tiktok-shop-scraper-no-cookies`) Actor

Collect public TikTok Shop product pages without login or cookies. Use product URLs or IDs, or discover products from the US best-seller or trending ranking, with price, seller, demand, media, variant, and shipping fields when exposed.

- **URL**: https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce, Developer tools, Business
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.70 / 1,000 product data

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🛍️ TikTok Shop product checks without cookies

For ecommerce sellers, product researchers, and developers, this Actor turns public TikTok Shop product pages into product records. Review product IDs, titles, links, seller details, prices, demand signals, images, variants, shipping data, and collection times in one dataset. It supports the United States (US) marketplace. Values that the public storefront does not expose stay marked as unavailable or are left out.

**Use cases**

- Find products in the public trending ranking with **[Tiktok Shop Trending Products Scraper](https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies/examples/tiktok-shop-trending-products-scraper)**.
- Collect products from the public best-seller ranking with **[Tiktok Shop Best Sellers Scraper](https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies/examples/tiktok-shop-best-sellers-scraper)**.
- Fetch product details from a URL or ID with **[Tiktok Shop Product Data Scraper](https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies/examples/tiktok-shop-product-data-scraper)**.
- Fetch one product from a submitted URL or ID with **[Tiktok Shop Product Scraper](https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies/examples/tiktok-shop-product-scraper)**.
- Collect public TikTok Shop product data without cookies with **[Tiktok Shop Scraper](https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies/examples/tiktok-shop-scraper)**.

#### 📦 Product records with shop and demand signals

Each saved row is one product record from a submitted product URL or ID, or from the public best-seller or trending ranking. A row can include product identity, seller details, public prices, demand signals, images, description, variants, shipping, the observation time, and directional estimates when the source provides enough data. `accessStatus` tells you whether the page was public or only partly available. Missing fields are not invented.

When the same product appears again from another submitted value or ranking match, the Actor keeps the first eligible occurrence and ignores later matches. It does not merge later matches into the saved row.

#### ▶️ Run one US product collection

1. Choose **Product URLs or IDs** for direct lookup, or **Best-seller or trending ranking** for discovery.
2. Choose **United States (US)** as the marketplace.
3. Add one or more product URLs or IDs, or choose **Best sellers** or **Trending products**.
4. Set **Maximum products** for a ranking run when you want fewer rows. Leave it empty to return all available results until the public ranking is exhausted.
5. Start the run and open the default dataset.

Each run uses one collection method. Fields for the other method are ignored. A direct lookup run uses one list of product URLs or IDs.

#### ⚙️ Input

Choose one collection method. The marketplace sets the regional storefront. Only fields for your chosen method are used.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `findProductsBy` | string | Selects direct lookup with Product URLs or IDs, or discovery with the Best-seller or trending ranking. |
| `productUrlsOrIds` | array of strings | Sends one or more TikTok Shop product URLs or IDs for direct lookup. Each value can produce one product record. It is ignored for ranking discovery. |
| `rankingType` | string | Selects Best sellers or Trending products. It is ignored for direct lookup. |
| `maxItems` | integer | Sets an optional limit for ranking discovery. Leave it empty to return all available results until the public ranking is exhausted. It is ignored for direct lookup. |
| `marketplace` | string | Selects the supported TikTok Shop marketplace. The current choice is `US`, and regional availability depends on what that public storefront exposes. |

**Default input**

This is the public input from the successful Hosted QA default-input run:

```json
{
  "findProductsBy": "productUrlsOrIds",
  "productUrlsOrIds": [
    "https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014"
  ],
  "marketplace": "US"
}
```

#### 🧾 Output

The run output contains a link to the default Apify dataset.

**Run output**

| Field | Type | What it does |
|---|---|---|
| `dataset` | string | Opens the product results from this run. |

Each dataset row uses one product-record shape. Required fields are present on every row. Optional fields may be omitted when the public source does not expose them. An empty array means that no value was exposed for that list. Price availability keeps exact, masked, and unavailable states separate. The dotted paths below show nested fields and cover every dataset field.

**Product row fields**

| Field | Type | What it does |
|---|---|---|
| `productId` | string | Stable TikTok Shop product ID. |
| `title` | string | Product title shown by the public storefront. |
| `productUrl` | string | Public URL for the product page. |
| `marketplace` | string | Marketplace used for the product page. The current value is `US`. |
| `accessStatus` | string | Says whether the public page was `public` or `partiallyAvailable`. |
| `observedAt` | string | Time when this public storefront record was observed. |
| `description` | string | Product description shown by the public storefront, when exposed. |
| `images` | array of strings | Public product image URLs. The list can be empty. |
| `seller` | object | Public shop and seller details. |
| `seller.name` | string | Public shop or seller name. |
| `seller.id` | string | Public seller or shop ID, when exposed. |
| `seller.url` | string | Public URL for the seller or shop, when exposed. |
| `seller.businessName` | string | Public legal or business name, when exposed. |
| `seller.businessAddress` | string | Public seller business address, when exposed. |
| `pricing` | object | Public product prices and discount information. |
| `pricing.current` | object | Current price shown by the public storefront. |
| `pricing.current.amount` | number or null | Numeric current price when the source exposes an exact value. |
| `pricing.current.currency` | string or null | Currency code for the current price, when exposed. |
| `pricing.current.display` | string or null | Price text shown by the source, including a mask when the value is hidden. |
| `pricing.current.availability` | string | Says whether the current price is `available`, `masked`, or `unavailable`. |
| `pricing.original` | object | Original price shown by the public storefront, when exposed. |
| `pricing.original.amount` | number or null | Numeric original price when the source exposes an exact value. |
| `pricing.original.currency` | string or null | Currency code for the original price, when exposed. |
| `pricing.original.display` | string or null | Original price text shown by the source, including a mask when the value is hidden. |
| `pricing.original.availability` | string | Says whether the original price is `available`, `masked`, or `unavailable`. |
| `pricing.discount` | object | Discount text shown by the public storefront, when exposed. |
| `pricing.discount.display` | string | Discount text shown by the source. |
| `demandSignals` | object | Public rating, review-count, and sold-count signals. |
| `demandSignals.rating` | number or null | Public product rating on the source scale. |
| `demandSignals.reviewCount` | integer or null | Public number of product reviews. |
| `demandSignals.soldCount` | integer or null | Usable numeric sold count, when the source provides one. |
| `demandSignals.soldCountDisplay` | string or null | Sold-count text shown by the source, including rounding or a plus sign. |
| `demand` | object | Directional demand tier based on the public signals in the row. |
| `demand.tier` | string | Directional tier such as `high`, `medium`, `low`, or `notEnoughData`. It is not an official market rating. |
| `demand.reasons` | array of strings | Observed public signals used for the directional demand tier. |
| `variants` | array of objects | Public product variants and SKU details. The list can be empty. |
| `variants[].variantId` | string or null | Public identifier for a variant, when exposed. |
| `variants[].sku` | string or null | Public stock keeping unit, when exposed. |
| `variants[].name` | string or null | Public name for a variant, when exposed. |
| `variants[].options` | array of objects | Option names and values that define a variant. |
| `variants[].options[].name` | string | Name of a variant option. |
| `variants[].options[].value` | string | Value of a variant option. |
| `variants[].price` | number or null | Numeric price for a variant, when exposed. |
| `variants[].currency` | string or null | Currency code for a variant price, when exposed. |
| `variants[].stock` | integer or null | Available stock for a variant, when exposed. |
| `variants[].stockAvailability` | string | Says whether stock is `available`, `outOfStock`, or `unavailable`. |
| `shipping` | object | Public shipping and fulfillment details for the product. |
| `shipping.fulfillmentMethod` | string | Fulfillment method shown by the source, when exposed. |
| `shipping.deliveryWindow` | string | Delivery time window shown by the source, when exposed. |
| `shipping.fee` | number | Shipping fee shown by the source, when exposed. |
| `shipping.currency` | string | Currency code for the shipping fee, when exposed. |
| `shipping.freeShipping` | boolean | Says whether the source says shipping is free. |
| `shipping.cashOnDelivery` | boolean | Says whether cash on delivery is available according to the source. |
| `shipping.package` | object | Public package measurements and weight, when exposed. |
| `shipping.package.length` | number | Package length in the stated unit. |
| `shipping.package.width` | number | Package width in the stated unit. |
| `shipping.package.height` | number | Package height in the stated unit. |
| `shipping.package.dimensionUnit` | string | Unit used for package length, width, and height. |
| `shipping.package.weight` | number | Package weight in the stated unit. |
| `shipping.package.weightUnit` | string | Unit used for package weight. |
| `gmvEstimate` | object | Directional lifetime sales value estimate from public price and sold-count signals, when both are usable. |
| `gmvEstimate.amount` | number | Estimated lifetime sales value. It is not an official GMV value. |
| `gmvEstimate.currency` | string | Currency code for the estimated lifetime sales value. |
| `salesVelocity` | object | Directional sales and revenue change from repeated public observations. |
| `salesVelocity.periodStart` | string | Start time of the comparison period. |
| `salesVelocity.periodEnd` | string | End time of the comparison period. |
| `salesVelocity.observationCount` | integer | Number of public observations used for the comparison. |
| `salesVelocity.salesPerDay` | number | Directional average change in sold count per day. |
| `salesVelocity.revenuePerDay` | number or null | Directional average sales value change per day when price is usable. |
| `salesVelocity.currency` | string or null | Currency code for revenue per day, when available. |
| `salesVelocity.momentum` | string | Direction of the observed sales change, such as `increasing`, `steady`, `decreasing`, or `notEnoughData`. |
| `dropshipEconomics` | object | Directional landed-cost, resale, profit, margin, and viability estimates. |
| `dropshipEconomics.landedCost` | number | Estimated landed cost for the product. |
| `dropshipEconomics.resalePrice` | number | Estimated resale price for the product. |
| `dropshipEconomics.profit` | number | Estimated profit per sale. |
| `dropshipEconomics.marginPercent` | number | Estimated profit margin as a percent of resale price. |
| `dropshipEconomics.currency` | string | Currency code for the economics estimates. |
| `dropshipEconomics.viability` | string | Directional view such as `viable`, `uncertain`, `notViable`, or `notEnoughData`. |

**Example product row**

This is one complete row from the successful current-beta run for the default input above:

```json
{
  "productId": "1732307769700553014",
  "title": "BASED Deluxe Straight/Wavy Hair Kit | Shampoo, Conditioner, Texture Powder, Hair Clay, Pomade, Sea Salt Spray + Wooden Comb | Science-Backed, High Performance",
  "productUrl": "https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014",
  "marketplace": "US",
  "accessStatus": "partiallyAvailable",
  "observedAt": "2026-08-28T03:18:29.802Z",
  "description": "The BASED Deluxe Straight/Wavy Hair Kit — everything you need to wash, style, and maintain straight or wavy hair.\nKey Benefits:\n· Shampoo: Gentle, sulfate-free cleanse with Peppermint Oil that refreshes the scalp without stripping natural oils.\n· Conditioner: Lightweight hydration powered by Argan Oil and Hydrolyzed Keratin for smooth, manageable hair.\n· Texture Powder: Instant volume and natural texture with a lightweight, matte finish.\n· Sea Salt Spray: Beachy texture and natural waves with Kelp Extract and Vitamin B5.\n· Pomade: Medium hold with medium shine, powered by Shea Butter and Castor Seed Oil.\n· Hair Clay: Strong hold with a matte finish, powered by Bentonite and Kaolin Clay.\n· BASED Wooden Comb: Built for precision styling and even product distribution.\nPremium, Science-Backed Ingredients – Zero Compromise: Built with performance-driven ingredients and no cheap fillers.\nResults may vary based on individual hair type.",
  "images": [
    "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4f6f3aada7bb44568f48e065189b73b5~tplv-fhlh96nyum-crop-webp:1500:1500.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=607f11de&idc=useast5&from=2378011839",
    "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4f6f3aada7bb44568f48e065189b73b5~tplv-fhlh96nyum-crop-webp:1500:1500.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=607f11de&idc=useast5&from=2378011839"
  ],
  "seller": {
    "name": "BASED",
    "id": "7495079418085345590",
    "url": "https://shop.tiktok.com/us/store/based/7495079418085345590",
    "businessName": "Based Bodyworks LLC",
    "businessAddress": "1327 Middleton Court, Los Altos, CA, USA, Los Altos, California, 94024, United States"
  },
  "pricing": {
    "current": {
      "amount": 160,
      "currency": "USD",
      "display": "$160.00",
      "availability": "available"
    },
    "original": {
      "amount": null,
      "currency": null,
      "display": null,
      "availability": "unavailable"
    }
  },
  "demandSignals": {
    "rating": 4.8,
    "reviewCount": 10866,
    "soldCount": 74069,
    "soldCountDisplay": "74069"
  },
  "demand": {
    "tier": "medium",
    "reasons": [
      "public rating 4.8",
      "public review count 10866",
      "public sold count 74069"
    ]
  },
  "variants": [
    {
      "variantId": "1732307767844639030",
      "sku": "1732307767844639030",
      "name": "BB-DLXSW-BNDL",
      "options": [
        {
          "name": "Specifications",
          "value": "Default"
        }
      ],
      "price": 160,
      "currency": "USD",
      "stock": 43614,
      "stockAvailability": "available"
    }
  ],
  "shipping": {
    "fulfillmentMethod": "LSV-TTS-US-NEW-4PL-Std",
    "deliveryWindow": "11-14 days",
    "fee": 0,
    "currency": "USD",
    "cashOnDelivery": false,
    "package": {
      "length": 6,
      "width": 3,
      "height": 3,
      "dimensionUnit": "source-unit-2",
      "weight": 1.49,
      "weightUnit": "source-unit-2"
    }
  },
  "gmvEstimate": {
    "amount": 11851040,
    "currency": "USD"
  },
  "dropshipEconomics": {
    "landedCost": 160,
    "resalePrice": 160,
    "profit": 0,
    "marginPercent": 0,
    "currency": "USD",
    "viability": "notEnoughData"
  },
  "salesVelocity": {
    "periodStart": "2026-08-28T02:49:41.931Z",
    "periodEnd": "2026-08-28T03:18:29.802Z",
    "observationCount": 3,
    "salesPerDay": 1050.0783912687925,
    "revenuePerDay": 168012.54260300682,
    "currency": "USD",
    "momentum": "increasing"
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. Each saved product row costs $0.0027. The price is tied to the product data saved in the default dataset. What appears in the row depends on the public TikTok Shop page.

#### 🔌 Integrations

Open the default Apify dataset after a run, or use the dataset API link in the run output to read the rows in another workflow.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What happens when TikTok Shop does not show a field?

Optional fields may be left out. Price objects use `masked` or `unavailable` when the source does not expose an exact price. The Actor does not fill in missing values.

##### Can I submit product IDs instead of URLs?

Yes. Put one or more IDs in `productUrlsOrIds`; each submitted value is used for direct lookup.

##### Can I collect several products in one run?

Yes. Direct lookup accepts one or more URLs or IDs. A ranking run uses its selected public ranking. One run uses one collection method.

##### What does an empty Maximum products value do?

With ranking selected, leave it empty to return all available results until the public ranking is exhausted. With direct lookup, `maxItems` is ignored.

##### Why is a row marked partiallyAvailable?

It means the public page exposed some, but not all, product fields. Returned fields are kept, and unavailable details are not guessed.

##### Is the demand tier an official TikTok Shop score?

No. It is a directional tier based on public rating, review-count, and sold-count signals. It is not an official market rating.

##### Does the Actor include estimates?

Some rows can include directional GMV, sales-velocity, or resale-economics estimates when the needed public signals exist. Treat them as estimates, not official TikTok Shop values.

##### Can I choose another marketplace?

Currently only United States (US) is supported. Regional availability still depends on what that public storefront exposes.

##### Does it collect reviews or change seller listings?

No. It does not collect full customer-review records, orders, checkout data, account data, or listing changes. It collects product-page data that the public storefront exposes.

##### What happens if the same product appears more than once?

The Actor saves the first eligible occurrence and ignores later matches for that product. It does not merge later matches into the saved row.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~tiktok-shop-scraper-no-cookies/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Trendyol Scraper](https://apify.com/maximedupre/trendyol-scraper): compare public marketplace products, prices, sellers, ratings, reviews, and Q\&A.
- [Amazon Price Tracker](https://apify.com/maximedupre/amazon-price-tracker): collect current Amazon product snapshots to compare prices, discounts, ratings, and sellers.
- [MercadoLibre Search Scraper](https://apify.com/maximedupre/mercado-libre-search-scraper): search another marketplace for product cards, prices, sellers, shipping, and rankings.
- [TikTok Shop Scraper \[NO COOKIES\] ✅](https://apify.com/unseenuser/TikTok-Shop-Scraper): use broader TikTok Shop research when you need reviews, creator affiliates, or country and price filters.
- [TikTok Shop Scraper | Products, Prices & Best Sellers](https://apify.com/apivault_labs/tiktok-shop-scraper): compare public product prices with available best-seller rankings.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findProductsBy` (type: `string`):

Choose one way to collect products for this run. Use product URLs or IDs for direct lookup, or use the public best-seller or trending ranking for discovery.

## `productUrlsOrIds` (type: `array`):

Enter one or more TikTok Shop product URLs or IDs. Each value is fetched as one product record. One list is used for this run. If ranking discovery is selected, this list is ignored.

## `rankingType` (type: `string`):

Choose the public ranking for this run. Best sellers and trending products use different views. If direct lookup is selected, this choice is ignored.

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

Optional positive limit for ranking discovery. Leave it empty to return all available results until the public ranking is exhausted. If direct lookup is selected, this limit is ignored.

## `marketplace` (type: `string`):

Choose the supported TikTok Shop marketplace for this run. Regional availability depends on what that public storefront exposes.

## Actor input object example

```json
{
  "findProductsBy": "productUrlsOrIds",
  "productUrlsOrIds": [
    "https://shop.tiktok.com/view/product/1234567890123456789",
    "9876543210987654321"
  ],
  "marketplace": "US"
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the product results from this run.

# 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 = {
    "findProductsBy": "productUrlsOrIds",
    "productUrlsOrIds": [
        "https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014"
    ],
    "marketplace": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/tiktok-shop-scraper-no-cookies").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 = {
    "findProductsBy": "productUrlsOrIds",
    "productUrlsOrIds": ["https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014"],
    "marketplace": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/tiktok-shop-scraper-no-cookies").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 '{
  "findProductsBy": "productUrlsOrIds",
  "productUrlsOrIds": [
    "https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014"
  ],
  "marketplace": "US"
}' |
apify call maximedupre/tiktok-shop-scraper-no-cookies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/tiktok-shop-scraper-no-cookies"
        }
    }
}

```

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/lzIQ1ec1rSrJOHpRu/builds/VGlTVJBQWYl6yeIHU/openapi.json
