# Google Flights Scraper | Prices, Email & Business Leads (`trakk/google-flights-maps-ads-intelligence`) Actor

Scrape Google Flights prices, routes, schedules and airport data. Find business leads through Google Maps and explore Google Ads creatives. Optionally collect public business emails, phone numbers and reviews with a configurable review limit.

- **URL**: https://apify.com/trakk/google-flights-maps-ads-intelligence.md
- **Developed by:** [Kelopr\_bk](https://apify.com/trakk) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 google flights results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

# README

## ✈️ Google Flights Scraper — Maps & Ads Intelligence

Search flights, compare fares, discover local businesses, and inspect advertiser creatives from one Actor.

**Google Flights is the main workflow.** It returns structured flight options with prices, schedules, airlines, stops, aircraft, legroom, emissions, price-history signals, and airport intelligence. Google Maps and Google Ads are included as separate workflows for lead generation and competitor research.

No API key is required.

### 🚀 Start in three steps

1. Open the **Input** tab and choose one option under **What do you want to collect?**
2. Enter a flight route, a Maps search, or an advertiser target.
3. Keep the optional email, phone, and review switches off unless you need those fields, then click **Start**.

Each completed result appears in the dataset immediately. When the run finishes, open **Run summary** for the saved count, duration, warnings, enrichment totals, and charge-limit status.

### 🎯 Three focused workflows

| Workflow | Use it for | What you enter | Base event |
|---|---|---|---|
| ✈️ **Google Flights** | Fare research, route monitoring, schedules, airlines, airports | Origin, destination, and travel date | `flight-result` |
| 📍 **Google Maps** | Places, business discovery, local leads, ratings | Keyword + location or exact Maps URL | `maps-result` |
| 📣 **Google Ads** | Competitor creatives, advertisers, landing pages | Company, domain, advertiser ID, or Transparency Center URL | `ads-result` |

Only the selected workflow runs. A Flights run never starts Maps or Ads collection in the background.

### ➕ Add only the data you need

The optional enrichment switches are independent and off by default.

| Switch | Added data | Charged event |
|---|---|---|
| 📧 **Find public emails** | Public emails found on relevant official websites | `email-enrichment` |
| ☎️ **Find phone numbers** | Google business phones and public website phones | `phone-enrichment` |
| ⭐ **Fetch review texts** | Individual review text and rating details | `review-enrichment` |

An enrichment event is charged only when the requested data is actually delivered in that result. Turning on a switch does not guarantee that the source publishes the field, and the Actor never invents a missing email, phone, or review.

Aggregate rating and review count remain part of base data. The review switch controls individual review-level data.

#### ⭐ Choose how many reviews to collect

1. Turn on **Fetch review texts** in **Optional paid enrichments**.
2. Set **Maximum reviews per place / airport / advertiser** (`maxReviews`) immediately below it.
3. Start the run. Each result contains up to the selected number of public reviews; fewer may be available.

| Workflow | Limit applies to | Supported maximum |
|---|---|---|
| Google Maps | Each place | 100 reviews |
| Google Flights | Each origin/destination airport, not the flight or airline | 10 reviews per airport |
| Google Ads | Each confidently matched advertiser business on Google Maps | 5 reviews |

The default is **3**. Set **0**, or turn off **Fetch review texts**, to skip review collection and its enrichment charge. This does not change email, phone, or base-data settings. The review event is charged once per result containing delivered review text or ratings, **not once per individual review**; empty review results are not charged for this enrichment.

For example, collect one Maps place with up to two reviews, without email or phone enrichment:

```json
{
  "workflow": "maps",
  "mapSearches": [{"query": "coffee shops", "location": "Boston"}],
  "maxMapResults": 1,
  "includeEmails": false,
  "includePhones": false,
  "includeReviews": true,
  "maxReviews": 2
}
```

Existing API inputs using `airportReviews`, `mapReviews`, or `adReviews` still work. When both are provided, `maxReviews` takes priority. Leave it out of existing API requests to keep their original review limit.

### ✈️ Google Flights workflow

#### Quick example

```json
{
  "workflow": "flights",
  "flightSearches": [
    {
      "origin": "JFK",
      "destination": "LAX",
      "departureDate": "2030-09-15"
    }
  ],
  "cabin": "economy",
  "flightSort": "best",
  "maxStops": 2,
  "maxFlightResults": 50,
  "currency": "USD",
  "countryCode": "US",
  "language": "en-US",
  "includeEmails": false,
  "includePhones": false,
  "includeReviews": false
}
```

Add `returnDate` to request a round trip. Dates must use `YYYY-MM-DD` and cannot be in the past.

#### Main Flights settings

| Input | What it controls |
|---|---|
| `flightSearches` | One or more origin/destination/date searches |
| `cabin` | Economy, premium economy, business, or first class |
| `flightSort` | Best, cheapest, fastest, earliest departure, or earliest arrival |
| `maxStops` | Nonstop only, up to one stop, or up to two stops |
| `adults`, `children`, `infantsInSeat`, `infantsOnLap` | Passenger mix |
| `airlines` | Optional two-letter carrier-code filter |
| `maxFlightResults` | Maximum saved flight options across the run |
| `currency`, `countryCode`, `language` | Price currency and Google market/language |

#### Flight data

Each flight row can include:

- price, currency, route price range, and observed price-history points;
- origin, destination, local departure and arrival times;
- airline names and codes, flight numbers, segments, and layovers;
- total duration, stop count, aircraft, and legroom;
- CO₂ values, baggage signals, and quality indicators;
- carrier support and baggage-policy links;
- booking token and reproducible Google Flights URL;
- airport names, addresses, websites, categories, coordinates, ratings, and Maps URLs;
- optional airport emails, Google phones, website phones, social profiles, and review texts.

Google can return a round-trip page at the outbound-selection stage. Use `selectionStage` and `isCompleteItinerary` to distinguish an outbound choice from a complete itinerary.

#### Abbreviated flight result

```json
{
  "recordType": "flight",
  "tripType": "one-way",
  "selectionStage": "complete",
  "isCompleteItinerary": true,
  "price": 179,
  "currency": "USD",
  "origin": "JFK",
  "destination": "LAX",
  "departureLocal": "2030-09-15T08:05:00",
  "arrivalLocal": "2030-09-15T11:08:00",
  "airlineNames": ["Example Airline"],
  "flightNumbers": ["EA123"],
  "totalDurationMinutes": 363,
  "stopCount": 0,
  "aircraft": ["Airbus A320"],
  "co2Grams": 418000,
  "googleFlightsUrl": "https://www.google.com/travel/flights?..."
}
```

### 📍 Google Maps workflow

#### Quick example

```json
{
  "workflow": "maps",
  "mapSearches": [
    {
      "query": "coffee shops",
      "location": "New York"
    }
  ],
  "maxMapResults": 50,
  "mapImages": 5,
  "countryCode": "US",
  "language": "en-US",
  "includeEmails": true,
  "includePhones": true,
  "includeReviews": false
}
```

For exact businesses, paste Google Maps place links into `mapUrls`. You can combine searches and URLs in one run; `maxMapResults` remains one hard limit across all inputs.

#### Main Maps settings

| Input | What it controls |
|---|---|
| `mapSearches` | Keyword and optional city, region, or country |
| `mapUrls` | Exact Google Maps place URLs |
| `maxMapResults` | Maximum places saved across every Maps input |
| `mapImages` | Maximum public image references per place |
| `maxReviews` | Maximum individual reviews per place when reviews are enabled (0–100) |
| `mapContactPages` | Official website pages checked when contacts are enabled |
| `countryCode`, `language` | Requested Google market and result language |

#### Maps data

Maps results can include:

- place name, primary category, and category list;
- full address and address components;
- latitude, longitude, timezone, and stable Google identifiers;
- rating, review count, website, opening status, and opening-hours data;
- descriptions, images, amenities, highlights, local posts, and reservation links;
- requested and source language/market fields;
- optional public emails, Google phone, website phones, and individual reviews.

The output keeps `requestedLanguage` and `requestedCountryCode` separate from Google's source `language`. For example, a request using `he` can truthfully retain Google's legacy source code `iw` without making the selected language look incorrect.

### 📣 Google Ads workflow

#### Quick example

```json
{
  "workflow": "ads",
  "adTargets": ["example.com"],
  "adRegion": "anywhere",
  "adFormat": "all",
  "maxAdResults": 50,
  "includeEmails": true,
  "includePhones": true,
  "includeReviews": true,
  "maxReviews": 3
}
```

Domains are normally the easiest targets. Company names, advertiser identifiers, and Google Ads Transparency Center URLs are also accepted.

#### Main Ads settings

| Input | What it controls |
|---|---|
| `adTargets` | Companies, domains, advertiser IDs, or Transparency Center URLs |
| `adRegion` | Anywhere or one supported delivery region |
| `adFormat` | All, image, text, or video creatives |
| `adDateFrom`, `adDateTo` | Optional active/start-date range |
| `maxAdResults` | Maximum creatives saved per target |
| `maxAdvertisersPerTarget` | Maximum confident advertiser matches for company-name searches |
| `maxReviews` | Maximum reviews per matched advertiser business when enabled (0–5) |
| `adContactPages` | Official website pages checked when contacts are enabled |

#### Ads data

Ads rows can include:

- advertiser name and ID, creative ID, format, and current status;
- first and last shown dates;
- headline, description, call to action, and creative text;
- landing page, visible URL, preview image, preview scripts, and asset URLs;
- global and selected-region impression ranges;
- regional delivery and surface fields;
- Google Ads Transparency Center URL;
- optional confidently matched business address, rating, phones, public emails, and review texts.

Business/contact enrichment is attached only when the advertiser match is sufficiently strong. An ambiguous match is reported instead of assigning another company's contacts.

### 🌐 Languages, markets, and currencies

Flights uses language, market, and currency. Maps uses language and market. Ads uses its separate `adRegion` selector and preserves the language originally used in the creative.

**30 tested interface languages:**\
`en-US`, `en-GB`, `es`, `fr`, `de`, `it`, `pt-BR`, `pt-PT`, `nl`, `pl`, `cs`, `da`, `sv`, `no`, `fi`, `el`, `tr`, `ru`, `uk`, `ar`, `he`, `hi`, `id`, `ms`, `th`, `vi`, `ja`, `ko`, `zh-CN`, `zh-TW`.

**46 markets:**\
`US`, `GB`, `CA`, `AU`, `NZ`, `DE`, `FR`, `ES`, `IT`, `PT`, `NL`, `BE`, `CH`, `AT`, `IE`, `SE`, `NO`, `DK`, `FI`, `PL`, `CZ`, `GR`, `TR`, `RU`, `UA`, `AE`, `SA`, `IL`, `IN`, `SG`, `MY`, `TH`, `ID`, `PH`, `VN`, `JP`, `KR`, `HK`, `TW`, `BR`, `MX`, `AR`, `CL`, `CO`, `PE`, `ZA`.

**38 Google Flights currencies:**\
`USD`, `EUR`, `GBP`, `CAD`, `AUD`, `NZD`, `JPY`, `CNY`, `HKD`, `SGD`, `KRW`, `INR`, `AED`, `SAR`, `ILS`, `CHF`, `SEK`, `NOK`, `DKK`, `PLN`, `CZK`, `HUF`, `RON`, `BGN`, `TRY`, `ZAR`, `BRL`, `MXN`, `ARS`, `CLP`, `COP`, `PEN`, `THB`, `IDR`, `MYR`, `PHP`, `VND`, `TWD`.

Google localizes its own labels where available. Business names, ad copy, and user-written reviews can remain in their original language. Currency selection applies to flight prices only; the Actor never performs an invented client-side conversion.

### 📦 Output and export

Open the **Output** tab after or during a run. It contains five views:

- **All results** — every streamed dataset item;
- **Flight options** — price and itinerary columns first;
- **Maps places** — clean place and business columns;
- **Ads** — creative preview and advertiser columns;
- **Contacts & reviews** — optional enrichment fields in one place.

Use the dataset export menu to download JSON, CSV, Excel, XML, or RSS. For API access, use the dataset URL returned in `OUTPUT`.

The **Run summary** contains:

- final status: `SUCCEEDED`, `PARTIAL`, `NO_RESULTS`, or `invalid_input`;
- saved result count and duration;
- source warnings with context;
- requested enrichments, fields found, and charged event totals;
- charge-limit status, dataset ID, and dataset API URL;
- the measured 50-results/60-seconds flag for qualifying runs.

### 💳 Cost control

- Base events are charged per delivered flight, place, or ad row.
- Email, phone, and review events are separate and charged only when that data is delivered.
- One result with several emails creates one email event, not one event per address.
- Set a **Maximum charge per run** in Apify when you need a hard budget ceiling.
- When the limit is reached, already delivered rows remain saved and pending work stops cleanly.

### 🛡️ Input mistakes do not crash the Actor

Input is validated before collection starts. Missing searches, blank targets, unsupported values, malformed dates, impossible passenger combinations, invalid URLs, and contradictory ranges end normally with an actionable `invalid_input` message in **Run summary**.

Invalid input does not create a chargeable dataset row.

### ⚡ Tested performance

The Actor defaults to **1 GB**. A 50-result Apify benchmark with every email, phone, and review switch enabled produced:

| Workflow | Complete unique rows | Full platform runtime | Peak memory |
|---|---:|---:|---:|
| Google Flights | 50 | 13.789 s | 137.2 MB |
| Google Maps | 50 | 26.907 s | 116.5 MB |
| Google Ads | 50 | 46.434 s | 126.9 MB |

Locale validation also completed **60/60 successful short Apify runs**: all 30 listed languages were checked in both Flights and Maps. The latest release smoke test completed all three workflows successfully with optional enrichments enabled.

These measurements are observations rather than a fixed SLA. Live availability, source throttling, public website speed, and review availability can change runtime and field coverage.

### 🔧 Troubleshooting

**No flights were found**\
Check the three-letter airport/metro codes and use a future travel date. Some routes are seasonal or unavailable on the selected day.

**No Maps places were found**\
Make the query more specific, add a city or country, or paste an exact Google Maps place URL.

**No ads were found**\
Try the advertiser's domain instead of a company name, select `anywhere`, remove narrow date/format filters, or retry later.

**An email, phone, or review is missing**\
Confirm its switch was enabled. The field remains absent when the official source or public website does not publish it.

**The run succeeded but returned no rows**\
Open **Run summary**. It distinguishes invalid input, a clean zero-result search, source warnings, and a charge limit without forcing the run into `FAILED`.

### Responsible use

Use this Actor only for lawful collection of public data. Follow applicable terms, privacy requirements, and marketing regulations. Review extracted contact data before outreach.

# Actor input Schema

## `workflow` (type: `string`):

Each run uses one focused workflow, so the form, output, speed, and pricing stay predictable.

## `includeEmails` (type: `boolean`):

Visits relevant public websites and adds emails when found. This is a separately priced enrichment and is charged only for results containing email data.

## `includePhones` (type: `boolean`):

Adds public business and website phone numbers when found. This is charged separately only for results containing phone data.

## `includeReviews` (type: `boolean`):

Adds individual public reviews when available. Choose the maximum below. Aggregate rating and review count remain part of base data.

## `maxReviews` (type: `integer`):

Used only when Fetch review texts is on. Maps: 0–100 per place; Flights: 0–10 per airport (not airline reviews); Ads: 0–5 per matched advertiser business. Default: 3. Zero disables reviews. This is a maximum, not a guaranteed count. Emails and phones are unaffected.

## `flightSearches` (type: `array`):

One-way or round-trip searches. Use three-letter airport or metro codes and YYYY-MM-DD dates.

## `cabin` (type: `string`):

Cabin class requested from Google Flights.

## `flightSort` (type: `string`):

Order saved flight cards by Google's best order, price, duration, departure, or arrival.

## `maxFlightResults` (type: `integer`):

Maximum saved options across the requested flight searches.

## `maxStops` (type: `integer`):

Allow nonstop only, at most one stop, or at most two stops.

## `adults` (type: `integer`):

Adult passengers; at least one is required.

## `children` (type: `integer`):

Child passengers with their own seat.

## `infantsInSeat` (type: `integer`):

Infants traveling in their own seat.

## `infantsOnLap` (type: `integer`):

Lap infants; cannot exceed the number of adults.

## `airlines` (type: `array`):

Optional two-letter carrier codes, one per line.

## `airportContactPages` (type: `integer`):

Used only when Emails or Phones is enabled.

## `mapSearches` (type: `array`):

Search query plus an optional city, region, or country.

## `mapUrls` (type: `array`):

Optional exact Google Maps URLs, one per line.

## `maxMapResults` (type: `integer`):

Maximum places saved across all Maps searches and URLs in this run.

## `mapContactPages` (type: `integer`):

Used only when Emails or Phones is enabled.

## `mapImages` (type: `integer`):

Maximum public image references stored for each place.

## `adTargets` (type: `array`):

One target per line. Domains are the fastest and most reliable input.

## `adRegion` (type: `string`):

Limit ads to a supported delivery region, or use Anywhere for broad discovery.

## `maxAdResults` (type: `integer`):

Maximum creative rows saved for each advertiser target.

## `adFormat` (type: `string`):

Keep every creative format or select image, text, or video.

## `adDateFrom` (type: `string`):

Optional YYYY-MM-DD.

## `adDateTo` (type: `string`):

Optional YYYY-MM-DD.

## `adContactPages` (type: `integer`):

Used only when Emails or Phones is enabled.

## `maxAdvertisersPerTarget` (type: `integer`):

Maximum advertiser identities followed when a company name matches several records.

## `currency` (type: `string`):

Currency requested from Google Flights. Maps and Ads do not convert monetary values.

## `countryCode` (type: `string`):

Google market used for localized Flights and Maps results.

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

Language requested from Google Flights and Maps. Source names and user-written reviews can still remain in their original language.

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

The default is tuned for the 1 GB performance target.

## `maxRetries` (type: `integer`):

Retries for temporary source, network, or throttling failures.

## `requestTimeoutSecs` (type: `integer`):

Maximum time allowed for one source request before retrying.

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

Residential country routing is used by default on Apify. Change this only when you understand the trade-off.

## Actor input object example

```json
{
  "workflow": "flights",
  "includeEmails": false,
  "includePhones": false,
  "includeReviews": false,
  "maxReviews": 3,
  "flightSearches": [
    {
      "origin": "JFK",
      "destination": "LAX",
      "departureDate": "2030-09-15"
    }
  ],
  "cabin": "economy",
  "flightSort": "best",
  "maxFlightResults": 50,
  "maxStops": 2,
  "adults": 1,
  "children": 0,
  "infantsInSeat": 0,
  "infantsOnLap": 0,
  "airlines": [],
  "airportContactPages": 1,
  "mapSearches": [
    {
      "query": "restaurants",
      "location": "New York"
    }
  ],
  "mapUrls": [],
  "maxMapResults": 50,
  "mapContactPages": 1,
  "mapImages": 5,
  "adTargets": [
    "nike.com"
  ],
  "adRegion": "anywhere",
  "maxAdResults": 50,
  "adFormat": "all",
  "adContactPages": 1,
  "maxAdvertisersPerTarget": 3,
  "currency": "USD",
  "countryCode": "US",
  "language": "en-US",
  "maxConcurrency": 16,
  "maxRetries": 3,
  "requestTimeoutSecs": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `flights` (type: `string`):

No description

## `maps` (type: `string`):

No description

## `ads` (type: `string`):

No description

## `contactsAndReviews` (type: `string`):

No description

## `runSummary` (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 = {
    "workflow": "flights",
    "maxReviews": 3,
    "flightSearches": [
        {
            "origin": "JFK",
            "destination": "LAX",
            "departureDate": "2030-09-15"
        }
    ],
    "mapSearches": [
        {
            "query": "restaurants",
            "location": "New York"
        }
    ],
    "adTargets": [
        "nike.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("trakk/google-flights-maps-ads-intelligence").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 = {
    "workflow": "flights",
    "maxReviews": 3,
    "flightSearches": [{
            "origin": "JFK",
            "destination": "LAX",
            "departureDate": "2030-09-15",
        }],
    "mapSearches": [{
            "query": "restaurants",
            "location": "New York",
        }],
    "adTargets": ["nike.com"],
}

# Run the Actor and wait for it to finish
run = client.actor("trakk/google-flights-maps-ads-intelligence").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 '{
  "workflow": "flights",
  "maxReviews": 3,
  "flightSearches": [
    {
      "origin": "JFK",
      "destination": "LAX",
      "departureDate": "2030-09-15"
    }
  ],
  "mapSearches": [
    {
      "query": "restaurants",
      "location": "New York"
    }
  ],
  "adTargets": [
    "nike.com"
  ]
}' |
apify call trakk/google-flights-maps-ads-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trakk/google-flights-maps-ads-intelligence"
        }
    }
}

```

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/3tTLKl76B43fIcYSh/builds/xKfpqNwHi1UHr7raC/openapi.json
