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

ASO keyword rank tracker and App Store top charts (free, paid, grossing, by category) in 175 countries. Track your app's and competitors' keyword ranks, get keyword suggestions with top-10 competition data, rank changes vs the last run and an only-changes mode. No proxies.

- **URL**: https://apify.com/gazidev/app-store-top-charts.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Categories:** Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 chart rows

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

## App Store ASO Keyword Rank Tracker & Top Charts

An **ASO keyword rank tracker** for the App Store: track your app's **keyword ranking** against competitors, find **new keyword ideas with competition data**, and download the **App Store top charts**, in any of **175 countries**. Get the Top Free, Top Paid and Top Grossing charts for iPhone, iPad and Mac, overall or by **category** (Games, Finance, Games: Puzzle and more). Each chart row comes with the app's **rating, rating count, version, release date and size**. Track the **App Store search rank** of your app and your competitors for any keyword, and see the **change since the last run** (previous rank, rank change, new, dropped). Turn on **Only changes** to build a cheap daily ASO monitor. Give a seed keyword to get **keyword suggestions**: related search terms mined from the top-ranked apps, each with its top-10 competition (ratings, exact-name matches, a 0-100 competition score).

The Actor uses Apple's public RSS feeds and the iTunes Search and Lookup APIs. It needs no browser, no proxy and no login. Prices start at **$0.50 per 1,000 chart rows**.

### What it does

