# Facebook Comments Scraper (`socialdataapi/facebook-comments-scraper`) Actor

Facebook Comments Scraper — Extract Facebook comments including comment text, usernames, profile URLs, timestamps, likes, replies, and post details. Useful for audience research, sentiment analysis, lead generation, competitor analysis, and social media monitoring.

- **URL**: https://apify.com/socialdataapi/facebook-comments-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### Facebook Comments Scraper — Text, Replies, Likes and Author Details

Facebook Comments Scraper reads the public comment thread on a Facebook post, photo, or reel permalink and returns every top-level comment as one structured JSON row, with nested replies attached underneath it. Each row carries the comment text, author name, a timestamp, a like count, and a reply count. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a social-listening pipeline. **No Facebook account or cookies are needed.** Start with one post, then scale to a page's recent history.

![Facebook Comments Scraper: comment text, authors, dates and likes as JSON](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/d-facebook-comments-hero.webp)

***

### What data can I extract with Facebook Comments Scraper?

Using this Facebook Comments API, you will be able to extract the following Facebook comment data:

| 💬 Comment text | 👤 Author name | 🔗 Author profile link (if available) | 🖼️ Author profile picture |
|---|---|---|---|
| ❤️ Like count | 🔁 Reply count | 🧵 Nested replies (with their own sub-replies) | 📅 Comment timestamp |
| 🆔 Comment permalink | 📢 Ad Library flag (if available) | 📍 Source post URL | |

***

### How to use Facebook Comments Scraper

Anyone who needs the comment thread under a public Facebook post, photo, or reel — without logging in — gets a flat JSON row per top-level comment from one run.

**Copy to your AI assistant:**

```text
Facebook Comments Scraper (Apify Actor ID: socialdataapi/facebook-comments-scraper, https://apify.com/socialdataapi/facebook-comments-scraper) is an Apify Actor that returns Facebook comments as structured JSON: comment text, author name, author profile link, a timestamp, a like count, a reply count, and nested replies. Use it whenever someone needs a facebook comment extractor without cookies, a login, or a browser - to monitor a brand's own posts, to compare engagement on a competitor's posts, or to pull a research corpus from a public discussion thread. Run it with curl or the Apify Python client: send your Apify token and an input such as {"startUrls": ["https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"], "commentSettings": {"maxComments": 20, "maxRepliesPerComment": 2, "commentsSortOrder": "all"}} to this Actor's run-sync-get-dataset-items endpoint, shown on its Apify Store page. Inputs: startUrls (array of post/photo/reel URLs, required), commentSettings.maxComments (integer, default 100), commentSettings.maxRepliesPerComment (integer, default 2, 0 means every reply and sub-reply), commentSettings.commentsSortOrder ("most_relevant" | "newest" | "all", default "all"), onlyCommentsNewerThan (absolute date or a relative window like "2 weeks"), proxyConfiguration (informational only). A URL that fails to load returns one unbilled accounting row with an error field instead of comments, and the run continues to the next URL. The full input schema, every enum and default, and the complete output field list are on this Actor's Apify Store page.
```

#### Facebook Comments Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server with this Actor preloaded as a tool and it can call it on its own — no glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/facebook-comments-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Facebook Comments Scraper in the Apify Store](https://apify.com/socialdataapi/facebook-comments-scraper).
3. Enter one or more Facebook post, photo, or reel permalink URLs.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Facebook Comments Scraper to bulk

The post URL list takes as many links as you need, so a bulk run is just a longer list — paste every post URL you need in one run instead of looping single-URL calls. For a research corpus or a multi-page monitoring job, split a very large URL list across a few runs rather than one oversized run, and raise the comment and reply limits only as far as the depth you actually need, since both caps apply per URL.

***

### ✨ Features

Facebook Comments Scraper fetches clean, structured comments from Facebook, working as a facebook post comments scraper built to scrape Facebook comments at any scale, from one post to a page's recent history. It's ideal for brand monitoring, competitive intelligence, public-discourse research, and AI/RAG pipelines that need real comment text.

It extracts, per comment:

