# Facebook Video Transcript Extractor By Keyword Search (`simpleapi/facebook-video-transcript-extractor`) Actor

Extract transcripts from Facebook videos found through keyword searches. Collect video titles, descriptions, transcripts, URLs, authors, dates, views, likes, comments, and shares for content research, competitor analysis, sentiment analysis, and social media intelligence.

- **URL**: https://apify.com/simpleapi/facebook-video-transcript-extractor.md
- **Developed by:** [SimpleAPI](https://apify.com/simpleapi) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 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

### Facebook Video Transcript Scraper — Keyword Search, Page Videos

Get clean, readable transcripts from public Facebook videos without ever collecting the links by hand. This Facebook video transcript scraper returns `transcript`, `videoId`, `url`, `discoverySource`, `matchedKeyword`, `sourcePageUrl`, `resultRank`, and `scrapedAt` for every video it processes — whichever way you point it at Facebook. Paste direct video links, give it a `searchKeyword` and let it search Facebook itself, or hand it a `pageUrl` and pull that Page's own recent videos. Content teams, researchers, and monitoring agencies use it to turn spoken video content into searchable text at scale.

### What is Facebook Video Transcript Scraper?

Facebook Video Transcript Scraper is an Apify Actor that extracts the spoken transcript from public Facebook videos and returns it as structured JSON. It does not require a Facebook account, login, or API key — it works entirely against public pages and public GraphQL endpoints, the same way a signed-out visitor's browser would. Every mode — direct URL, keyword search, or Page discovery — feeds the same transcript engine, so the output row shape stays identical no matter how the video was found.

Key features:

- 🔗 **Three discovery modes** — paste video URLs directly, discover matches by `searchKeyword`, or pull a Page's own recent uploads by `pageUrl`
- 📝 **Full spoken transcript text** — the video's own transcript, extracted and whitespace-normalized, not a caption snippet
- 🆔 **Stable identifying fields** — `videoId` and `url` on every row, so results are easy to de-duplicate and re-check
- 🧭 **Discovery metadata** — `discoverySource`, `matchedKeyword`, `sourcePageUrl`, and `resultRank` show exactly how and where each video was found
- 🎚️ **Per-run volume controls** — `maxVideosPerQuery` and `maxVideosPerSource` cap how many videos each discovery mode resolves (1–50)
- ⬇️ **Standard dataset export** — JSON, CSV, Excel, and the other formats the Apify dataset export supports

### What data can I extract with Facebook Video Transcript Scraper?

Every processed video comes back as one row with the same 10 fields, regardless of which mode found it.

| Field | Example Value | Use Case |
| --- | --- | --- |
| `url` | `"https://www.facebook.com/100044280796927/videos/4141502542759187"` | The video URL that was processed — input URL, or the one resolved by keyword/Page discovery |
| `videoId` | `"4141502542759187"` | The numeric Facebook video id, for de-duplication and re-checking |
| `transcript` | `"You're watching the legal breakdown. Glenn we've got breaking news..."` | The extracted spoken transcript, or `null` if none is available |
| `error` | `null` | Short reason the transcript could not be extracted, or `null` on success |
| `timestamp` | `1761496105.9149563` | Unix epoch timestamp of when the row was produced |
| `scrapedAt` | `"2026-08-11T09:15:12.123456+00:00"` | Same moment as `timestamp`, as an ISO 8601 date string |
| `discoverySource` | `"keyword"` | How the video was found: `direct_url`, `keyword`, or `page` |
| `matchedKeyword` | `"cooking recipe"` | The search keyword that found this video (`keyword` mode only, otherwise `null`) |
| `sourcePageUrl` | `"https://www.facebook.com/nba"` | The Page URL this video was discovered from (`page` mode only, otherwise `null`) |
| `resultRank` | `3` | This video's 1-based position within its discovery batch (`keyword`/`page` modes only, otherwise `null`) |

#### 📝 Transcript and status

`transcript` is the field most integrations care about — the video's full spoken text, whitespace-normalized into a single readable string. When Facebook has no transcript for a video, or the fetch fails after retries, `transcript` comes back `null` and `error` carries a short, specific reason ("No transcript is available for this video", "Could not fetch this video after several attempts", "Could not process this video"). Nothing is ever fabricated to fill the field.

#### 🧭 Discovery and targeting data

`discoverySource`, `matchedKeyword`, `sourcePageUrl`, and `resultRank` record how each row was produced. In `direct` mode these are all `null`/`"direct_url"` since you supplied the URL yourself. In `keyword` mode, `matchedKeyword` and `resultRank` let you group and rank results per search term. In `page` mode, `sourcePageUrl` and `resultRank` let you track which Page each video came from and its position in that Page's recent-videos list. `timestamp`/`scrapedAt` let you segment or de-duplicate results by run.

### How does Facebook Video Transcript Scraper differ from the official Facebook API?

Meta's Graph API is the platform's own public API, but its `/video` node — checked on developers.facebook.com on 2026-08-15 — has no documented field that returns transcript or caption text, only a `/captions` edge described as "Captions for this video" with no documented content structure. The API also has no documented endpoint for searching public videos by keyword across arbitrary users or Pages; its video endpoints are built around retrieving a specific `/{video-id}` or publishing to accounts you already control.

| Feature | Meta Graph API | Facebook Video Transcript Scraper |
| --- | --- | --- |
| Keyword search across public videos | Not a documented endpoint | ✅ `mode: "keyword"`, up to `maxVideosPerQuery` (max 50) matches |
| A Page's own recent videos | Requires Page Public Content Access approval | ✅ `mode: "page"`, up to `maxVideosPerSource` (max 50) videos |
| Transcript / caption text field | No documented text field on `/video` | ✅ Full text in `transcript` |
| Access requirements | Access token, app registration, App Review for content you don't own | ✅ No Facebook login, token, or developer account |
| Output shape | Depends on the fields and permissions granted | ✅ Same 10-field row across all three modes |

#### Why doesn't the Graph API just return public video transcripts?

The Graph API's `/video` node is designed around content an app has been granted access to — your own Page's uploads, or content another app owner explicitly shared — not open discovery across the platform. Reaching even a single video you don't own typically requires an access token and, per Meta's own developer documentation, App Review for anything beyond `public_profile`/`email`-level access. There is no keyword-search endpoint for public videos at all. Facebook Video Transcript Scraper works around that by reading the same public pages and public GraphQL calls a signed-out browser makes, so a keyword or a Page URL is enough.

Use the Graph API when you own the Page and just need metadata for content already in your account. Use this Actor when you need to go from a keyword or a public Page URL straight to transcript text, without registering an app or waiting on a review.

### How to use data extracted from Facebook video transcripts?

#### 🎬 Content and marketing teams

Run in `keyword` mode with a topic (`searchKeyword`) to pull every matching public video's `transcript` in one go — no watching videos or copying links by hand. The transcript text drops straight into blog drafts, video captions, or show notes, and `url`/`videoId` let you credit or re-check the source video.

#### 🏢 Agencies monitoring client or competitor Pages

Point `pageUrl` at a client's or competitor's public Facebook Page and run on a schedule. Each run returns that Page's current recent videos with `resultRank` showing their order and `transcript` giving the actual spoken content — useful for benchmarking messaging consistency across a Page's uploads without watching each one.

#### 📊 Market research and content audits

Sweep a topic with `searchKeyword` and mine the returned `transcript` fields for messaging, claims, or terminology used across many videos at once — far faster than transcribing by hand. `matchedKeyword` and `resultRank` keep results grouped by the term that found them for downstream analysis.

#### 🤖 AI agents and automated pipelines

Feed `transcript` text into a RAG index or summarization pipeline keyed on `videoId`, or chain the Actor into a scheduled enrichment job that turns a list of Page URLs or keywords into transcript text automatically, on the standard Apify run/schedule surface.

### 🔼 Input sample

Pick an **Input Mode** (`mode`) and fill in the matching field. Nothing is schema-required, but each mode needs its own field filled or the run fails with a clear error message.

| Parameter | Required | Type | Description | Example Value |
| --- | --- | --- | --- | --- |
| `mode` | No | string | Choose how to find videos to transcribe. `direct` processes the links you paste. `keyword` finds videos matching a search term. `page` pulls a Page's own recent videos. Enum: `direct`, `keyword`, `page`. Default: `"direct"`. | `"keyword"` |
| `videoUrls` | No | array | Used when `mode` = `direct`. Paste one or more Facebook video URLs (e.g. `facebook.com/.../videos/...`, `/reel/...`, or `/watch/?v=...`). Each link is processed and its full spoken transcript is extracted. | `["https://www.facebook.com/100044280796927/videos/2301741263587145"]` |
| `urls` | No | array | Legacy alias for `videoUrls` — kept for compatibility with input JSON built for the original actor. Used only when `videoUrls` above is empty. Prefer `videoUrls`. | `["https://www.facebook.com/.../videos/..."]` |
| `searchKeyword` | No | string | Used when `mode` = `keyword`. A search term, e.g. `"cats"` or `"cooking recipe"`. Matching videos are discovered and each is transcribed, up to `maxVideosPerQuery` below. | `"cooking recipe"` |
| `pageUrl` | No | string | Used when `mode` = `page`. A public Facebook Page URL, e.g. `https://www.facebook.com/nba`. Its own recent videos are discovered and transcribed, up to `maxVideosPerSource` below. | `"https://www.facebook.com/nba"` |
| `maxVideosPerQuery` | No | integer | Upper limit on how many matching videos to resolve and transcribe per search keyword (`keyword` mode). Default `5`, minimum `1`, maximum `50`. | `5` |
| `maxVideosPerSource` | No | integer | Upper limit on how many of a Page's own recent videos to resolve and transcribe (`page` mode). Default `5`, minimum `1`, maximum `50`. | `5` |
| `proxyConfiguration` | No | object | Optional — configure proxy settings for this run. Use proxies to improve reliability, avoid rate limits, or access region-specific content. Leave empty to run without a proxy. | `{ "useApifyProxy": true }` |

```json
{
  "mode": "keyword",
  "searchKeyword": "cooking recipe",
  "maxVideosPerQuery": 5,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

**Common pitfall:** `mode` controls which field is actually read. Filling in `videoUrls` while `mode` is `"keyword"` does nothing — the Actor only reads `searchKeyword` in that mode. Set `mode` to match whichever field you filled in, and leave the others empty.

### 🔽 Output sample

Every run produces typed, normalized JSON rows with the same 10-field shape whether the video came from a URL, a keyword search, or a Page. Export as JSON, CSV, Excel, or any other format the Apify dataset export supports.

```json
{
  "url": "https://www.facebook.com/100044280796927/videos/4141502542759187",
  "videoId": "4141502542759187",
  "transcript": "You're watching the legal breakdown. Glenn we've got breaking news he...",
  "error": null,
  "timestamp": 1761496105.9149563,
  "scrapedAt": "2026-08-11T09:15:12.123456+00:00",
  "discoverySource": "direct_url",
  "matchedKeyword": null,
  "sourcePageUrl": null,
  "resultRank": null
}
```

⚠️ Only rows with a successful `transcript` are charged under the `row_result` event — rows where transcription failed (`transcript: null`, `error` populated) are still written to the dataset but pushed uncharged. To see billed results only, filter the dataset for `transcript != null` (equivalently, `error == null`).

### How do you filter and target specific videos?

`mode` is the main targeting axis: `direct` is exact addressing when you already have the video links; `keyword` is free-text discovery when you don't, trading precision for reach across all matching public videos; `page` scopes discovery to one Page's own recent uploads instead of the open platform. Volume is controlled per discovery mode: `maxVideosPerQuery` (keyword mode) and `maxVideosPerSource` (page mode) each accept 1–50. There is no separate quality or rating filter — the practical quality gate is downstream, filtering the output on `transcript != null` to keep only videos that actually had a transcript.

⚠️ In `keyword` mode, video discovery paginates through Facebook's own search results internally, capped at 10 pages of results regardless of `maxVideosPerQuery` — a keyword with few matching videos within that window may return fewer than the requested maximum even at low `maxVideosPerQuery` values.

```json
{ "mode": "direct", "videoUrls": ["https://www.facebook.com/100044280796927/videos/4141502542759187"] }
```

```json
{ "mode": "keyword", "searchKeyword": "cats", "maxVideosPerQuery": 20 }
```

```json
{ "mode": "page", "pageUrl": "https://www.facebook.com/nba", "maxVideosPerSource": 30 }
```

### ▶️ Want to try other Facebook scrapers?

| Scraper Name | What it extracts |
| --- | --- |
| Facebook Reviews Scraper (Headlines, Tags & Reviewer Detail) | Facebook Page reviews with headlines, tags, and reviewer details |
| Facebook Event Search Scraper (With Attendance Metrics) | Facebook events matched by search, with attendance metrics |
| Instagram Post Details Scraper (With Engagement Data) | Instagram post details and engagement metrics |
| TikTok Scraper (With Repost Insights Data) | TikTok videos with repost insight data |
| YouTube Video Subtitles Scraper (With Engagement Filters) | YouTube video subtitles/transcripts, filtered by engagement |
| YouTube Video Summarizer (With Multi-Language Transcripts) | YouTube video transcripts and summaries in multiple languages |

### How to extract Facebook data programmatically

Facebook Video Transcript Scraper runs as a standard Apify Actor: one API call starts the run, and the finished dataset comes back as structured JSON over the Apify API — no separate transcript service to integrate.

#### 🐍 Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_API_TOKEN>")

run = client.actor("your-username/facebook-video-transcript-extractor-by-keyword-search").call(
    run_input={
        "mode": "keyword",
        "searchKeyword": "cooking recipe",
        "maxVideosPerQuery": 5,
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["videoId"], item["matchedKeyword"], item["transcript"])
```

#### 🔌 MCP for AI agents

This Actor is reachable through Apify's hosted Actors MCP Server at `https://mcp.apify.com` (checked 2026-08-15), which exposes any Apify Actor — including this one — as a callable tool over OAuth or a bearer `APIFY_API_TOKEN`, for MCP clients such as Claude.ai, Claude Code, and VS Code. An agent can call it with a `searchKeyword` or `pageUrl` to pull fresh video transcripts as grounding context mid-conversation, without a separate integration.

#### 📊 Export to spreadsheets or CRM

Export the dataset as CSV or Excel directly from the Apify Console or API, mapping `videoId` → an id column, `url` → a link column, `transcript` → a text/notes column, and `discoverySource`/`matchedKeyword`/`sourcePageUrl` → source-tracking columns for import into a spreadsheet or CRM.

### Is it legal to scrape Facebook videos?

Scraping public Facebook videos and Pages is generally legal — this Actor only reads content Facebook already serves to a signed-out visitor, the same way a browser would. That said, video transcripts can contain personal data: names, opinions, or other identifiable information spoken by the people in the video. If you store or reuse transcripts that include such personal data, GDPR and CCPA obligations around lawful basis, retention, and deletion apply to that data, just as they would to any other personal information you collect. Consult legal counsel for commercial applications involving bulk storage of personal data.

### ❓ FAQ

#### What happens if a video has no transcript, or the fetch fails?

`transcript` comes back `null` and `error` explains why — "No transcript is available for this video" if Facebook has none, or a fetch/processing error if the video couldn't be reached after retries. Nothing is invented to fill the field.

#### Can I get the video id and discovery details along with the transcript?

Yes — every row includes `videoId` and `url` alongside `transcript`, plus `discoverySource`, `matchedKeyword`, `sourcePageUrl`, and `resultRank` showing exactly how that video was found.

#### How accurate is the transcript text?

The Actor returns whatever transcript Facebook's own systems generated for that video, extracted as-is. Accuracy depends on Facebook's own transcription quality for that video, not on this Actor. For critical use, validate exact wording against the source video.

#### How many videos can I get per run?

In `keyword` and `page` modes, `maxVideosPerQuery`/`maxVideosPerSource` cap results at 1–50 per keyword or Page (default 5). `direct` mode has no schema cap — it processes every URL you list in `videoUrls`/`urls`.

#### Can I discover videos from a Facebook Page instead of searching by keyword?

Yes — set `mode` to `"page"` and give it the Page's URL in `pageUrl`. It resolves up to `maxVideosPerSource` of that Page's own recent videos and transcribes each one.

#### Does this work with Facebook Reels?

Yes. `direct` mode accepts `/videos/...`, `/reel/...`, and `/watch/?v=...` link formats.

#### Can I still use the legacy `urls` input field?

Yes — `urls` is accepted as a legacy alias for `videoUrls` in `direct` mode, used only when `videoUrls` is empty, so existing input JSON built for the original actor keeps working.

#### Does Facebook Video Transcript Scraper work with Claude, ChatGPT, and AI agent frameworks?

Yes — it's reachable through Apify's Actors MCP Server (`https://mcp.apify.com`) for MCP-compatible clients, and callable as a standard HTTP/API endpoint via `apify_client` from any agent framework that can make an API call.

#### Can I use this without a Facebook login, API key, or developer account?

Yes. The Actor needs no Facebook account, login, access token, or developer app — only an Apify account to run it. Only public videos and Pages can be processed.

### Conclusion

Facebook Video Transcript Scraper turns public Facebook videos into clean, structured transcript data — by direct link, by keyword search, or by Page — without a Facebook login, API key, or manual link collection. It's built for content teams repurposing video into text, agencies monitoring client or competitor Pages, researchers mining spoken content at scale, and AI pipelines that need transcript text as context. Start a run from the Apify Console or call it over the API with `apify_client` to get typed JSON transcripts back in minutes.

# Actor input Schema

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

Choose how to find videos to transcribe. 'Direct Video URLs' processes the links you paste. 'Search by Keyword' finds videos matching a search term. 'Discover from a Page' pulls a Page's own recent videos.

## `videoUrls` (type: `array`):

📋 Used when Input Mode = 'Direct Video URLs'. Paste one or more Facebook video URLs (e.g. facebook.com/.../videos/..., /reel/..., or /watch/?v=...). Each link is processed and its full spoken transcript is extracted.

## `urls` (type: `array`):

⚙️ Legacy alias for 'Video URLs' — kept for compatibility with input JSON built for the original actor. Used only when 'Video URLs' above is empty. Prefer 'Video URLs'.

## `searchKeyword` (type: `string`):

💬 Used when Input Mode = 'Search by Keyword'. A search term, e.g. "cats" or "cooking recipe". Matching videos are discovered and each is transcribed, up to 'Max Videos per Keyword' below.

## `pageUrl` (type: `string`):

🏢 Used when Input Mode = 'Discover from a Page'. A public Facebook Page URL, e.g. https://www.facebook.com/nba. Its own recent videos are discovered and transcribed, up to 'Max Videos per Page' below.

## `maxVideosPerQuery` (type: `integer`):

🎯 Upper limit on how many matching videos to resolve and transcribe per search keyword (Search by Keyword mode). Example: maxVideosPerQuery=5 → up to 5 transcripts per keyword. Default is 5.

## `maxVideosPerSource` (type: `integer`):

🎯 Upper limit on how many of a Page's own recent videos to resolve and transcribe (Discover from a Page mode). Example: maxVideosPerSource=5 → up to 5 transcripts from that Page. Default is 5.

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

⚙️ Optional — Configure proxy settings for this run. Use proxies to improve reliability, avoid rate limits, or access region-specific content. Leave empty to run without a proxy.

## Actor input object example

```json
{
  "mode": "direct",
  "videoUrls": [
    "https://www.facebook.com/100044280796927/videos/2301741263587145",
    "https://www.facebook.com/100044280796927/videos/4141502542759187"
  ],
  "maxVideosPerQuery": 5,
  "maxVideosPerSource": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the Actor's default dataset.

# 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 = {
    "videoUrls": [
        "https://www.facebook.com/100044280796927/videos/2301741263587145",
        "https://www.facebook.com/100044280796927/videos/4141502542759187"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("simpleapi/facebook-video-transcript-extractor").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 = {
    "videoUrls": [
        "https://www.facebook.com/100044280796927/videos/2301741263587145",
        "https://www.facebook.com/100044280796927/videos/4141502542759187",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("simpleapi/facebook-video-transcript-extractor").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 '{
  "videoUrls": [
    "https://www.facebook.com/100044280796927/videos/2301741263587145",
    "https://www.facebook.com/100044280796927/videos/4141502542759187"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call simpleapi/facebook-video-transcript-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,simpleapi/facebook-video-transcript-extractor"
        }
    }
}

```

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/z8iGMwFfZOnosTEWG/builds/bQdVxEKxrbbV4IaxZ/openapi.json
