# Facebook Scraper (`vortex_data/facebook-scraper`) Actor

All-in-one Facebook Pages scraper organized by scenarios: Page info, Posts, Comments from Page posts, Media, Reviews, Events, Content monitoring, or All-in-one. Works anonymously by default; optional cookies are only for pages your own account can view.

- **URL**: https://apify.com/vortex_data/facebook-scraper.md
- **Developed by:** [VortexData](https://apify.com/vortex_data) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 185 total users, 31 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $5.50 / 1,000 facebook page 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?

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

### What is Facebook Scraper?

**Facebook Scraper extracts public data from Facebook Pages: contacts, posts, comments, photos, videos, Reels, reviews and events.** Paste **Page links, handles or post links**, choose what to scrape and download the results as **Excel, CSV or JSON**, with **no Facebook login** for public Pages. To try it, press **Start** with the example input: it gets the details and recent posts, media, reviews and events of two restaurants, and the free plan's $5 monthly credit covers about **900 Pages**.

### What can Facebook Scraper do?

- 🧩 **Everything about a Page in one row:** details, contacts, posts, comments, media, reviews and events, in one run.
- 🔓 **No login for public Pages:** add your Facebook cookies only for Pages that Facebook shows to logged-in visitors.
- 🔗 **Post links too:** paste links to single posts and get one row per post with its comments.
- 📅 **Date filters:** keep only posts from the last days or from a date range.
- 📇 **Lead generation:** get emails, phones, websites, addresses and opening hours of businesses.
- ⏰ **Scheduling:** run it daily or weekly on the Apify platform to keep your data fresh.
- 📈 **Monitoring:** get alerted when a run fails or returns less data than usual.
- 🔌 **API and integrations:** get the data in Python or JavaScript, Google Sheets, Make, Zapier or a webhook.
- 🌐 **Proxy rotation built in:** every request goes through Apify residential proxies, so you don't manage any.

### What data can you extract from Facebook Pages?

| What do you want to scrape? | What you get | What to paste |
|---|---|---|
| Everything | Page details and contacts, posts, comments, photos, videos, Reels, reviews, events | Page link, handle or ID |
| Page details & contacts | Name, category, followers, email, phone, website, address, opening hours, rating, creation date, ads status | Page link, handle or ID |
| Posts | Text, time, reactions, comments and shares counts, reactions by type, photos and video | Page link, handle or ID |
| Comments | Comment text, time, author, likes and replies counts | Page (comments from its recent posts) or post link |
| Post details | One row per post: text, time, counts, reactions by type, media, author and comments | post link |
| Media | Photos at full size, videos with plays and the video file, Reels | Page link, handle or ID |
| Reviews | Recommends or not, review text, time, author, tags | Page link, handle or ID |
| Events | Upcoming and past events: name, link, place | Page link, handle or ID |
| Content monitoring | Posts, comments and media | Page link, handle or ID |

Every Page row also has the Page's details. Groups and personal profiles are not supported.

### What can you do with Facebook Page data?

- 📇 **Lead generation:** collect emails, phones and websites of local businesses for your CRM.
- 🔍 **Competitor monitoring:** see what competitors post, how often, and which posts get the most reactions.
- ⭐ **Reputation tracking:** follow a business's rating and read what reviewers say.
- 💬 **Audience research:** read comments to learn what people like, ask for or complain about.
- 📅 **Event research:** list upcoming and past events of venues, clubs and brands.
- 📊 **Reporting:** schedule a run and send fresh numbers to Google Sheets or your dashboard every week.

### How to scrape Facebook Pages

1. [Create a free Apify account](https://console.apify.com/sign-up) and open Facebook Scraper.
2. Choose what you want in **What do you want to scrape?**
3. Paste Pages into **Facebook Pages or post links**, one per line. `https://www.facebook.com/nasa/`, `nasa` and `100044561550831` all work.
4. Set **Results per input**: how many results to get from each line.
5. Press **Start**.
6. When the run finishes, open **Output**, pick the view for your data (for example **Pages**, **Contacts & details**, **Posts** or **Comments**) and export it.

#### How to get your Facebook cookies

You need cookies only for Pages that Facebook shows to logged-in visitors (age, country or audience limits).

1. Log in to [facebook.com](https://www.facebook.com/) in your browser.
2. Export your cookies with the **Cookie-Editor** or **EditThisCookie** browser extension. They must include `c_user` and `xs`.
3. Paste the export into **Facebook cookies**.
4. In **Country you use Facebook from**, choose the country where you usually use Facebook. If your account is suddenly used from another country, Facebook may log you out or ask you to verify the login.

⚠️ Use only your own account and don't share your cookies with anyone: they give access to your Facebook account. The Actor never writes them to the log or the results.

#### Ready-to-run Facebook scraping tasks

Open a task, press **Try for free**, and change the Pages or dates to your own:

- 🚗 [Track car brands' Facebook posts from the last 7 days](https://apify.com/vortex_data/facebook-scraper/examples/car-brand-facebook-posts-last-7-days)
- 📰 [Monitor news outlets' Facebook posts from the last day](https://apify.com/vortex_data/facebook-scraper/examples/news-outlet-facebook-posts-last-day)
- 📇 [Get emails and phones of New York cultural venues](https://apify.com/vortex_data/facebook-scraper/examples/new-york-venue-contacts-from-facebook)
- ⭐ [Collect Facebook reviews of restaurants](https://apify.com/vortex_data/facebook-scraper/examples/restaurant-reviews-from-facebook)
- 💬 [Collect comments on Walmart's latest Facebook posts](https://apify.com/vortex_data/facebook-scraper/examples/comments-on-walmart-facebook-posts)
- 🔗 [Scrape a Facebook post and its comments from a link](https://apify.com/vortex_data/facebook-scraper/examples/facebook-post-and-comments-from-link)

### How much does it cost to scrape Facebook Pages?

You pay **$5.50 per 1,000 results** ($0.0055 per result), plus Apify's start fee of $0.00005 per run.

- **One Page is one result**, with everything the scenario reads: its details and all its posts, comments, photos, videos, Reels, reviews and events. A Page row with 20 posts and 100 comments still costs $0.0055.
- **One post link is one result** (Post details, or Comments from a post link).
- **Error rows count too.** A line that gave no data gets one row that says why, and every row in the dataset is a result.

For example, 1,000 Pages with their recent posts cost $5.50. A maximum cost per run in the run options caps your spending: the Actor stops starting new Pages when it is reached.

#### Is scraping Facebook free?

You can scrape Facebook Pages for free within Apify's free plan. It includes $5 of platform credit every month, which is enough for about 900 Pages with all their sections.

On a paid plan the price per result stays the same and your monthly credit goes further: every $10 of credit buys about 1,800 Pages or post links.

### Input

The input is simple: choose what to scrape and paste Pages. Every other field is optional. Fill the form in the **Input** tab, or send the same fields as JSON through the API:

- **What do you want to scrape?** (`dataPackage`): `fullContent` (Everything), `leadEnrichment` (Page details & contacts), `posts`, `comments`, `postDetail` (Post details), `media`, `reputation` (Reviews), `events`, `contentMonitoring` or `auto` (By link).
- **Facebook Pages or post links** (`urls`): one Page link, handle, numeric Page ID or post link per line. Apify's `startUrls` format (`[{"url": "…"}]`) works too.
- **Results per input** (`maxResults`): how many results to get from each line; with **Everything**, each section gets up to this number.
- 📅 **Only newer than** and **Only older than** (`startDate`, `endDate`): a date like `2026-01-15` or a period like `3 months`.
- 🔑 **Facebook cookies** (`facebookCookies`) and **Country you use Facebook from** (`proxyCountry`, a two-letter code such as `DE`): only for Pages shown to logged-in visitors.
- **Get everything available** (`parseAllResults`): read every section to its end.

Through the API you can also give one section its own number (`maxPosts`, `maxComments`, `maxPhotos`, `maxVideos`, `maxReels`, `maxReviews`, `maxEvents`), and set how many recent posts to read comments from and how many comments per post (`maxCommentPosts`, `maxCommentsPerPost`).

This input gets the details and 20 recent posts of NASA's Page:

```json
{
  "dataPackage": "posts",
  "urls": ["nasa"],
  "maxResults": 20
}
```

### Output

Each Page is one row of your dataset, with each section nested in it. You can download it as JSON, CSV, Excel, XML or HTML, or read it through the API. In the **Output** tab, the **Posts**, **Comments** and **Reviews** views show one row per item. The examples below are real rows, shortened.

#### Page details and contacts

```json
{
  "inputUrl": "copperkettleyqr",
  "facebookUrl": "https://www.facebook.com/copperkettleyqr/",
  "pageId": "100064027242849",
  "title": "The Copper Kettle Restaurant | Regina SK",
  "category": "Pizza place",
  "followers": 3294,
  "talking_about": 90,
  "email": "copperkettle.events@gmail.com",
  "phone": "+1 306-525-3545",
  "website": "http://www.thecopperkettle.online/",
  "address": "1953 Scarth Street, Regina, SK, Canada, S4P 2H1",
  "business_hours": "Open now",
  "priceRange": "$$",
  "rating": "94% recommend (201 reviews)",
  "ratingOverall": 94,
  "ratingCount": 201,
  "instagram": [{"username": "copperkettleyqr", "url": "https://www.instagram.com/copperkettleyqr"}],
  "creation_date": "October 29, 2014",
  "ad_status": "This Page is currently running ads.",
  "verified": false
}
```

#### A post (inside `posts`)

```json
{
  "post_id": "1663647895794209",
  "url": "https://www.facebook.com/walmart/posts/pfbid02827EoyUP4a2a9kHB58zNWtJYhTgbQEsAsCgWgZV7yk4jbZR9uzNhoF1yQoKSWZjil",
  "message": "Yeah, our bakers are this good 👀",
  "timestamp": 1790370005,
  "time": "2026-09-25T21:00:05Z",
  "reactions_count": 5473,
  "comments_count": 948,
  "reshare_count": 177,
  "reactions_by_type": {"Like": 4184, "Love": 1183, "Wow": 65, "Care": 26, "Haha": 13, "Angry": 2},
  "media": ["https://scontent-ord5-2.xx.fbcdn.net/..."],
  "author": {"id": "100064470440594", "name": "Walmart", "url": "https://www.facebook.com/100064470440594"}
}
```

#### A comment (inside `comments`)

```json
{
  "comment_id": "1563538308342774",
  "message": "Omg the eye ball one is my fav",
  "timestamp": 1790445102,
  "time": "2026-09-26T17:51:42Z",
  "likes_count": 10,
  "replies_count": 2,
  "author": {"name": "ALexx Vallejos", "url": "https://www.facebook.com/alexx.ajp"},
  "post_url": "https://www.facebook.com/walmart/posts/pfbid02827EoyUP4a2a9kHB58zNWtJYhTgbQEsAsCgWgZV7yk4jbZR9uzNhoF1yQoKSWZjil"
}
```

#### A review (inside `reviews`)

```json
{
  "recommendation": true,
  "message": "They offers a cozy atmosphere, friendly service, and a menu of tasty comfort food at reasonable prices.",
  "timestamp": 1726077478,
  "time": "2024-09-11T17:57:58Z",
  "author": {"id": "100008842841030", "name": "Daniel Masih"},
  "tags": ["Child-friendly", "Fast delivery", "Cosy atmosphere"]
}
```

#### Error rows

```json
{
  "inputUrl": "https://www.facebook.com/nosuchpage-7919/",
  "error": "not_available",
  "errorCode": "not_found",
  "errorMessage": "Not found: deleted, renamed or mistyped.",
  "nextAction": "Check the spelling; a renamed Page keeps its numeric ID, which you can paste instead."
}
```

`errorCode` says why a line gave no data: `not_found` (no Page there; without cookies this also covers Pages limited by age or country, which Facebook answers the same way), `login_required` (shown only to logged-in visitors), `not_read` (Facebook did not answer this line in this run; run it again) or `internal_error` (an error on our side).

### Facebook scraping examples

#### How to extract emails and phone numbers from Facebook Pages

```json
{
  "dataPackage": "leadEnrichment",
  "urls": ["copperkettleyqr", "JoesStoneCrab", "100064027242849"]
}
```

You get one row per Page with its email, phone, website, address, opening hours, category and rating. Open the **Contacts & details** view to see just these columns.

#### How to scrape Facebook posts from the last 7 days

```json
{
  "dataPackage": "posts",
  "urls": ["BMW", "MercedesBenz", "Porsche"],
  "maxResults": 100,
  "startDate": "7 days"
}
```

You get each car brand's posts from the last 7 days, up to 100 per brand. Periods like `2 weeks` or `3 months` work too.

#### How to scrape Facebook posts from a date range

```json
{
  "dataPackage": "posts",
  "urls": ["nasa"],
  "maxResults": 500,
  "startDate": "2026-01-01",
  "endDate": "2026-03-31"
}
```

You get up to 500 of NASA's posts published in the first quarter of 2026.

#### How to scrape comments from a Facebook post

```json
{
  "dataPackage": "postDetail",
  "urls": ["https://www.facebook.com/walmart/posts/pfbid04AfXdJYZDJEJeqPB5zt2MLwqB3izMZFfEn7eccJou1hpA9xqt44dtMMWsGGe91Kol"],
  "maxResults": 100
}
```

You get one row for the post with its text, counts and up to 100 comments. Up to 10 comments come in Facebook's "Most relevant" order; more are read in its "All comments" order.

#### How to scrape comments from a Page's recent posts

```json
{
  "dataPackage": "comments",
  "urls": ["walmart"],
  "maxResults": 100
}
```

Paste the Page instead of post links. The 100 comments are spread over Walmart's recent posts that have comments, not 100 per post.

#### How to scrape Facebook reviews

```json
{
  "dataPackage": "reputation",
  "urls": ["copperkettleyqr"],
  "maxResults": 100
}
```

You get the Page's rating and up to 100 reviews. Open the **Reviews** view to see one row per review.

#### How to scrape many Facebook Pages into one dataset

```json
{
  "dataPackage": "fullContent",
  "urls": ["BMW", "MercedesBenz", "Porsche", "Ford", "adidas"],
  "maxResults": 20
}
```

Every row has `inputUrl`, the line it came from, so you can match rows to your list.

### Other scrapers

Our other scrapers work the same way: paste links or names, choose what to scrape, and export the results.

| Actor | What it does |
|---|---|
| [Instagram Scraper](https://apify.com/vortex_data/instagram-scraper) | Extracts Instagram profiles, contacts, posts, reels, comments, followers and hashtags. |
| [Google Maps Scraper](https://apify.com/vortex_data/google-maps) | Extracts businesses from Google Maps for lead generation and market research. |
| [Similarweb Scraper](https://apify.com/vortex_data/similarweb-scraper) | Gets any website's traffic, rankings, top keywords, competitors and WHOIS from Similarweb. |

### FAQ

#### Is it legal to scrape Facebook?

The Actor collects only data that Facebook shows publicly, or that your own account can see. This data can include personal information protected by GDPR and similar laws, so use it only for legitimate purposes. If you are unsure, consult a lawyer. Read more in [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

#### Do I need a Facebook account?

No, for public Pages. Facebook shows some Pages only to logged-in visitors, for example Pages with age or country limits. For those, add your cookies (see [How to get your Facebook cookies](#how-to-get-your-facebook-cookies)); without them, such a Page gets an error row with `login_required`.

#### Facebook Scraper or the official Facebook Graph API?

| | Facebook Scraper | Official Graph API |
|---|---|---|
| Whose data | Any public Page | Mainly Pages you manage |
| What you need | An Apify account | A Meta app, app review and Page access tokens |
| Contacts, posts, reviews of other Pages | ✅ | ❌ |
| Export to Excel, CSV, JSON | ✅ built in | ❌ you write the code |

#### How to use the Facebook scraper API in Python?

Start runs and download results with the [Apify API](https://docs.apify.com/api/v2). The **API** tab has ready-to-use code for Python, JavaScript and other languages. A Python example:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vortex_data/facebook-scraper").call(run_input={
    "dataPackage": "leadEnrichment",
    "urls": ["nasa", "copperkettleyqr"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("title"), item.get("email"), item.get("phone"))
```

#### Can I connect Facebook Scraper to other apps?

Yes. With [Apify integrations](https://docs.apify.com/platform/integrations) you can send results to Google Sheets, Slack, Make, Zapier, Airbyte or your own webhook after every run. Combine it with a [schedule](https://docs.apify.com/platform/schedules) to get fresh Facebook data every day.

#### How do I get the most out of it?

- Choose the narrowest option in **What do you want to scrape?**: **Page details & contacts** is the fastest when you need only contacts.
- Set **Results per input** to what you need: a smaller number makes the run faster.
- Use **Only newer than** to get recent posts only.
- Put many Pages into one run instead of starting one run per Page.

#### Why are some fields empty?

A Page shows only what its owner filled in: many Pages have no email, opening hours or reviews. Empty sections are left out of the row. Most Pages now show followers instead of likes, so `likes` is often empty. Some Reels come without a publish time or plays because Facebook doesn't show them.

#### Why did I get fewer results than I asked for?

The Page has fewer items than you asked for, or the date filter left fewer. Comments are read only from the Page's recent posts, and a post with no comments is skipped. To get more, raise **Results per input** or turn on **Get everything available**.

#### Can I download photos and videos?

Each photo, video and Reel contains links to its image or video file. The links **expire after a few days**, so download the files you want to keep.

#### What does the run report show?

When the run finishes, the **Output** tab links to a **Run report**: what each line gave, which lines were skipped and why, and what to do about lines without data. The same information is in the run's last log line and status message.

#### A run returned no results. What should I do?

Look at the error rows in the dataset: `errorCode` and `errorMessage` say why a line gave nothing, and `nextAction` says what to do. The run report says the same. If it looks like a bug, let us know on the **Issues** tab.

#### Need help or a custom solution?

Open an issue on the **Issues** tab and include the link to your run. You can also ask there if you need a custom version of this Actor.

# Changelog

This Actor's version history is a separate document: https://apify.com/vortex_data/facebook-scraper/changelog.md

# Actor input Schema

## `dataPackage` (type: `string`):

Choose what to scrape. Each line you paste below is read for this choice.

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

Paste one item per line:<ul><li><b>A Page</b>: a handle (<code>nasa</code>), a link (<code>facebook.com/nasa/</code>, <code>profile.php?id=…</code>) or a numeric Page ID.</li><li><b>Post details, Comments</b>: a link to a post (…/posts/…, <code>permalink.php</code>, <code>story.php</code>). Comments also accepts a Page: you get the comments of its recent posts.</li></ul>Groups and personal profiles are not supported. Lines that don't fit your choice are skipped, and the log says why.

## `maxResults` (type: `integer`):

Enter how many results to get from each line. For example, 20 with 3 Pages gives up to 60 posts.<br>With <b>Everything</b>, each section (posts, comments, photos, videos, Reels, reviews, events) gets up to this number. In <b>Comments</b>, the number is spread over the Page's recent posts; for a post link, it's that post's comments.

## `startDate` (type: `string`):

Enter a date (<code>2026-01-15</code>) or a period (<code>3 months</code>) to keep only newer posts. Comments are read only from the posts you keep.

## `endDate` (type: `string`):

Enter a date (<code>2026-03-31</code>) or a period (<code>1 week</code>) to keep only older posts. Combine with <b>Only newer than</b> for a date range.

## `facebookCookies` (type: `string`):

Paste the cookies of your logged-in Facebook session. Export them with the <b>Cookie-Editor</b> or <b>EditThisCookie</b> browser extension, or copy the <code>Cookie</code> header from your browser. The export must contain <code>c_user</code> and <code>xs</code>.<br>Use only your own account and never share your cookies: they give access to your account. <a href="https://apify.com/vortex_data/facebook-scraper#how-to-get-your-facebook-cookies" target="_blank">How to get your cookies</a>

## `proxyCountry` (type: `string`):

Choose the country where you usually use Facebook. If your account is suddenly used from another country, Facebook may log you out or ask you to verify the login. Leave <b>Automatic</b> if you don't use cookies.

## `parseAllResults` (type: `boolean`):

Turn on to read every section to its end, ignoring <b>Results per input</b>. Large Pages have thousands of posts, so this can take long.

## Actor input object example

```json
{
  "dataPackage": "posts",
  "urls": [
    "nasa",
    "https://www.facebook.com/walmart/",
    "100064027242849"
  ],
  "maxResults": 50,
  "startDate": "3 months",
  "endDate": "2026-03-31",
  "proxyCountry": "",
  "parseAllResults": false
}
```

# Actor output Schema

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

All rows of the run's default dataset.

## `runReport` (type: `string`):

A readable summary of the run: what was scraped from each line, what was skipped and why.

# 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 = {
    "dataPackage": "fullContent",
    "urls": [
        "copperkettleyqr",
        "https://www.facebook.com/JoesStoneCrab/"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("vortex_data/facebook-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 = {
    "dataPackage": "fullContent",
    "urls": [
        "copperkettleyqr",
        "https://www.facebook.com/JoesStoneCrab/",
    ],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("vortex_data/facebook-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 '{
  "dataPackage": "fullContent",
  "urls": [
    "copperkettleyqr",
    "https://www.facebook.com/JoesStoneCrab/"
  ],
  "maxResults": 10
}' |
apify call vortex_data/facebook-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vortex_data/facebook-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/NkIKVcLsMRMkRplLL/builds/3JiP3cgB4jYM5aPvz/openapi.json
