# App Store Keyword Rank Tracker & App Store Top Charts - ASO (`tidytools/app-store-top-charts`) Actor

Apple App Store keyword rank tracker and top charts (free, paid, grossing, new) by country and category, plus Apple Podcasts charts and daily rank changes. Official Apple feeds, $0.50/1k rows.

- **URL**: https://apify.com/tidytools/app-store-top-charts.md
- **Developed by:** [Yukai Lin](https://apify.com/tidytools) (community)
- **Categories:** Marketing, SEO tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

### What does App Store Keyword Rank Tracker & Top Charts do?

**Input:** countries plus chart types and categories, or keywords plus the apps you track. **Output:** one row per chart entry, search result or tracked-app rank. **Price:** $0.50 per 1,000 chart entries or search results, $3 per 1,000 tracked-app ranks, no start fee; empty, failed and invalid items are free (a search for which Apple returns no apps at all is free too).

It gives you **Apple App Store top charts** and **keyword rankings** as clean rows, from Apple's own public feeds:

- 📈 **Top charts**: Top Free, Top Paid, Top Grossing and New apps for **iPhone, iPad and Mac**, in **any App Store country** (us, gb, de, jp, br…), overall or per **category** (Productivity, Finance, Games, "Games: Puzzle"…). Up to the top 100 of each chart
- 🎙️ **Apple Podcasts charts**: Top Podcasts overall or per category (Technology, Business, True Crime…), with the RSS feed URL and episode count on request
- 🔎 **Keyword ranks (ASO)**: for each keyword and country, the **position of your app and your competitors** in App Store search results (up to 200 deep), plus the top N apps for that keyword
- 📊 **Daily rank changes**: turn on **Compare with the previous run** and schedule it: every row gets `changeType` (new, up, down, same), `previousRank` and `rankChange`, and apps that left a chart get a free `dropped` row
- ⭐ **Optional details**: average rating, rating count, version, last update, content rating and size for every app in a chart (same price)
- 💵 **$0.50 per 1,000 chart entries or search results**, **$3 per 1,000 tracked-app ranks**. No start fee. Empty charts and failed requests are free

### Where the data comes from, and Apple's limits

| What | Apple source | Limit |
|---|---|---|
| Top charts (apps) | Apple's public chart feeds `itunes.apple.com/<country>/rss/<chart>/limit=100[/genre=<id>]/json` | **Top 100** per chart. iPad has Top Free, Paid and Grossing, Mac only Top Free (Apple's Mac Paid and Grossing feeds are empty); "New apps" charts exist for iPhone and have no per-category version |
| Top Podcasts | Same feeds (`toppodcasts`) | Top 100 per country and category |
| Keyword ranks | The iTunes Search API (`itunes.apple.com/search`, software) | **Up to 200 results** per keyword and country (Apple answers with about 5% fewer than asked: a search depth of 200 returns around 190 apps). Apple asks for about 20 calls per minute, so keyword searches run about 3 seconds apart |
| Details | The iTunes Lookup API | 100 apps per call |

What this means in practice:

- **Charts are Apple's own ranking**, the same lists as the App Store's charts, refreshed by Apple several times a day (`chartUpdatedAt` on each row).
- **Keyword ranks are the order of Apple's Search API**, which is a public version of App Store search. It is close to what users see, but the App Store app can personalise results and show ads first; treat ranks as a consistent daily signal rather than the exact position on one person's phone. Every keyword row carries `rankSource: "itunes-search-api"` so the caveat travels with the data.
- **Top 200 or deeper chart positions are not published** by Apple's public feeds, so this Actor stops at 100.

### Who is it for?

- **App developers and ASO specialists**: track your app's keyword positions and chart ranks every day, in every country you care about
- **Mobile marketers and agencies**: watch competitors climb or fall, spot new apps entering a category chart
- **Investors and analysts**: daily Top Grossing snapshots per country and category, as a time series
- **Podcasters and podcast networks**: Top Podcasts per category and country, with feed URLs

### How much does it cost?

Price per 1,000 events by Apify plan:

| Event | Free | Starter | Scale | Business and higher |
|---|---|---|---|---|
| Chart entry or search result | **$0.50** | **$0.50** | **$0.45** | **$0.40** |
| Tracked app keyword rank | **$3.00** | **$3.00** | **$2.70** | **$2.40** |