- **Top charts in 175 storefronts:** Top Free, Top Paid and Top Grossing for iPhone and iPad, plus New apps and Top Free Mac apps, up to **100 ranks** per chart.
- **Category charts:** all 27 App Store categories and the 18 game subcategories (for example, Germany's Top Free Games, or Top Grossing Finance in Japan).
- **Enrichment for free:** one extra iTunes Lookup call per chart adds `rating`, `ratingCount`, `version`, `releaseDate`, `currentVersionReleaseDate`, `sizeMB`, `bundleId` and `contentRating`.
- **Keyword rank tracking (ASO):** for each keyword and country, the Actor reads up to 200 search results in order. Each app's position is its `rank`. Track your apps and competitors by App Store ID, App Store URL or bundle ID. An app outside the top N is reported as `ranked: false`, so you can see when it falls out.
- **Keyword suggestions (ASO keyword research):** for a seed such as `budget`, the Actor reads the top 200 App Store search results and mines related 1-3 word phrases from the app names and subtitles (`budget planner`, `expense tracker`, `daily budget`...). Each suggestion comes with how many top apps use it and, optionally, its **top-10 competition**: median and total ratings, average rating, how many of the top 10 use the exact phrase in their name, apps with fewer than 1,000 ratings, a 0-100 `competitionScore` and `low` / `medium` / `high`.
- **Rank changes:** every row has `previousRank`, `rankChange` (positive means the app moved up) and `changeType` (`up`, `down`, `same`, `new`, `dropped` or `baseline`). The last ranking of each chart and keyword is kept in a named key-value store, so it works across scheduled runs.
- **Only changes mode:** unchanged ranks are skipped and **not charged**. A daily schedule then returns only what moved.
- **Polite and robust:** the Actor stays within Apple's documented limit of about 20 calls per minute. It retries with backoff on 403, 429 and 5xx errors, and an error in one list is saved as a free error row instead of crashing the run. If the legacy feed fails, the overall Top Free and Top Paid iPhone charts fall back to Apple's newer marketing RSS feed.

### ASO use cases

- **Keyword research:** start from 3-5 seed keywords, get 20 related terms each, and pick the ones with `competition: low` and many `top10AppsUnder1kRatings` for your title, subtitle and keyword field. Then track them daily.
- **Daily keyword rank tracking:** check where your app ranks for 20 to 50 keywords in each of your markets every morning, and get alerts when you move up, move down or drop out of the top 200.
- **Competitor monitoring:** see which competitors outrank you for "budget", "habit tracker" or "vpn", and how their ranks change after their updates. Compare with `version` and `currentVersionReleaseDate`.
- **Chart intelligence:** follow Top Grossing Games in the US, Japan and Korea, spot new entries the day they appear, and track a category across 30 markets with `countries: ["top"]`.
- **Market and localization research:** find out which apps lead a category in each country before you localize or launch there.
- **Investors, agencies and journalists:** build daily chart history datasets from the chart rows, which come with ratings and versions.
- **Dashboards and alerts:** send the rank changes to Google Sheets, Slack, BigQuery or a webhook through Apify integrations.

### Input example

```json
{
  "charts": ["topfreeapplications", "topgrossingapplications"],
  "countries": ["us", "de", "jp"],
  "genres": ["0", "6014"],
  "chartLimit": 100,
  "enrichWithLookup": true,
  "keywords": ["budget", "budget planner", "expense tracker"],
  "trackApps": ["942571931", "https://apps.apple.com/us/app/monarch-budget-track-money/id1459319842", "com.example.myapp"],
  "keywordOutput": "tracked",
  "searchDepth": 200,
  "outputMode": "changes",
  "historyStoreName": "my-budget-app-aso"
}
```

The prefilled input returns the US Top Free chart (100 apps) and the rank of two budgeting apps for "budget" in about 3 seconds, for about $0.05.

| Field | Default | Notes |
|---|---|---|
| `charts` | – | `topfreeapplications`, `toppaidapplications`, `topgrossingapplications`, the same three for iPad (`...ipadapplications`), `newapplications`, `newfreeapplications`, `newpaidapplications`, `topfreemacapps` |
| `countries` | `us` | Two-letter storefront codes, `top` (30 largest markets) or `all` (175) |
| `genres` | `0` (overall) | Category ids such as `6014` Games, `6015` Finance, `7012` Games: Puzzle. Apple ignores categories on New and Mac feeds |
| `chartLimit` | 100 | 1–100 ranks per chart |
| `enrichWithLookup` | true | Rating, version, size and more. Costs no extra |
| `keywords` | – | Search terms. Each one is checked in every country |
| `trackApps` | – | Your apps and competitors: ID, App Store URL or bundle ID |
| `keywordOutput` | `tracked` | `tracked` gives one row per tracked app per keyword. `all` gives the full ranking |
| `searchDepth` | 200 | How deep to look (Apple's maximum is 200) |
| `platform` | `iphone` | `iphone` or `ipad` search results |
| `outputMode` | `all` | `changes` outputs only new, up, down and dropped rows (plus the first-run baseline) |
| `compareWithPreviousRun` / `historyStoreName` | true / `app-store-rank-history` | Use one store name per project |
| `chartsOnlyTrackedApps` | false | Only output your tracked apps from the charts |
| `suggestionSeeds` | – | Seed keywords for keyword suggestions. Empty = mode off |
| `suggestionsPerSeed` | 20 | 1–50 suggestions per seed and country |
| `suggestionCompetition` | true | Add top-10 competition data (1 extra Apple call per suggestion) |
| `suggestionMinApps` | 2 | A term must appear in at least this many of the seed's results |
| `maxRows` / `maxRequestsPerMinute` | 0 / 20 | 0 means no limit. Apple's documented limit is about 20 calls per minute |

### Output example

Chart row (real data, 2026-10-04):

```json
{
  "type": "chart",
  "chart": "topfreeapplications",
  "chartTitle": "Top Free iPhone Apps",
  "chartGenre": "All apps",
  "country": "us",
  "date": "2026-10-04",
  "rank": 1,
  "previousRank": 2,
  "rankChange": 1,
  "changeType": "up",
  "id": 6760173601,
  "bundleId": "com.facebook.hatch",
  "name": "Muse from Meta",
  "developer": "Meta Platforms, Inc.",
  "price": 0.0,
  "currency": "USD",
  "primaryGenre": "Productivity",
  "rating": 4.862,
  "ratingCount": 146609,
  "version": "9.1",
  "currentVersionReleaseDate": "2026-10-01T06:49:33Z",
  "sizeMB": 130.9,
  "url": "https://apps.apple.com/us/app/muse-from-meta/id6760173601",
  "tracked": false
}
```

Keyword rank row:

```json
{
  "type": "keyword",
  "keyword": "budget",
  "country": "us",
  "rank": 2,
  "ranked": true,
  "previousRank": 5,
  "rankChange": 3,
  "changeType": "up",
  "id": 942571931,
  "name": "EveryDollar: Budget Management",
  "developer": "The Lampo Group Incorporated",
  "rating": 4.735,
  "ratingCount": 84125,
  "resultsCount": 194,
  "tracked": true
}
```

Keyword suggestion row (real data, US, seed "budget", 2026-10-16; `top10Apps` shortened):

```json
{
  "type": "keyword-suggestion",
  "seedKeyword": "budget",
  "keyword": "daily budget",
  "country": "us",
  "suggestionRank": 8,
  "containsSeed": true,
  "seedAppsUsingTerm": 8,
  "bestSeedRank": 24,
  "source": "title",
  "dominantGenre": "Finance",
  "relevanceScore": 2.299,
  "competition": "medium",
  "competitionScore": 55,
  "top10MedianRatings": 282,
  "top10AvgRating": 3.35,
  "top10ExactTitleMatches": 7,
  "top10AppsUnder1kRatings": 6,
  "exampleApps": ["Daily Budget Original", "Wallet - Daily Budget & Profit", "Dot: Daily Budget Tracker"],
  "top10Apps": [{"rank": 1, "id": 651896614, "name": "Daily Budget Original", "rating": 4.71, "ratingCount": 4842}],
  "trackedAppsInTop10": [{"rank": 9, "id": 942571931, "name": "EveryDollar: Budget Management"}]
}
```

Rows also include `icon`, `developerId`, `genreId`, `releaseDate`, `contentRating`, `previousCheckedAt`, `chartUpdated`, `source` and `scrapedAt`. The Output tab has five table views: **Top chart ranks**, **Keyword ranks**, **Keyword suggestions**, **Rank changes** and **Errors**. A run summary with row counts, Apple request counts and errors is saved as `OUTPUT` in the key-value store.

### Pricing

Pay per event. You only pay for rows you get:

| Event | Price |
|---|---|
| Chart row | **$0.0005** ($0.50 per 1,000; a full top-100 chart costs $0.05) |
| Keyword rank row | **$0.001** ($1 per 1,000) |
| Keyword suggestion row | **$0.001** (charged as a keyword rank row) |
| Actor start | $0.00005 |

Example costs:

- Daily check of 2 apps on 25 keywords in 3 countries: 150 rows = **$0.15 per day**. With **Only changes**, you pay only for the ranks that moved.
- Top Grossing Games in the 30 largest markets: 3,000 rows = **$1.50**.

Error rows, the Lookup enrichment and unchanged ranks in Only changes mode are free. Set a **maximum cost per run**, and the Actor stops cleanly when it is reached.

How this compares with other Apify Store actors (public prices, October 2026):

| Actor | Chart / app row | Keyword ranking row | Rank change vs last run |
|---|---|---|---|
| **This Actor** | **$0.0005** | **$0.001** | Yes, plus only-changes mode |
| sourabhbgp/apple-app-store-scraper | $0.002 per result | – | No |
| petersutarik/aso-keyword-intel | – | $0.002 per ranking row ($0.02 per metrics row) | – |

### How keyword suggestions work

- **Source:** only the official iTunes Search API, the same call used for rank tracking. The Actor does **not** call Apple's undocumented autocomplete ("search hints") endpoint or any path that Apple's robots.txt disallows.
- **Mining:** app names are split into a title and a subtitle-like tagline at separators such as `:`, `-` and `|` (the Search API has no separate subtitle field). 1-3 word phrases are scored by how many apps use them, weighted by search rank, with a boost for phrases that contain the seed. Filler words, the seed itself, and shorter phrases that add nothing over a longer one are removed.
- **Competition:** one more search per suggestion (top 10). `competitionScore` = 70% established apps (median ratings on a log scale, 100k ratings = max) + 30% the share of the top 10 using the exact phrase in their name. It is a heuristic for comparing keywords, not Apple's search popularity (that is only available inside Apple Search Ads).
- Suggestion rows are not compared with previous runs and are always output in full, also in **Only changes** mode. Works best for languages that separate words with spaces.

### Use with AI agents (Apify MCP)

Add this Actor to Claude, Cursor or any MCP client through the [Apify MCP server](https://mcp.apify.com), for example `https://mcp.apify.com?actors=gazidev/app-store-top-charts`. An agent can then answer prompts like:

- "Where does my app 942571931 rank for 'budget', 'budget planner' and 'money tracker' in the US, UK and Canada, and who ranks above it?"
- "Which apps are new in Germany's Top Free Games chart since yesterday?"
- "Compare the Top Grossing Finance apps in the US and Japan by rating and last update."
- "Suggest 20 low-competition keywords related to 'habit tracker' in the UK App Store."

The input is plain JSON with documented fields, so an agent can call the Actor without any setup. The structured output works well for LLM summaries and alerts.

### Related Actors

- [Apple App Store Scraper](https://apify.com/gazidev/app-store-scraper): full app details (description, screenshots, languages, developer apps), search results and charts.
- [App Store Review Monitor](https://apify.com/gazidev/app-store-review-monitor): App Store reviews and ratings over time.

The field names (`id`, `bundleId`, `name`, `developer`, `rating`, `ratingCount`, `primaryGenre`, `url`, `country`) are the same in all three Actors, so you can join the datasets.

### FAQ

**Where does the data come from?** From Apple's public App Store RSS chart feeds (`itunes.apple.com/{country}/rss/...` and `rss.marketingtools.apple.com`) and the public iTunes Search and Lookup APIs. The Actor does no HTML scraping, uses no private APIs and needs no login.

**What are Apple's usage limits, and how does the Actor respect them?** Apple's Search API documentation says the API is "limited to approximately 20 calls per minute (subject to change)". The Actor throttles iTunes Search and Lookup calls to at most 20 per minute (you can set it lower). It caps the RSS feeds at 30 per minute and backs off on 403 and 429 responses. One call returns a whole chart, 100 looked-up apps or 200 search results, so most runs need only a few calls. Large runs (for example 175 countries) take a few minutes because of this throttle.

**Is the keyword rank the same as in the App Store app?** It is the order in which Apple's public Search API returns results for the keyword in that storefront. This follows App Store search closely but is not guaranteed to be identical to what a given device shows, because personalization, Search Ads and A/B tests can differ. It is consistent from run to run, which is what you need to track trends.

**Why only 100 apps per chart?** Apple's RSS feeds stop at 100 entries, even if a higher limit is requested.

**How does rank change tracking work?** After each chart or keyword is delivered, its full ranking is saved in the named key-value store (`historyStoreName`). The next run compares against it. The first run of each list is marked `baseline`. Use a different store name for each independent project. If a run stops at your cost limit partway through a list, that list is not saved, so no change is lost.

**Are Top Grossing and category charts supported?** Yes, for iPhone and iPad, using Apple's iTunes RSS feeds. Apple ignores categories on the New apps and Mac feeds, so the Actor runs those charts only once, as the overall chart.

**Why is a tracked app "not ranked"?** It is not in the top `searchDepth` results for that keyword, or it is not sold in that storefront.

**Is this affiliated with Apple?** No. This is an independent tool. It is not affiliated with, endorsed by or sponsored by Apple Inc. App Store, iPhone, iPad and Mac are trademarks of Apple Inc. and are used here only to describe the data. App names and icons belong to their owners. Apple's terms for its promotional content ask that artwork be used only to promote App Store content. Follow Apple's terms if you republish icons or data.

### Related keywords

App Store top charts, App Store rankings, App Store keyword rank tracker, ASO keyword research, App Store keyword suggestions, keyword competition, app keyword ideas, ASO rank tracker, app store optimization tool, iOS keyword ranking, app ranking history, top grossing apps by country, top free games chart, App Store category rankings, competitor app tracking, iTunes RSS feed API, iTunes Search API, app rank monitoring.

# Actor input Schema

## `charts` (type: `array`):

App Store top charts to download (Apple's public RSS feeds, up to 100 apps each). Leave empty to track keywords only.

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

Two-letter storefront codes: us, gb, de, fr, jp, tr, br... (175 supported). Use "top" for the 30 largest markets or "all" for every storefront. Applies to charts and keywords.

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

Overall chart and/or category charts (e.g. Games, Finance, Games: Puzzle). Applied to top free/paid/grossing iPhone and iPad charts; Apple ignores categories on "New" and Mac feeds.

## `chartLimit` (type: `integer`):

How many ranks to return per chart (Apple's feeds stop at 100).

## `enrichWithLookup` (type: `boolean`):

One extra Apple call per chart adds rating, ratingCount, version, releaseDate, currentVersionReleaseDate, sizeMB, bundleId and content rating. Same price per row.

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

Search terms to check. Each keyword is searched in every country; the result order is the rank.

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

App Store IDs (e.g. 942571931), App Store URLs or bundle IDs. For keywords you get each app's rank, or 'not ranked' if it is not in the top results.

## `keywordOutput` (type: `string`):

Without tracked apps, all ranked apps are returned.

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

How many search results to scan per keyword (the iTunes Search API returns at most 200). Apps below this depth are reported as not ranked.

## `platform` (type: `string`):

Which device's search results to rank: iPhone apps or iPad apps.

## `suggestionSeeds` (type: `array`):

Optional. For each seed (e.g. "budget") the Actor reads the top 200 iTunes Search API results and mines related keywords from the app names and subtitles (e.g. "budget planner", "expense tracker"), ranked by how many top apps use them. Leave empty to skip. Uses only the official Search API (no autocomplete endpoint). Suggestion rows are always output in full, also in 'Only changes' mode.

## `suggestionsPerSeed` (type: `integer`):

How many related keywords to return per seed and country (1 row each).

## `suggestionCompetition` (type: `boolean`):

One extra Search API call per suggestion: the top 10 apps for that keyword with median and total ratings, average rating, how many use the exact keyword in their name, apps under 1k ratings, a 0-100 competitionScore and low/medium/high. Same price per row; slower because of Apple's ~20 calls/minute limit.

## `suggestionMinApps` (type: `integer`):

A suggestion must appear in at least this many of the seed's search results (filters one-off brand names).

## `outputMode` (type: `string`):

'Only changes' is ideal for scheduled runs: unchanged ranks are not output or charged. The first run of each list outputs everything as a baseline.

## `compareWithPreviousRun` (type: `boolean`):

Adds previousRank, rankChange and changeType by saving each ranking in a named key-value store.

## `historyStoreName` (type: `string`):

Named key-value store that keeps the last ranking of each chart and keyword. Use different names for independent trackers.

## `chartsOnlyTrackedApps` (type: `boolean`):

Only output chart rows for the apps in 'Apps to track' (and those that left the chart).

## `maxRows` (type: `integer`):

Stop after this many rows (0 = no limit). The run also stops cleanly at your maximum cost per run.

## `maxRequestsPerMinute` (type: `integer`):

Apple documents a limit of about 20 calls per minute for the iTunes Search/Lookup API. RSS feeds are capped at 30 per minute.

## Actor input object example

```json
{
  "charts": [
    "topfreeapplications"
  ],
  "countries": [
    "us"
  ],
  "genres": [
    "0"
  ],
  "chartLimit": 100,
  "enrichWithLookup": true,
  "keywords": [
    "budget"
  ],
  "trackApps": [
    "942571931",
    "1459319842"
  ],
  "keywordOutput": "tracked",
  "searchDepth": 200,
  "platform": "iphone",
  "suggestionSeeds": [],
  "suggestionsPerSeed": 20,
  "suggestionCompetition": true,
  "suggestionMinApps": 2,
  "outputMode": "all",
  "compareWithPreviousRun": true,
  "historyStoreName": "app-store-rank-history",
  "chartsOnlyTrackedApps": false,
  "maxRows": 0,
  "maxRequestsPerMinute": 20
}
```

# Actor output Schema

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

No description

## `keywords` (type: `string`):

No description

## `suggestions` (type: `string`):

No description

## `changes` (type: `string`):

No description

## `errors` (type: `string`):

No description

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

No description

## `results` (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 = {
    "charts": [
        "topfreeapplications"
    ],
    "countries": [
        "us"
    ],
    "keywords": [
        "budget"
    ],
    "trackApps": [
        "942571931",
        "1459319842"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/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 = {
    "charts": ["topfreeapplications"],
    "countries": ["us"],
    "keywords": ["budget"],
    "trackApps": [
        "942571931",
        "1459319842",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/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 '{
  "charts": [
    "topfreeapplications"
  ],
  "countries": [
    "us"
  ],
  "keywords": [
    "budget"
  ],
  "trackApps": [
    "942571931",
    "1459319842"
  ]
}' |
apify call gazidev/app-store-top-charts --silent --output-dataset

```

## MCP server setup

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