- **Comment text** – the full body of the comment, exactly as written.
- **Author details** – display name, a numeric or opaque profile ID, and a profile link when Facebook exposes one.
- **Like count and reply count** – engagement numbers for every comment.
- **Nested replies** – replies, and their own sub-replies, attached inside the comment row instead of as separate rows, so it doubles as a facebook replies scraper for threaded discussions.
- **Timestamp** – when the comment was posted, in ISO 8601 UTC.
- **Ad Library flag** – marks a comment author that is a Page running ads, when Facebook attaches that data.

⚡ Rows reach your dataset while the run is still working, not only at the end — the first comments land in the Output tab within seconds, not after the whole post has been read.

***

### Use cases 💡

- **Brand monitoring team** — track comment text and reply volume on a brand's own posts.
- **Competitive analyst** — compare like counts and reply counts across a competitor's recent posts.
- **Researcher** — pull public discourse from a news post's comment thread for a study.
- **AI/RAG engineer** — index facebook comment sentiment data into a vector store for retrieval.
- **Growth marketer** — surface the highest-liked comments to see which messaging resonates.

Building an AI agent? [Connect Facebook Comments Scraper over MCP](#facebook-comments-scraper-mcp-server-use-these-actors-from-chatgpt-claude-or-cursor) and let it call the actor on its own.

***

### Why choose this actor?

1. **Nested replies, fetched automatically.** A recorded run returned 20 top-level comments — 5 of them with real nested replies already attached — from one post in about 6 seconds, with no second request needed for the reply text.
2. **Real engagement numbers, not placeholders.** A recorded comment came back with a like count of 3 and a reply count of 1, and its one reply carried its own author name, text, and timestamp.
3. **4 independent controls, one Actor.** Comment limit, reply depth, sort order, and a date filter — tune all four without touching a line of code.

***

### ⬇️ Input

![Facebook Comments Scraper input: start URLs, max comments and replies per comment](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/d-facebook-comments-input.webp)

It accepts a list of Facebook post, photo, or reel permalink URLs; the post URL list is the only required field.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `startUrls` | Yes | array of strings | One Facebook post, photo, or reel permalink per line. | `["https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"]` |
| `commentSettings.maxComments` | No | integer | Hard cap on top-level comments fetched per URL. Default `100`, minimum `1`. | `20` |
| `commentSettings.maxRepliesPerComment` | No | integer | Replies (and their own sub-replies) fetched per comment. Default `2`, minimum `0`; `0` fetches every reply and sub-reply available. | `2` |
| `commentSettings.commentsSortOrder` | No | string (`most_relevant` | `newest` | `all`) | Order of the comment rows in the output. Default `all`. | `"all"` |
| `onlyCommentsNewerThan` | No | string | Absolute date (`2024-01-15`) or a relative window (`2 weeks`). Keeps only comments and replies posted after this point; filtering happens after comments are fetched. Leave blank to disable. | `"2 weeks"` |
| `proxyConfiguration` | No | object | Informational only — the Actor always uses Apify's residential proxy regardless of this setting. | `{"useApifyProxy": false}` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 comments per run (all posts together) and 200 comments per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "startUrls": [
    "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"
  ],
  "commentSettings": {
    "maxComments": 20,
    "maxRepliesPerComment": 2,
    "commentsSortOrder": "all"
  }
}
```

***

### ⬆️ Output

![Facebook Comments Scraper output: text, profile name, likes and date](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/d-facebook-comments-output.webp)

Every comment is one typed, normalized JSON item with the same field names on every run — nested replies ride inside the parent comment's own row, never as separate rows. A URL that fails entirely is reported with one unbilled accounting row instead. Results export from the Output tab, or the API, as JSON, CSV, or Excel — an easy way to export Facebook comments to CSV for a spreadsheet or a BI tool.

#### Example output

This is a real row from a recorded run against the example input above:

```json
{
  "facebookUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl",
  "commentUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid02F1Aw7YuH6rE3y893CmceFBCkCHdyp3JnXvqMoTwurFFNSsS59LmsK7QKw7qZUTPRl?comment_id=1321399614945736",
  "id": "Y29tbWVudDo2Mzc1MjE5MzQyNTUyMTEyXzEzMjEzOTk2MTQ5NDU3MzY=",
  "feedbackId": "ZmVlZGJhY2s6NjM3NTIxOTM0MjU1MjExMl8xMzIxMzk5NjE0OTQ1NzM2",
  "date": "2021-08-16T02:08:00+00:00",
  "text": "Funny how sometimes we just seem to stumble into something and find it’s exactly what we should be doing. Keep planting the seeds.",
  "profilePicture": "https://scontent.fdac8-1.fna.fbcdn.net/v/t39.30808-1/571112310_10224295759300729_2684269172790111799_n.jpg?stp=cp0_dst-jpg_tt6&_nc_cat=101&oh=00_AQPq_D-2Lw9BWQyOD2K49w9vg42pYAolw1OT7xPB8ewL-Q",
  "profileId": "pfbid0wrvUdE9yPRYEnQeLk6dJDDYw2qpHt1br9ijipRKdCurkdKzQLAZaViUhyEcU8YKLl",
  "profileName": "Alan B Cohen",
  "profileUrl": "https://www.facebook.com/profile.php?id=1806168525",
  "likesCount": 3,
  "commentsCount": 1,
  "reply": [
    {
      "facebookUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl",
      "commentUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid02F1Aw7YuH6rE3y893CmceFBCkCHdyp3JnXvqMoTwurFFNSsS59LmsK7QKw7qZUTPRl?comment_id=1321399614945736&reply_comment_id=1156884842622198",
      "id": "Y29tbWVudDo2Mzc1MjE5MzQyNTUyMTEyXzExNTY4ODQ4NDI2MjIxOTg=",
      "feedbackId": "ZmVlZGJhY2s6NjM3NTIxOTM0MjU1MjExMl8xMTU2ODg0ODQyNjIyMTk4",
      "date": "2025-11-07T04:59:17+00:00",
      "text": "hi bro",
      "profilePicture": "https://scontent.fdac8-1.fna.fbcdn.net/v/t39.30808-1/533021075_122142761006841301_7350469358114022718_n.jpg",
      "profileId": "pfbid0rBKvkp1FQdSDZab1XrEaKJtHrYJmwfBXhk1ts6sucNZfa9HmyzAeECbULac3wcFzl",
      "profileName": "Glow Carry",
      "profileUrl": "https://www.facebook.com/GlowCarry",
      "likesCount": 0,
      "commentsCount": 0,
      "reply": [],
      "threadingDepth": 1,
      "facebookId": "1156884842622198",
      "inputUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"
    }
  ],
  "threadingDepth": 0,
  "facebookId": "1321399614945736",
  "inputUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl",
  "url_key": "pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl",
  "full_url": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"
}
```

A URL that fails to load returns this shape instead, and the run continues to the next URL:

```json
{
  "url_key": "pfbid0Xyz",
  "full_url": "https://www.facebook.com/PageName/posts/pfbid0Xyz",
  "error": "the post page could not be loaded after 6 tries (a network error)",
  "comments": []
}
```

***

### How does it work?

It reads the same public page a logged-out visitor's browser would load, through Apify's residential proxy network, so Facebook sees ordinary visitor traffic instead of one data center sending thousands of requests. No Facebook account, login, or credential of any kind is used anywhere in the process — it returns only what any visitor can already see without logging in. Requests that get blocked or rate-limited are retried automatically on fresh connections before the Actor gives up on that one post, so a single hiccup from Facebook does not fail the whole run. The output schema is fixed and normalized: comment text, author details, counts, and timestamps come back in the same shape every time, even if Facebook changes how its own pages are built behind the scenes. Rows are written to your dataset while the scrape is still running, not held back until the run ends.

***

### How do you integrate Facebook Comments Scraper into your stack?

It works with what you already use: call it like a facebook comments api from any language, an MCP server for AI agents, and no-code automation tools.

#### MCP integration for AI agents

Register the Apify MCP server once, with this Actor already loaded as a tool, and your agent can call it on its own:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/facebook-comments-scraper"
```

