# Hotel Review Insights: Guest Topics, Sentiment & Ratings (`aleksandrbooking/hotel-review-insights`) Actor

Guest opinion of hotels from Google Hotels: the topics guests write about (service, rooms, breakfast, cleanliness) with positive and negative counts, ratings on Tripadvisor and other sites, quoted reviews, and a benchmark of a whole city. Not affiliated with Google.

- **URL**: https://apify.com/aleksandrbooking/hotel-review-insights.md
- **Developed by:** [Aleksandr Kobtsev](https://apify.com/aleksandrbooking) (community)
- **Categories:** Travel, Marketing, AI
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 hotels

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

Search a city or name your hotels and get what guests think of each one, as Google Hotels summarises it: the topics guests write about (service, rooms, breakfast, cleanliness, air conditioning) with how many mentions are positive and negative, what is praised and what is criticised, the ratings the hotel has on Tripadvisor, Trip.com and other travel sites, and the reviews Google quotes. One dataset row per hotel, and one benchmark of the whole market the run saw.

There is no login, no browser and no partner API. The Actor reads the pages Google Hotels serves to anyone, over plain HTTP, and takes the aggregates Google has already computed from hundreds or thousands of reviews: a hotel page costs one request, not one request per review. It reads only the pages Google's robots.txt leaves open to crawlers (see the last section).

### Who is this hotel review scraper for?

| You are | What you run | What you get |
|---|---|---|
| A hotel owner or a revenue manager | your hotel and its competitive set, by name | topic by topic, where guests prefer a competitor: your air conditioning at -0.60 against theirs at +0.40 |
| A hospitality agency or a software vendor | a city or a region | hotels with a specific complaint (bathroom, noise, check-in) to open a conversation with, and the sites where their rating is weaker |
| A reputation or market analyst | a market, a star range | the spread of every topic across the market and the hotels at both ends, in one record |
| An investor or a travel brand | a destination | which hotels have inflated Google ratings next to Tripadvisor, and what guests complain about in the destination |

### What makes this different from other review scrapers?

- **Aggregates, not a pile of reviews.** Google groups what guests wrote into topics and counts the positive and the negative mentions of each. A row carries 10 to 30 topics with `mentions`, `positive`, `negative`, a `score` from -1 to 1 and Google's own sentiment flag. A hotel with 4,000 reviews is one request.
- **Other sites in the same row.** Google shows the hotel's rating and number of reviews on Tripadvisor, Trip.com, Priceline and others. The row has each with the rating on a five-point scale, the review-weighted mean of the others and the gap to Google's rating.
- **What is praised and criticised, in one list each.** Topics with enough mentions (you choose how many) and a clearly positive or negative score, the best and the worst first.
- **A market benchmark.** At the end of a run the `TOPIC_BENCHMARK` record gives, for every topic, how many hotels have it, the mean, the median and the quartiles of their scores, the share of positive mentions, and the three best and three worst hotels.
- **It stays inside robots.txt.** Only `/travel/hotels/` addresses are requested; the Actor reads Google's robots.txt at the start of every run and refuses any address it closes.
- **Honest about what it could not read.** A hotel name that matches nothing well enough is listed in FAILED_HOTELS with what Google offered instead, and is not charged. A hotel with no topics and no ratings elsewhere is delivered and not charged either.

### What data does it return?

One row per hotel.

| Field | What it is |
|---|---|
| **name**, **propertyType**, **hotelClass** | The hotel, Google's wording for it ("3-star hotel") and its stars (`null` for properties Google does not class). |
| **address**, **city**, **region**, **district**, **countryCode**, **latitude**, **longitude**, **phone**, **website** | Where it is and how to reach it, from the hotel's Google page. |
| **googleUrl**, **googleMid**, **entityToken** | The hotel's Google Hotels page and Google's own identifiers (`googleMid` is `null` for vacation rentals). Stable, so they are the keys to join runs on. |
| **rating**, **reviewsCount**, **ratingDistribution** | Google's guest rating of 5, the number of reviews and the count per star. |
| **otherSites** | The hotel's rating on each other travel site Google shows (below). |
| **otherSitesAverage**, **otherSitesReviews**, **ratingGap** | The mean of the other sites' ratings on a five-point scale, weighted by their number of reviews; how many reviews that is; and Google's rating minus that mean (positive when Google guests are kinder). `null` when no other site is shown. |
| **topics**, **topicsCount** | Every topic Google lists, and how many (below). |
| **praised**, **criticised** | Topics with at least **Minimum mentions** and a score of 0.2 or more, best first (three of them), and of -0.2 or less, worst first. Each with `topic`, `score`, `mentions`, `positive`, `negative`. |
| **highlights** | The lines Google writes about the hotel ("Guests praised the service", "Guests mentioned beaches 17 times", "Featured in ..."), with `text`, `topic` and `mentions` where it has them. |
| **topicSummaries** | The sentence Google writes for a topic ("Features a beautiful rooftop garden and terrace with great views") and its number of mentions. |
| **reviewSamples** | Up to twelve reviews Google quotes on the page, its own first (below). Empty when **Include quoted reviews** is off. |
| **dealLabel** | Google's words for the price against the usual one ("19% less than usual"), when it has them. |
| **topicsFrom**, **googlePageRead** | Where the topics came from: `hotel_page` (all of them) or `search_card` (the first six, when **Read each hotel's Google page** is off or the page could not be read); and whether the hotel's page was read. |
| **query**, **source**, **scrapedAt** | The search text or name the row came from, whether it was a `search`, a `name` or a `link`, and when it was collected (ISO-8601, UTC). |
| **customData** | Your own JSON from the input, copied onto every row. Present only when you give it. |

Each entry of **topics**:

| Field | What it is |
|---|---|
| **name**, **chip** | Google's name of the topic as it writes it in sentences ("Bathroom and toiletries") and the short name on the chip ("Bathroom"). |
| **mentions**, **positive**, **negative**, **neutral** | How many reviews mention it, how many of those are positive and negative, and what is left. |
| **net** | Positive minus negative mentions over all mentions, -1 to 1. It is the plain count behind `score`, which Google leaves at 0 for a topic that guests are split on (97 positive and 53 negative mentions can sit at a score of 0). |
| **score**, **sentiment** | Google's sentiment score of the topic, -1 to 1, and its flag: `positive`, `negative`, or `neutral` for a topic it leaves unflagged. |
| **shown** | Whether Google puts the topic first, as a chip, and not under "more". |

Each entry of **otherSites**: `site`, `rating`, `scale` (5 for stars, 10 for some sites), `ratingOutOf5` (the rating on a five-point scale), `reviewsCount` and `url`. A site can appear twice when Google links two pages of it.

Each entry of **reviewSamples**: `source` (`Google` or the other site), `author` (the display name the site shows), `rating` and `scale`, `postedAt` (ISO, for Google's own) or `postedAgo` ("2 weeks ago", for other sites), `language`, `text`, `topic` (the topic Google quotes it for) and `url`.

An example row, as a run returned it on 11 October 2026: a hotel in Lisbon. The lists are shortened to three topics and two quoted reviews; a run returns all of them.

```json
{
  "name": "Secret Patio Lisbon",
  "propertyType": "3-star hotel",
  "hotelClass": 3,
  "address": "BC do Carrasco 1, 1200-096 Lisboa, Portugal",
  "city": "Lisbon",
  "region": "Lisbon",
  "district": "Lisbon",
  "countryCode": "PT",
  "latitude": 38.710096199999995,
  "longitude": -9.1508241,
  "phone": "+351 937 532 538",
  "website": "https://www.secretpatiolisbon.com/",
  "googleUrl": "https://www.google.com/travel/hotels/entity/ChoI89vpl_i-4PjMARoNL2cvMTFneTd5Z3Z6eBAB/prices?hl=en&gl=us&ts=CAESCgoCCAMKAggDEAAaGBIWEhQKBwjqDxALGAoSBwjqDxALGAsYASoHCgU6A1VTRA",
  "googleMid": "0xd193571e34950e7:0xccf181f782fa6df3",
  "entityToken": "ChoI89vpl_i-4PjMARoNL2cvMTFneTd5Z3Z6eBAB",
  "rating": 4,
  "reviewsCount": 1205,
  "ratingDistribution": [{ "stars": 5, "count": 675 }, { "stars": 4, "count": 204 }, { "stars": 3, "count": 111 }, { "stars": 2, "count": 78 }, { "stars": 1, "count": 137 }],
  "otherSites": [
    { "site": "Tripadvisor", "rating": 2.8, "scale": 5, "ratingOutOf5": 2.8, "reviewsCount": 102, "url": "https://www.tripadvisor.com/Hotel_Review-g189158-d17464255-r1066350257?m=68573&staydates=2026_10_25_2026_10_26" },
    { "site": "Trip.com", "rating": 4.1, "scale": 5, "ratingOutOf5": 4.1, "reviewsCount": 48, "url": "https://www.trip.com/hotels/detail?hotelid=10183478&Allianceid=810504&Sid=1394411" }
  ],
  "otherSitesAverage": 3.22,
  "otherSitesReviews": 150,
  "ratingGap": 0.78,
  "topics": [
    { "name": "Bathroom and toiletries", "chip": "Bathroom", "mentions": 84, "positive": 17, "negative": 61, "neutral": 6, "net": -0.524, "score": -0.417, "sentiment": "negative", "shown": true },
    { "name": "Service", "chip": "Service", "mentions": 159, "positive": 97, "negative": 53, "neutral": 9, "net": 0.277, "score": 0, "sentiment": "neutral", "shown": true },
    { "name": "Atmosphere", "chip": "Atmosphere", "mentions": 64, "positive": 56, "negative": 3, "neutral": 5, "net": 0.828, "score": 0.772, "sentiment": "positive", "shown": false }
  ],
  "topicsCount": 27,
  "praised": [
    { "topic": "Atmosphere", "score": 0.772, "mentions": 64, "positive": 56, "negative": 3 },
    { "topic": "Pool", "score": 0.711, "mentions": 44, "positive": 38, "negative": 4 },
    { "topic": "Fitness", "score": 0.576, "mentions": 77, "positive": 62, "negative": 8 }
  ],
  "criticised": [
    { "topic": "Air Conditioning", "score": -0.565, "mentions": 21, "positive": 2, "negative": 17 },
    { "topic": "Bathroom", "score": -0.417, "mentions": 84, "positive": 17, "negative": 61 },
    { "topic": "Safety", "score": -0.349, "mentions": 12, "positive": 2, "negative": 8 }
  ],
  "highlights": [
    { "text": "Featured in Digital Nomad Lisbon Guide 2020", "topic": null, "mentions": null }
  ],
  "topicSummaries": [
    { "summary": "Offers robust coworking space with free Wi-Fi, offices, and snacks", "mentions": 66 },
    { "summary": "Features a beautiful rooftop garden and terrace with great views", "mentions": 64 }
  ],
  "reviewSamples": [
    { "source": "Google", "author": "Ciara", "rating": 5, "scale": 5, "postedAt": "2023-05-12T21:20:58.459Z", "postedAgo": null, "language": null, "text": "Staff were very friendly and welcoming and reception is open 24 hours for all queries.", "topic": null, "url": null }
  ],
  "dealLabel": null,
  "topicsFrom": "hotel_page",
  "googlePageRead": true,
  "query": "hotels in Lisbon",
  "source": "search",
  "scrapedAt": "2026-10-11T20:20:42.565Z"
}
```

The example shows what the data says, not a verdict: a hotel rated 4.0 on Google and 2.8 on Tripadvisor, with 17 of 84 mentions of its bathroom positive.

### The market benchmark

The `TOPIC_BENCHMARK` record of the run (key-value store) has one entry for each topic that at least two hotels have **Minimum mentions** or more of, most common first:

| Field | What it is |
|---|---|
| **topic**, **hotels**, **mentions** | The topic, how many hotels of the run have it with enough mentions, and the mentions in all. |
| **averageScore**, **weightedScore**, **medianScore**, **p25**, **p75** | The mean of the hotels' scores (each hotel once), the mean weighted by mentions, the median and the quartiles. |
| **positiveShare** | Positive mentions over positive and negative ones together. |
| **best**, **worst** | The three hotels with the highest and the lowest score of the topic: `name`, `entityToken`, `score`, `mentions`. |

A hotel is placed in the market by comparing its `score` to `p25`, `medianScore` and `p75` of the same topic: air conditioning at -0.60 is far below a market median of -0.05.

### How do I use it?

1. Under **Searches** type what you would type into Google Hotels: `hotels in Batumi`, `boutique hotels in Lisbon`. Or under **Hotels** put hotel names with the city (`Hilton Batumi`), or paste a Google Hotels link of a hotel.
2. Set **Hotels per run** and the filters you want: reviews, stars, the minimum mentions that make a topic count.
3. Press **Start**. 60 hotels of three cities took under a minute.

From the API:

```json
{
  "searchQueries": ["hotels in Batumi"],
  "hotels": ["Hilton Batumi"],
  "maxHotelsPerSearch": 40,
  "maxHotels": 60,
  "minMentions": 15,
  "language": "en"
}
```

### What can I set?

| Setting | What it does |
|---|---|
| **Searches** | Texts to search on Google Hotels. Each returns up to **Hotels per search** hotels. |
| **Hotels** | Hotels by name with the city, or by Google Hotels link. |
| **Hotels per search** | How many hotels to collect per search text, 1 to 200. |
| **Hotels per run** | The most hotels the run delivers and charges for, 1 to 2,000. |
| **Minimum reviews** | Leave out hotels with fewer Google reviews than this (10 by default): they have no topics. |
| **Minimum stars** | Leave out hotels with fewer stars, and hotels with no star class. |
| **Leave out vacation rentals** | On by default: listings of rental marketplaces have a few reviews and no topics. |
| **Read each hotel's Google page** | On by default: every topic, the ratings on other sites and the quoted reviews, one request per hotel. Off: the first six topics from the search card, twenty hotels per request, nothing from other sites. |
| **Minimum mentions** | A topic needs this many mentions (10 by default) to count as praised or criticised and to enter the benchmark. |
| **Include quoted reviews** | On by default: up to twelve quoted reviews with author, rating, date and text. |
| **Language**, **Country of sale** | The language of Google's texts, which includes the names of the topics (keep one across runs you compare), and the country code Google answers for. |
| **Requests in parallel** | 1 to 10, five by default. |
| **Custom data** | JSON copied onto every row. |
| **Proxy** | Apify datacenter proxies by default; your own proxies if you choose Custom proxies. |

### How many hotels does a search return?

Google lists about twenty hotels per page and fills a page from the sixty or so it has for a text, in an order that changes from one request to the next. The Actor asks again a few times and keeps what is new. A big city gives fifty to sixty hotels per text at most; to go further use several texts (`hotels in Lisbon`, `boutique hotels in Lisbon`, `5 star hotels in Lisbon`). The Actor reads each hotel once however many searches name it.

### What does it cost?

Pay per event: one `hotel` event for every hotel delivered with something to report, $0.004 on the free plan, $0.0035 Bronze, $0.003 Silver, $0.0025 Gold and above. A hotel with no topics and no ratings elsewhere is delivered and not charged. The platform's own events are the start of the run ($0.00005) and the dataset item ($0.00001).

Measured on the platform on 11 October 2026: 60 hotels of Lisbon, Istanbul and Prague took 55 seconds and used $0.0023 of platform usage. All 60 had topics (11 to 29 each), 59 had a rating on another site, and the benchmark had 30 topics. Google answered 68 requests without a failed attempt.

### Limits

- The topics, the mentions and the scores are Google's own. The Actor does not read the reviews behind them and cannot say which review a mention is. The count of mentions of a topic is the count of reviews that mention it, not of reviews in all.
- Ratings on other sites are the ones Google shows for the hotel on the day; not every hotel has them (a small hotel often has none), and a site can appear twice when Google links two of its pages.
- Google writes the topic names in the language of the run. Compare hotels within one language.
- A search card carries the first six topics; with **Read each hotel's Google page** off, the benchmark is made of six topics a hotel at most.
- A quoted review is one Google chose to show, not a sample of all of them. Its `author` is the display name the site publishes.
- Google changes the layout of its pages from time to time. The Actor finds hotels by their shape and checks that every page answers for the stay it asked, so a change shows as a clear error rather than as wrong rows; if it ever does, open an issue with the run link.

### Is it legal to scrape Google Hotels?

This is an unofficial tool, not affiliated with, endorsed by or connected to Google LLC. It reads publicly visible pages and collects no private data; the author names in quoted reviews are the display names the sites show publicly, and you can switch the quoted reviews off. Google's terms restrict automated access, and you are responsible for making sure your use complies with those terms and with the law in your jurisdiction. See [Apify's stance on web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

What the Actor does about robots.txt: Google's robots.txt closes `/travel/search`, `/travel/entity` and `/travel/lodging/clk` to crawlers and leaves `/travel/hotels/` open. The Actor requests only `/travel/hotels/` pages (the search page and the hotel page), reads Google's robots.txt at the start of each run and refuses any address it closes. That does not change what the terms say; it means the Actor does not go where robots.txt asks crawlers not to.

### Found a problem?

Open an issue on the Issues tab with the run link and the hotel. Breakages in Google's pages are the expected failure mode of any scraper, and this one is built to say so rather than to deliver wrong data. Reports get read.

# Changelog

This Actor's version history is a separate document: https://apify.com/aleksandrbooking/hotel-review-insights/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

What you would type into Google Hotels: "hotels in Batumi", "boutique hotels in Lisbon", "hostels near Shinjuku". Google lists about twenty hotels per request in a changing order, so each text is asked a few times and the new hotels are kept; a big city gives fifty to sixty hotels per text at most.

## `hotels` (type: `array`):

Hotels to look up by name with the city ("Hilton Batumi") or by their Google Hotels link (the address that has /entity/ in it). A name that matches no hotel well enough is listed in FAILED_HOTELS and is not charged.

## `maxHotelsPerSearch` (type: `integer`):

How many hotels to collect for each search text. Twenty is one page from Google; a text with fewer hotels than this returns them all.

## `maxHotels` (type: `integer`):

The most hotels the run delivers (and charges for). The run stops reading when it has this many.

## `minReviews` (type: `integer`):

Leave out hotels with fewer Google reviews than this. A hotel with a handful of reviews has no topics to report. Applied before the hotel is read, so a hotel left out costs nothing.

## `minStars` (type: `integer`):

Leave out hotels with fewer stars, and hotels with no star class.

## `excludeVacationRentals` (type: `boolean`):

Leave out listings of rental marketplaces (apartments and houses listed by their platform). They have a few reviews and no topics.

## `readHotelPages` (type: `boolean`):

One request per hotel to its Google Hotels page: every topic (often 15 to 30), the ratings on other travel sites, the lines about what guests praised and the quoted reviews. Off: only what the search card shows, which is the first six topics and nothing from other sites, but twenty hotels per request.

## `minMentions` (type: `integer`):

A topic needs at least this many mentions to count as praised or criticised in a row, and to count in the market benchmark. Raise it to keep only what many guests agree on.

## `includeReviewSamples` (type: `boolean`):

Add up to twelve reviews Google quotes on the hotel's page (Google's first, then the other sites'), with author, rating, date and text. Off: topics and ratings only.

## `language` (type: `string`):

The language of the texts Google returns, which includes the names of the topics ("Service", "Servicio", "Service"). Keep one language across runs you compare. English is the default.

## `country` (type: `string`):

The two-letter country code Google answers for: us, gb, de, ge. It changes which other travel sites Google shows ratings of. It is not the country of the hotel.

## `concurrency` (type: `integer`):

How many requests run at the same time, across the whole run. The default is gentle on Google and quick enough.

## `customData` (type: `object`):

Any JSON. It is copied onto every row, so rows of different runs can be told apart after merging.

## `proxy` (type: `object`):

Apify datacenter proxies are the default and what this Actor is priced on. Residential groups are not available here; a run that asks for one is refused in the first seconds, before any hotel is charged. For your own proxies choose Custom proxies and supply them.

## `dryRun` (type: `boolean`):

Produce data without charging events. Honored only for runs started by the Actor owner; ignored for everyone else.

## Actor input object example

```json
{
  "searchQueries": [
    "hotels in Batumi"
  ],
  "hotels": [],
  "maxHotelsPerSearch": 30,
  "maxHotels": 100,
  "minReviews": 10,
  "excludeVacationRentals": true,
  "readHotelPages": true,
  "minMentions": 10,
  "includeReviewSamples": true,
  "language": "en",
  "country": "us",
  "concurrency": 5,
  "proxy": {
    "useApifyProxy": true
  },
  "dryRun": false
}
```

# Actor output Schema

## `hotels` (type: `string`):

No description

## `benchmark` (type: `string`):

No description

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

No description

## `failed` (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 = {
    "searchQueries": [
        "hotels in Batumi"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aleksandrbooking/hotel-review-insights").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 = { "searchQueries": ["hotels in Batumi"] }

# Run the Actor and wait for it to finish
run = client.actor("aleksandrbooking/hotel-review-insights").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 '{
  "searchQueries": [
    "hotels in Batumi"
  ]
}' |
apify call aleksandrbooking/hotel-review-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aleksandrbooking/hotel-review-insights"
        }
    }
}
```

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/I97D73kiEBH2XGZXT/builds/btu2EUJoNo9k3gcSW/openapi.json