**No start fee.** Not charged: empty charts, charts or searches that fail, searches for which Apple returns no apps at all, "dropped out of the chart" rows, and invalid inputs. Details and descriptions are included at the same price.

Examples: the top 100 Top Free apps in 10 countries = 1,000 entries = **$0.50**. 20 keywords × 3 countries × 2 tracked apps = 120 ranks = **$0.36** (plus $0.03 if you also list the top 5 results per keyword).

For comparison (checked September 2026, Apify Store, Free plan prices): sourabhbgp/apple-app-store-scraper charges $0.002 per result; slothtechlabs/ios-android-app-rankings-scraper $0.001 per app ranking; slothtechlabs/aso-keyword-rank-tracker $0.001 per result row; petersutarik/aso-keyword-intel $0.002 per ranking row; epctex/appstore-scraper $0.005 per search result; johnvc/apple-app-store-search $0.015 per app plus $0.0175 per run.

### Control your cost

- **What is charged:** each chart entry or search result row returned, and each tracked app's rank for a keyword and country.
- **Positions per chart** (default 100) and **Top results to list per keyword** (default 10) cap the rows per chart or keyword.
- At the start, the run logs its worst case (e.g. `Plan: 40 chart entries × $0.0005 = at most $0.02 (worst case for 4 charts × top 10 …)`) and warns when that is more than your **maximum charge per run**.
- When the maximum charge per run is reached, the run stops, keeps everything found so far, and says so. The `SUMMARY` record then has `status: "LIMIT_REACHED"` and `notProcessed` (charts or keywords not processed).

### How to use it

1. Pick **What to get**: Top charts or Keyword ranks.
2. Enter **Countries** (two-letter codes).
3. Charts: pick the **Charts** and **Categories** ("all" for the overall chart) and **Positions per chart**. Keyword ranks: enter **Keywords** and the **Apps to track** (App Store links, ids or bundle ids).
4. Optional: **Compare with the previous run** plus a **Monitor name**, then create a daily schedule.
5. Click **Start**. The **Chart entries**, **Keyword ranks** and **Top search results** tables are in the Output tab; export as CSV, Excel or JSON, or call the Actor from the API.

#### Input example: charts

```json
{
    "mode": "charts",
    "countries": ["us", "jp"],
    "chartTypes": ["topfree", "topgrossing"],
    "genres": ["all", "Games: Puzzle"],
    "maxRank": 100,
    "includeDetails": true,
    "compareWithPrevious": true,
    "monitorName": "daily-charts"
}
```

#### Input example: keyword ranks

```json
{
    "mode": "keywords",
    "keywords": ["habit tracker", "to do list"],
    "trackApps": ["https://apps.apple.com/us/app/habitkit/id6443918070", "983826477"],
    "countries": ["us", "gb"],
    "resultsPerKeyword": 3,
    "compareWithPrevious": true,
    "monitorName": "my-keywords"
}
```

#### Output example: chart entry

```json
{
    "type": "chart-entry",
    "success": true,
    "input": "us Top Free",
    "media": "apps",
    "device": "iphone",
    "country": "us",
    "chart": "topfree",
    "chartTitle": "Top Free",
    "genreId": null,
    "genre": "All",
    "rank": 1,
    "appId": "6760173601",
    "bundleId": "com.facebook.hatch",
    "name": "Muse from Meta",
    "developer": "Meta Platforms, Inc.",
    "developerId": "284882218",
    "developerUrl": "https://apps.apple.com/us/developer/meta-platforms-inc/id284882218",
    "price": 0,
    "currency": "USD",
    "priceLabel": "Get",
    "category": "Productivity",
    "categoryId": "6007",
    "releaseDate": "2026-09-08T07:00:00.000Z",
    "url": "https://apps.apple.com/us/app/muse-from-meta/id6760173601",
    "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/73/72/9b/73729ba4-8f07-dabc-9e4c-07ee3d667630/HatchAppIconPublic-0-0-1x_U007ephone-0-1-0-sRGB-0-85-220.png/512x512bb.png",
    "averageRating": 4.87,
    "ratingCount": 107455,
    "version": "9.0",
    "currentVersionReleaseDate": "2026-09-26T18:41:05Z",
    "contentRating": "17+",
    "fileSizeMB": 130,
    "primaryGenre": "Productivity",
    "changeType": "new",
    "previousRank": null,
    "rankChange": null,
    "chartUpdatedAt": "2026-09-30T14:30:30.000Z",
    "charged": true
}
```