This registers an MCP server that starts with this Actor as a tool, so your agent can call it directly. Works with Claude Code, Cursor, and Windsurf.

#### No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node's "Run an Actor" operation (search this Actor by name), or point an HTTP Request node at its run-sync endpoint with your token. In Make, use the Apify app's "Run an Actor" module followed by "Get Dataset Items" to land results in your scenario. In LangChain, install `langchain-apify` and wrap this Actor with `ApifyActorsTool`, using its ID from the Apify Store page.

***

### Is it legal to scrape Facebook data?

Scraping publicly accessible Facebook comments — content visible without logging in — is generally treated differently under the law than bypassing a login wall. It returns only publicly available data: what any visitor can already see on the permalink without logging in. Scraping public data is generally permissible under data-protection law like GDPR, but storing and using that data — including commenter names and profile links — must still comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Facebook Comments Scraper return?

Comment text, author name, author profile link, like count, and reply count are the core fields on every row — see [the data fields section](#what-data-can-i-extract-with-facebook-comments-scraper) for the complete list.

#### Does Facebook Comments Scraper require a Facebook account or login?

No. Only public comment data is extracted, and no Facebook credentials are read from or required by the input.

#### How fast does Facebook Comments Scraper run?

A recorded run returned 20 top-level comments, 5 of them with nested replies, from one post in about 6 seconds. Every run reads live data — nothing is served from a cache.

#### What happens if a post is private, deleted, or the URL is wrong?

The run pushes one accounting row for that URL with an error message describing what went wrong and no comment data, and moves on to the next URL instead of stopping the whole run. That row is not billed.

#### Can I scrape multiple Facebook posts at once?

Yes, as a bulk facebook comments scraper: the post URL list takes an array, so one run can process as many post, photo, or reel permalinks as you paste in, each billed independently.

#### Does Facebook Comments Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Facebook Comments Scraper is available as an MCP tool. Register the Apify MCP server in Claude Code, Cursor, or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/facebook-comments-scraper"` and your agent can call it directly. Any agent that can call an HTTP endpoint can also use the REST API directly.

#### Does Facebook Comments Scraper return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names — this Actor turns facebook comments to json with no HTML parsing and no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when Facebook changes its layout or anti-bot system?

The output schema is fixed and normalized, so a layout or anti-bot change on Facebook's side does not change the field names or shape your code reads — only the Actor's internal fetching logic needs to adapt.

#### Can I use Facebook Comments Scraper without managing proxies or browser infrastructure?

Yes. Proxy rotation and retry handling run on the Actor's side — you send one request and get structured JSON back, with no proxy accounts or headless browser setup to maintain.

#### Which Facebook comment fields work best for AI training data and RAG indexing?

For RAG: the comment text, author name, and timestamp give enough context to cite who said what, when, and on which post. For training data: the like count, reply count, and threading depth (top-level vs. reply) are consistent, typed numbers across every record, with no normalization needed.

***

### Your feedback

Found a bug or missing a field? Let us know through this Actor's Issues tab in Apify Console. Every report gets read, and fixes ship as part of regular maintenance.

# Actor input Schema

## `startUrls` (type: `array`):

One URL per line — bulk paste from a spreadsheet is welcome.

Works with typical **post**, **photo**, and **reel** permalinks from facebook.com.

**Pro tip:** run a small test first, then scale up your max comments.

## `commentSettings` (type: `object`):

**One panel** — max comments, reply depth, and sort order live together. Tap the header to expand or collapse.

## `onlyCommentsNewerThan` (type: `string`):

Pick a date (Absolute, e.g. `2024-01-15`) or a relative window (Relative, e.g. `1 day`, `2 weeks`, `3 months`). Only comments and replies posted **after** this point will be kept. Leave blank to disable.

Filtering happens after comments are fetched, so set `maxComments` generously for narrow windows.

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

Informational only — the scraper **always** attaches Apify **residential** proxy at runtime regardless of what is selected here. Tap the header above to expand or collapse this section.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"
  ],
  "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 = {
    "startUrls": [
        "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/facebook-comments-scraper").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 = {
    "startUrls": ["https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/facebook-comments-scraper").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 '{
  "startUrls": [
    "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call socialdataapi/facebook-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialdataapi/facebook-comments-scraper"
        }
    }
}
```

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/LWRZDp1ON3c7VYv3m/builds/PsmUwcj4duiIN3oGh/openapi.json
