# App Store Reviews Scraper, Top Charts & App Details API (`localwire/app-store-reviews`) Actor

App Store reviews scraper and top charts API: iOS app reviews, app details and top free, paid and grossing charts for any country, from Apple's official feeds. Monitor mode returns only new reviews. $0.10 per 1,000 reviews, $0.10 per 100-app chart. No reviewer names.

- **URL**: https://apify.com/localwire/app-store-reviews.md
- **Developed by:** [Local Wire](https://apify.com/localwire) (community)
- **Categories:** Marketing, SEO tools, Developer tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 reviews

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 Reviews Scraper: Reviews, App Details & Top Charts API

Apple App Store reviews, app details and top charts (top free, top paid, top grossing) for any iOS app and any country, from Apple's official RSS feeds and Search API. **$0.10 per 1,000 reviews, $0.10 per 100-app chart, $0.30 per 1,000 app records.** No start fee, no login, no reviewer names.

One Actor covers all three jobs, fetches many countries in a single run, and has a **monitor mode** that returns only reviews you have not had before, so a daily schedule gives you each new review once. Results come as flat JSON, CSV or Excel.

### What you get

Every record has a `type`: `review`, `app` or `chartEntry`. The dataset has a table view for each.

#### Review

```json
{
  "type": "review",
  "reviewId": "14751234821",
  "appId": "389801252",
  "appName": "Instagram",
  "country": "gb",
  "rating": 5,
  "title": "Sick",
  "text": "Sick app.",
  "appVersion": "454.1",
  "reviewedAt": "2026-11-04T20:21:17.000Z",
  "helpfulVotes": 0,
  "totalVotes": 0,
  "sortedBy": "mostRecent",
  "appUrl": "https://apps.apple.com/gb/app/id389801252",
  "scrapedAt": "2026-11-06T20:40:00.000Z"
}
```

#### Chart entry

```json
{
  "type": "chartEntry",
  "chart": "topFree",
  "device": "iphone",
  "country": "gb",
  "genreId": "6015",
  "genreName": "Finance",
  "rank": 1,
  "appId": "469964520",
  "bundleId": "com.lloydstsb.LloydsTSB",
  "name": "Lloyds Mobile Banking",
  "developerName": "Lloyds Banking Group",
  "developerUrl": "https://apps.apple.com/gb/developer/lloyds-banking-group/id469964523",
  "price": 0,
  "currency": "GBP",
  "category": "Finance",
  "categoryId": "6015",
  "releasedAt": "2011-10-10T07:00:00.000Z",
  "summary": "Bank on the go with the Lloyds app…",
  "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/…/100x100bb.png",
  "appUrl": "https://apps.apple.com/gb/app/lloyds-mobile-banking/id469964520",
  "chartUpdatedAt": "2026-11-06T19:33:40.000Z",
  "scrapedAt": "2026-11-06T20:40:00.000Z"
}
```

#### App

The store listing of one app in one country: `appId`, `bundleId`, `name`, `developerName`, `developerId`, `sellerName`, `averageRating`, `ratingCount`, `averageRatingCurrentVersion`, `ratingCountCurrentVersion`, `price`, `currency`, `formattedPrice`, `version`, `currentVersionReleasedAt`, `releasedAt`, `releaseNotes`, `description`, `primaryGenre`, `genres`, `contentRating`, `advisories`, `minimumOsVersion`, `fileSizeBytes`, `languages`, `features`, `iconUrl`, `screenshotUrls`, `ipadScreenshotUrls`, `appUrl`, `developerUrl`, `sellerUrl`, plus `searchTerm` and `searchRank` when the app was found by a search.

The run's key-value store gets an `OUTPUT` summary: counts per country, apps not found in a storefront, reviews filtered out or skipped as already seen, and any errors.

### Quick start

The form opens with Instagram's reviews in the UK and US stores. Press **Start**: you get the latest 100 reviews from each store, 200 records, for $0.02. As JSON:

```json
{
  "mode": "reviews",
  "apps": ["https://apps.apple.com/gb/app/instagram/id389801252"],
  "countries": ["gb", "us"]
}
```

Put your own app in `apps` as an App Store URL, a numeric app id (`389801252`) or a bundle id (`com.burbn.instagram`).

The smallest top-charts input (top free iPhone apps, UK and US, 100 each):

```json
{ "mode": "topCharts" }
```

### App Store top charts: top free, top paid and top grossing

Set `mode` to `topCharts` to get Apple's top charts as data. Each chart position is one `chartEntry` record with its rank, app id, bundle id, name, developer, price, category, release date and store link.

- **Charts:** `topFree`, `topPaid`, `topGrossing`.
- **Devices:** `iphone` and `ipad`.
- **Countries:** any App Store storefront, several per run.
- **Genres:** all apps, or any genre by name or id (Business, Education, Entertainment, Finance, Games, Health & Fitness, Lifestyle, Music, Productivity, Shopping, Social Networking, Travel, Utilities and the rest of Apple's top-level list). Game sub-genres work by id (7001 to 7019).
- **Depth:** up to 100 apps per chart.

Top grossing finance and games apps on iPhone in the UK, US and Germany:

```json
{
  "mode": "topCharts",
  "charts": ["topGrossing"],
  "genres": ["Finance", "Games"],
  "countries": ["gb", "us", "de"],
  "chartLimit": 50
}
```

A run fetches every combination you ask for: charts × devices × genres × countries. The example above is 1 × 1 × 2 × 3 = 6 charts of 50, so 300 records and $0.06.

**Track chart rank over time.** Schedule a daily top-charts run and keep the datasets. `rank`, `appId`, `chart`, `genreName`, `country` and `chartUpdatedAt` are stable keys, so a spreadsheet or database can chart any app's daily position.

### Reviews

Set `mode` to `reviews` (the default). For each app and country you get the latest reviews with star rating, title, text, app version, date and helpful votes.

- **Filters:** `minRating` and `maxRating` (for example 1 to 2 for complaints), `dateFrom`, and `sort` by most recent or most helpful.
- **Many apps and countries per run.** Add apps directly or let `searchTerms` pick the top search results.
- **Monitor mode:** with `onlyNewReviews` on, the Actor remembers what it returned and returns, and charges for, only new reviews.

New 1 to 2 star reviews of two apps in the UK and US, for a daily alert:

```json
{
  "mode": "reviews",
  "apps": ["389801252", "com.spotify.client"],
  "countries": ["gb", "us"],
  "maxRating": 2,
  "onlyNewReviews": true
}
```

### App details and App Store search

Set `mode` to `appDetails` for the full store listing of each app in each country, or give `searchTerms` to get the listings of the apps that rank for a search, with `searchRank`.

```json
{ "mode": "appDetails", "searchTerms": ["habit tracker"], "searchLimit": 20, "countries": ["us"] }
```

### Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `mode` | string | `reviews` | `reviews`, `appDetails` or `topCharts`. |
| `apps` | string\[] | | App Store URLs, numeric app ids or bundle ids. Needed for `reviews` and `appDetails` unless `searchTerms` is given. Not used for top charts. |
| `searchTerms` | string\[] | | Search the App Store and use the top results. |
| `searchLimit` | integer | 10 | Apps per search term and country (1 to 200). |
| `countries` | string\[] | `["gb", "us"]` | Two-letter storefront codes: `gb`, `us`, `de`, `fr`, `jp`… |
| `maxReviewsPerApp` | integer | 100 | Reviews per app and country (1 to 500). |
| `sort` | string | `mostRecent` | `mostRecent` or `mostHelpful`. |
| `minRating` / `maxRating` | integer | 1 / 5 | Star range. |
| `dateFrom` | string | | Only reviews on or after this date (`2026-10-01`). |
| `onlyNewReviews` | boolean | false | Monitor mode: only reviews not returned by earlier runs. Reads in most-recent order. |
| `monitorName` | string | `default` | Keeps separate monitors apart; runs with the same name share what has been seen. |
| `charts` | string\[] | `["topFree"]` | `topFree`, `topPaid`, `topGrossing`. |
| `devices` | string\[] | `["iphone"]` | `iphone`, `ipad`. |
| `genres` | string\[] | all apps | Genre names (Finance, Games) or ids (6015). |
| `chartLimit` | integer | 100 | Apps per chart (1 to 100). |
| `maxItems` | integer | 10,000 | Stop after this many records in total. |

An invalid input fails at once with a message listing every problem.

### Use cases

- **Review monitoring.** A daily run with monitor mode on, sent to Slack, e-mail or Google Sheets.
- **Complaint mining and product research.** Pull the 1 to 2 star reviews of your app or a competitor's and give them to an AI model for themes, bugs and feature requests.
- **Release tracking.** `appVersion` on each review shows how a new version is landing.
- **Competitor analysis.** Compare ratings, rating counts, versions, prices and release notes across apps and countries.
- **App Store optimisation (ASO).** See which apps rank for a search term, and where apps sit in the top charts of a genre.
- **Market and chart tracking.** Snapshot the top free, paid and grossing charts every day, per country, genre and device.
- **Lead lists.** Top charts by genre and country give app and developer names for a category.
- **AI agents.** A small, predictable schema with three clear modes.

### Pricing

Pay per result. No start fee, no monthly fee.

| Record | Price | Per 1,000 |
|---|---|---|
| Review | $0.0001 | **$0.10** |
| Chart entry | $0.001 | **$1.00** ($0.10 for a 100-app chart) |
| App record | $0.0003 | **$0.30** |

Reviews that are filtered out, or skipped by monitor mode because you already had them, are free.

| Run | Records | Cost |
|---|---|---|
| The quick-start run: 100 reviews × 2 countries | 200 reviews | **$0.02** |
| All 500 available reviews of one app in 5 countries | 2,500 reviews | **$0.25** |
| Daily monitor of 5 apps in 3 countries finding 40 new reviews | 40 reviews a day | $0.004 a day, about **$0.12 a month** |
| Top free, paid and grossing iPhone charts, one country, daily | 300 entries a day | $0.30 a day, about **$9 a month** |
| Store listings of the top 20 apps for a search term | 20 apps | **$0.006** |

To cap spending, set `maxItems` or a maximum cost per run in the run options (`maxTotalChargeUsd` in the API). The Actor stops cleanly at the limit.

### Daily review alerts in 2 minutes

1. Add your apps and countries, and turn on **Only new reviews**.
2. Save it as a **Task** and add a **Schedule** (for example every morning).
3. Add an **integration** (Slack, e-mail, Google Sheets, webhook) to receive the new reviews.

The first run returns the latest reviews (up to `maxReviewsPerApp`); every run after that returns only what is new. Monitor state is kept in a key-value store named `app-store-reviews-monitor` in your own Apify account.

### Use it from the API

```bash
curl -X POST "https://api.apify.com/v2/acts/localwire~app-store-reviews/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "content-type: application/json" \
  -d '{"apps": ["389801252"], "countries": ["gb"], "maxRating": 2, "maxReviewsPerApp": 50}'
```

Add `&format=csv` to get CSV instead of JSON. With the official clients:

```js
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("localwire/app-store-reviews").call({ mode: "topCharts", charts: ["topGrossing"], countries: ["us"] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("localwire/app-store-reviews").call(run_input={"apps": ["389801252"], "countries": ["us"], "maxReviewsPerApp": 200})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### Use it from an AI agent (MCP)

Apify hosts an MCP server at `https://mcp.apify.com`. Add it to an MCP client (Claude, ChatGPT, Cursor, VS Code and others) and sign in with your Apify account, or send your API token as an `Authorization: Bearer` header. To expose just this Actor as a tool:

```
https://mcp.apify.com?tools=localwire/app-store-reviews
```

Then ask, for example, "summarise the 1-star UK reviews of Instagram from the last week" or "which finance apps are top grossing in Germany today?". Notes for agents: in `reviews` and `appDetails` modes `apps` or `searchTerms` must be given (there is no default app); `mode: "topCharts"` needs no other field; `countries` defaults to `gb` and `us`.

### Integrations

Apify connects runs to Make, n8n, Zapier, LangChain, webhooks and other tools, and datasets export as JSON, CSV, Excel, XML or RSS. Typical setups: new reviews to a Slack channel, daily chart snapshots appended to Google Sheets, low-star reviews into a support tool through a webhook.

### FAQ

#### How do I export App Store reviews to CSV or Excel?

Run the Actor in `reviews` mode, open the dataset and choose CSV or Excel. From the API, request `https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv`, or add `format=csv` to the run-sync call above.

#### How do I get App Store top charts as JSON or CSV?

Set `mode` to `topCharts`, pick `charts`, `countries` and optionally `genres` and `devices`, and run. Each chart position is one record; export the dataset as JSON, CSV or Excel.

#### Can I get the top charts for one category, such as Finance or Games?

Yes. Put genre names or ids in `genres`. Leave it empty for the overall chart. Several genres in one run return one chart each.

#### How do I track an app's chart ranking over time?

Schedule a daily `topCharts` run and keep or append the results. Filter by `appId` and plot `rank` against `chartUpdatedAt`. The Actor returns the chart as it is now; Apple's feeds have no history.

#### How many apps are in each chart?

Up to 100 per chart, country, device and genre. That is the limit of Apple's feed. Some genre charts are shorter.

#### Is there an official App Store reviews API?

Apple's App Store Connect API returns reviews only for apps you own. For any app, Apple publishes a public RSS feed of the latest reviews per country, which is what this Actor reads.

#### How many reviews can I get per app?

The latest 500 per app per country, which is all Apple's feed holds. Each storefront has its own reviews, so adding countries adds reviews. For a longer history, run monitor mode on a schedule and keep the results.

#### How do I find an app's App Store id?

It is the number after `id` in the app's App Store URL: `https://apps.apple.com/gb/app/instagram/id389801252` has id `389801252`. You can also paste the whole URL or the bundle id.

#### Does it return reviewer names?

No. Reviewer nicknames and profile links are never included, and e-mail addresses and phone numbers that people paste into review text are masked.

#### Does it work for Google Play?

No. It reads Apple's App Store only. Charts are the iPhone and iPad charts.

#### Can I get ratings without a written review, or the star breakdown?

Not individually. Star-only ratings are not in Apple's review feed. `appDetails` mode gives each app's `averageRating` and `ratingCount`, overall and for the current version.

### Limitations

- **500 reviews per app per country.** Apple's feed holds 10 pages of 50. There is no way to page further back.
- **Charts stop at 100 apps** and have no history; schedule runs to build one.
- **Freshness.** Apple's feeds can lag the App Store by a day or so.
- **Countries.** Any App Store storefront by its two-letter code. A code Apple does not recognise, or an app that is not sold in a storefront, is reported in `OUTPUT` and skipped.
- **No developer replies.** Apple's feed does not include developers' responses to reviews.
- **No Google Play**, no Mac App Store charts, no in-app purchase lists, no download or revenue estimates.
- **Rate limits.** Requests are paced within Apple's guidance and a throttled request is retried after a wait. If Apple keeps refusing, that app, storefront or chart is reported in `OUTPUT` and skipped; the Actor uses no proxies and does nothing to get round a block.

### Legal

This Actor reads Apple's public RSS feeds and the iTunes Search API. It is not affiliated with or endorsed by Apple. App Store, iPhone and iPad are trademarks of Apple Inc. You are responsible for using the data in line with applicable law and Apple's terms.

### Feedback

Missing a field? Open an issue on the Actor's **Issues** tab.

### More from this developer

- [UK & EU public tenders](https://apify.com/localwire/uk-public-tenders)
- [Google Trends Trending Now](https://apify.com/localwire/google-trends-trending-now)
- [Hacker News](https://apify.com/localwire/hacker-news)
- [Career Site Jobs API](https://apify.com/localwire/ats-jobs)
- [Workday Jobs](https://apify.com/localwire/workday-jobs)
- [Reed Jobs](https://apify.com/localwire/reed-jobs)
- [Wellfound Jobs](https://apify.com/localwire/wellfound-jobs)
- [Flashscore results and fixtures](https://apify.com/localwire/flashscore-sports)
- [ESPN scores and standings](https://apify.com/localwire/espn-sports)
- [Eventbrite Events](https://apify.com/localwire/eventbrite-events)
- [Meetup Events & Groups](https://apify.com/localwire/meetup-events)
- [Gumtree Listings](https://apify.com/localwire/gumtree-listings)
- [Telegram Channels](https://apify.com/localwire/telegram-channels)

# Actor input Schema

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

reviews: customer reviews of the apps (needs apps or searchTerms). appDetails: the store listing of each app (ratings, price, version, description, screenshots), plus search results (needs apps or searchTerms). topCharts: Apple's top free, paid or grossing charts by country, device and genre (needs nothing else). reviews if left out.

## `apps` (type: `array`):

App Store URLs (https://apps.apple.com/gb/app/instagram/id389801252), numeric app ids (389801252) or bundle ids (com.burbn.instagram). Required for reviews and appDetails unless searchTerms is given; there is no default app. Not used for top charts.

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

Search the App Store and use the top results, e.g. "budget planner". Combine with apps or use on its own. In appDetails mode each result carries its searchRank.

## `searchLimit` (type: `integer`):

How many search results to use per term and country.

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

Two-letter App Store storefront codes: gb, us, de, fr, au, ca, jp… Reviews, prices and charts differ by storefront. Every country is fetched in the same run, so each one multiplies the results. gb and us if left out.

## `maxReviewsPerApp` (type: `integer`):

Reviews to return per app and country (100 if left out). Apple's feed holds an app's latest 500 reviews per country, so 500 is the most you can get.

## `sort` (type: `string`):

Most recent first, or most helpful first.

## `minRating` (type: `integer`):

Only reviews with at least this many stars. Use 1 and a maximum of 2 to collect complaints.

## `maxRating` (type: `integer`):

Only reviews with at most this many stars.

## `dateFrom` (type: `string`):

Only reviews posted on or after this date, e.g. 2026-10-01.

## `onlyNewReviews` (type: `boolean`):

Remember what earlier runs returned and return only reviews you haven't had before. Schedule the Actor daily with this on to get each new review once. State is kept in a key-value store named app-store-reviews-monitor in your account.

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

Keeps separate monitors apart (one per client or task). Runs with the same name share what has been seen.

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

Which top charts to get in topCharts mode: topFree, topPaid, topGrossing. topFree if left out. One chart is fetched per chart × device × genre × country.

## `devices` (type: `array`):

iPhone and/or iPad charts (topCharts mode). iphone if left out.

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

Narrow the charts to genres by name (Finance, Games, Health & Fitness, Productivity…) or id (6015). Leave empty for the overall chart of all apps.

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

Apps per chart. Apple's charts list up to 100 apps (the default); each chart position costs $0.001.

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

Stop after this many records in total across all apps, countries and charts (10,000 if left out). You can also cap spending with the run's maximum cost.

## Actor input object example

```json
{
  "mode": "reviews",
  "apps": [
    "https://apps.apple.com/gb/app/instagram/id389801252",
    "com.spotify.client"
  ],
  "searchLimit": 10,
  "countries": [
    "gb",
    "us"
  ],
  "maxReviewsPerApp": 100,
  "sort": "mostRecent",
  "minRating": 1,
  "maxRating": 5,
  "onlyNewReviews": false,
  "monitorName": "default",
  "charts": [
    "topFree"
  ],
  "devices": [
    "iphone"
  ],
  "genres": [
    "Finance",
    "Games"
  ],
  "chartLimit": 100,
  "maxItems": 10000
}
```

# Actor output Schema

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

Customer reviews (reviews mode).

## `apps` (type: `string`):

Store listings (app details mode).

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

Chart positions (top charts mode).

## `allResults` (type: `string`):

Every record in the run's default dataset, all fields.

# 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 = {
    "apps": [
        "https://apps.apple.com/gb/app/instagram/id389801252"
    ],
    "countries": [
        "gb",
        "us"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("localwire/app-store-reviews").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 = {
    "apps": ["https://apps.apple.com/gb/app/instagram/id389801252"],
    "countries": [
        "gb",
        "us",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("localwire/app-store-reviews").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 '{
  "apps": [
    "https://apps.apple.com/gb/app/instagram/id389801252"
  ],
  "countries": [
    "gb",
    "us"
  ]
}' |
apify call localwire/app-store-reviews --silent --output-dataset

```

## MCP server setup

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

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/Ynat0V7UeLFBIpkN7/builds/nOUm6xa6zWVgXbQUh/openapi.json