(`averageRating` … `primaryGenre` appear with **Add ratings and version details**. With comparison on, the second run says e.g. `"changeType": "up", "previousRank": 10, "rankChange": 7`.)

#### Output example: podcast chart entry (with details)

```json
{
    "type": "chart-entry",
    "input": "us Top Podcasts True Crime",
    "media": "podcasts",
    "country": "us",
    "chart": "top",
    "chartTitle": "Top Podcasts",
    "genreId": 1488,
    "genre": "True Crime",
    "rank": 1,
    "podcastId": "1322200189",
    "name": "Crime Junkie",
    "author": "Audiochuck",
    "category": "True Crime",
    "url": "https://podcasts.apple.com/us/podcast/crime-junkie/id1322200189",
    "feedUrl": "https://feeds.simplecast.com/qm_9xx0g",
    "episodeCount": 531,
    "latestEpisodeDate": "2026-09-28T07:00:00Z",
    "genres": ["True Crime"],
    "charged": true
}
```

#### Output example: tracked app keyword rank

```json
{
    "type": "keyword-rank",
    "success": true,
    "keyword": "to do list",
    "country": "us",
    "device": "iphone",
    "searchDepth": 200,
    "resultsReturned": 183,
    "trackedApp": "983826477",
    "appId": "983826477",
    "appName": "Productive - Habit Tracker",
    "rank": 79,
    "found": true,
    "changeType": "new",
    "topResults": [
        { "rank": 1, "appId": "993066159", "name": "To Do List MinimaList & Widget" },
        { "rank": 2, "appId": "1212616790", "name": "Microsoft To Do" },
        { "rank": 3, "appId": "572688855", "name": "Todoist: To Do List & Calendar" }
    ],
    "charged": true
}
```

A tracked app that is not in the searched results gets `"rank": null, "found": false` (still a useful answer, charged as a rank).

#### Errors (not charged)

```json
{ "type": "input", "input": "newapps + Games: Puzzle", "field": "genres", "success": false, "errorType": "invalid_input", "error": "\"newapps + Games: Puzzle\": Apple's New Apps chart has no per-category version (the feed returns the overall list); use it with genre \"all\" (not charged)", "charged": false }
```

`errorType` is `invalid_input` (unknown country, category, chart, keyword without letters or digits, or app; also an unknown "What to get", Store or Device value, which ends the run at once), `not_found` (Apple publishes an empty chart for that store and category, a keyword search returns no apps, or a tracked app exists in none of your countries), `blocked` (Apple kept answering "rate limited"), `network` or `timeout`.

The `SUMMARY` record (key-value store) has `status` (`SUCCESS`, `PARTIAL_RESULTS`, `FAILED`, `NO_RESULTS`, `LIMIT_REACHED`), totals and `perItem` (per chart: entries returned, new entries, moved up and down, dropped; per keyword: results returned, rows).

### Integrations

- **Schedules**: run daily with **Compare with the previous run** for a rank history and movement alerts.
- **API and webhooks**: start runs and read the dataset from any language; a webhook tells you when a run finishes.
- **Exports**: CSV, Excel, JSON, XML and HTML from the dataset.
- **Apify integrations**: send results to Google Sheets, Slack, Zapier, Make, n8n and others from the Integrations tab.
- Pair it with **Apple App Store Reviews & App Details** (tidytools/apple-app-store-reviews) to read the reviews of the apps you track.

#### Use with AI agents (MCP)

Connect Apify's MCP server (https://mcp.apify.com?tools=tidytools/app-store-top-charts) to Claude, Cursor or any MCP client, then ask e.g. "Which finance apps are in the US and UK Top Free top 20 today, and which ones are new since yesterday?"

```json
{ "mode": "charts", "countries": ["us", "gb"], "genres": ["Finance"], "maxRank": 20, "compareWithPrevious": true }
```

Failed items are not charged and carry an `errorType`.

### Tips and limitations

- **Top 100 per chart** is the most Apple's public feeds publish. Several categories and countries per run are fine (one request per chart).
- **"New apps" charts** are iPhone-only and have no category version (the feed returns the same overall list for every category), so they are refused with a category. "New Apps" and "New Free Apps" are almost the same list (about 95% of the entries overlap, because few new apps are paid): pick one of them unless you want both, since each is charged.
- **Category names** are matched ignoring case; a shortened name works from 4 letters ("health", "photo"). Anything unclear (for example "foo") is refused with a free error row rather than guessed. Some small or restricted stores have empty charts for some categories: those come back as a free `not_found` row.
- **Games sub-categories** use "Games: Puzzle" (or the id, 7012). A category name that is also a games sub-category ("Music", "Sports") means the main category.
- **Keyword ranks** are read at about 20 searches per minute (Apple's request); 100 keyword × country pairs take about 5 minutes.
- **Compare with the previous run** remembers the chart positions per monitor name. Positions deeper than what the previous run read are marked `unknown` instead of `new`.
- **Prices** are in the country's currency (`currency`); names and categories come in the store's language (for example Japanese in the jp store).

### Terms and responsible use

- The Actor reads **Apple's public chart feeds and the iTunes Search and Lookup APIs**, which Apple publishes for developers and marketers. No login, no scraping of App Store pages, no personal data.
- Rows contain public store information only: app names, developers (the seller shown on the App Store), prices, categories, ratings.
- Apple asks for about 20 Search/Lookup calls per minute; the Actor keeps to that. App names, icons and descriptions belong to their owners; follow Apple's marketing guidelines if you publish them.

### FAQ

**Does the Actor collect usage data?** The Actor sends one anonymous usage counter per run (input type, item count range, outcome) to improve the tool; no URLs, content or account data.

**Is this the real App Store chart?** Yes: the rows come from Apple's own chart feeds, the same rankings the App Store shows, for the country and category you pick.

**Can I get the top 200?** Apple's public feeds stop at 100. For keyword searches the depth is 200.

**How exact are keyword ranks?** They follow Apple's Search API order, which is close to App Store search but without personalisation and ads. Use them to follow trends day by day.

**Can I track many apps and keywords every day?** Yes. Add your keywords and apps, turn on comparison, and schedule the Actor. You pay per rank returned.

**What happens if I mistype a country, category or app?** The valid part still runs. Each bad value gets a free error row (`type: "input"`, `errorType: "invalid_input"`, or `not_found` for a tracked app that exists in none of your countries) and the run ends normally. If nothing valid is left (for example no tracked app and "Top results to list per keyword" set to 0), you get one free error row and nothing is read.

**Am I charged when my app is not in the results?** Yes, as one tracked-app rank: the row says `rank: null, found: false`, which is the answer. Searches that fail, searches for which Apple returns no apps at all (a made-up term, or an Apple hiccup: the saved ranking is kept, so the next run does not show your apps as "entered"), charts that are empty and apps that do not exist are free.

**Does it work for iPad and Mac?** Charts: iPad Top Free, Paid and Grossing; Mac Top Free (Apple publishes no other Mac chart). Keyword ranks: set **Device** to iPad or Mac to search those stores.

### Related Actors

More tools by TidyTools that work well with this one:

- [Apple App Store Reviews](https://apify.com/tidytools/apple-app-store-reviews): scrape app reviews and ratings by country
- [Website Change Monitor](https://apify.com/tidytools/website-change-monitor): get an alert when a page, a price or a text changes

# Actor input Schema

## `mode` (type: `string`):

Charts mode reads Apple's official chart feeds (one row per chart entry). Keyword mode searches Apple's iTunes Search API for each keyword and country (one row per tracked app and, optionally, one row per top result). Values: charts = Top charts: Top Free, Top Paid, Top Grossing, New apps (or Top Podcasts), by country and category; keywords = Keyword ranks: where apps rank in App Store search results for your keywords.

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

Two-letter country codes, e.g. us, gb, de, jp, br. Each chart or keyword is read once per country. Invalid codes get a free error row.

## `chartTypes` (type: `array`):

Charts mode, apps only (podcasts have one chart: Top Podcasts). iPad has Top Free, Top Paid and Top Grossing; Mac has Top Free only.

## `genres` (type: `array`):

"all" for the overall chart, a category name (Productivity, Health & Fitness, Games, Finance…), a games sub-category as "Games: Puzzle", or Apple's genre id (6007). Podcasts: Technology, Business, True Crime, News… Each category is one more chart per country.

## `media` (type: `string`):

Values: apps = App Store (apps); podcasts = Apple Podcasts (Top Podcasts chart).

## `device` (type: `string`):

Which store's charts (or search results in keyword mode). Values: iphone = iPhone; ipad = iPad; mac = Mac.

## `maxRank` (type: `integer`):

Top N of each chart (Apple's feeds publish at most 100). You pay per entry returned.

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

Apps: average rating, rating count, version, last update, content rating, size. Podcasts: RSS feed URL, episode count, latest episode date. Same price; adds about 3 seconds per 100 entries (Apple's Lookup API).

## `includeDescription` (type: `boolean`):

The app's (or podcast's) description text from the chart feed. Same price.

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

Keyword mode: one search term per line, e.g. habit tracker, budget app. Each keyword is searched once per country.

## `trackApps` (type: `array`):

Keyword mode: your app and competitors, as App Store links, numeric ids or bundle ids. One row per keyword × country × app with its rank (null when it is not in the searched results).

## `resultsPerKeyword` (type: `integer`):

Also return the top N apps of each search as rows (charged like chart entries). 0 = only the tracked apps' ranks.

## `searchDepth` (type: `integer`):

How many results of each search are checked for the tracked apps (Apple's Search API returns at most 200). Same price at any depth.

## `compareWithPrevious` (type: `boolean`):

Add changeType (new, up, down, same; keyword mode also entered / dropped), previousRank and rankChange (positive = climbed) by comparing with the last run of the same monitor. Ideal for daily schedules.

## `reportDropped` (type: `boolean`):

With comparison on: a free row (changeType "dropped") for every app that was in the chart's top N last time and is not now.

## `monitorName` (type: `string`):

Runs with the same name are compared with each other (letters, digits, dashes). Use different names for different chart or keyword lists. Default: "default".

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

How many chart feeds are read at the same time. Keyword searches and detail lookups always run one at a time about 3 seconds apart, as Apple asks (about 20 calls per minute).

## `itemTimeoutSecs` (type: `integer`):

A chart or keyword search that takes longer gets a timeout error row (not charged).

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

Only used for requests sent from Apify's network (all requests of this Actor). Apify proxy usage is billed to your Apify account. Not needed normally.

## Actor input object example

```json
{
  "mode": "charts",
  "countries": [
    "us",
    "gb"
  ],
  "chartTypes": [
    "topfree"
  ],
  "genres": [
    "all",
    "Productivity"
  ],
  "media": "apps",
  "device": "iphone",
  "maxRank": 10,
  "includeDetails": false,
  "includeDescription": false,
  "keywords": [
    "habit tracker"
  ],
  "trackApps": [
    "https://apps.apple.com/us/app/habitkit/id6443918070"
  ],
  "resultsPerKeyword": 5,
  "searchDepth": 200,
  "compareWithPrevious": false,
  "reportDropped": true,
  "maxConcurrency": 2,
  "itemTimeoutSecs": 300
}
```

# Actor output Schema

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

No description

## `charts` (type: `string`):

No description

## `keywordRanks` (type: `string`):

No description

## `searchResults` (type: `string`):

No description

## `summary` (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 = {
    "mode": "charts",
    "countries": [
        "us",
        "gb"
    ],
    "chartTypes": [
        "topfree"
    ],
    "genres": [
        "all",
        "Productivity"
    ],
    "maxRank": 10,
    "keywords": [
        "habit tracker"
    ],
    "trackApps": [
        "https://apps.apple.com/us/app/habitkit/id6443918070"
    ],
    "resultsPerKeyword": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidytools/app-store-top-charts").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 = {
    "mode": "charts",
    "countries": [
        "us",
        "gb",
    ],
    "chartTypes": ["topfree"],
    "genres": [
        "all",
        "Productivity",
    ],
    "maxRank": 10,
    "keywords": ["habit tracker"],
    "trackApps": ["https://apps.apple.com/us/app/habitkit/id6443918070"],
    "resultsPerKeyword": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("tidytools/app-store-top-charts").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 '{
  "mode": "charts",
  "countries": [
    "us",
    "gb"
  ],
  "chartTypes": [
    "topfree"
  ],
  "genres": [
    "all",
    "Productivity"
  ],
  "maxRank": 10,
  "keywords": [
    "habit tracker"
  ],
  "trackApps": [
    "https://apps.apple.com/us/app/habitkit/id6443918070"
  ],
  "resultsPerKeyword": 5
}' |
apify call tidytools/app-store-top-charts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tidytools/app-store-top-charts"
        }
    }
}
```

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/u2wdaOwzbQGmcNpXm/builds/po1Rbyr4M0HOpkL90/openapi.json
