# Facebook Videos Scraper (`socialdataapi/facebook-videos-scraper`) Actor

Facebook Videos Scraper — Extract Facebook video data including titles, descriptions, views, likes, comments, shares, upload dates, page or profile details, and video URLs. Useful for content research, competitor analysis, monitoring, and social media insights.

- **URL**: https://apify.com/socialdataapi/facebook-videos-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 3 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 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 Videos Scraper — Captions, Stream Links and Video Details

Facebook Videos Scraper extracts the details and playable streams of public Facebook reels and videos. Each row gives the caption, title, owner ID, duration, publish date, thumbnail and **every stream with a direct link**, from the HD and SD MP4 files to each DASH video and audio track. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a media archiving pipeline. No Facebook account or cookies needed. Start with one reel, then paste the whole list you need.

***

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

Using this Facebook Video API, you will be able to extract the following Facebook video data:

| 🆔 Video ID | 📝 Title | 💬 Caption (if the video has one) | 👤 Owner ID |
|---|---|---|---|
| 🏷️ Uploader name (page-video and Watch links) | ⏱️ Duration in seconds | 🕒 Duration as M:SS | 📅 Publish time (Unix) |
| 🗓️ Upload date (YYYYMMDD) | 🖼️ Thumbnail image | 🔗 Video page link | 📥 Input URL |
| 🎞️ All streams (DASH video, DASH audio, HD and SD MP4) with direct links | 🎯 Selected top video + audio pair | 📐 Width, height and resolution | 🎚️ Frame rate |
| 🎥 Video codec and bitrate | 🔊 Audio codec, bitrate, sample rate and channels | 📦 Estimated file size | 🚦 Status, reason and charged flag |

***

### How to use Facebook Videos Scraper

Developers, archivists and analysts who scrape facebook videos get one structured row per link from a single run: the video's details plus every playable stream.

**Copy to your AI assistant:**

```text
Facebook Videos Scraper is an Apify Actor that returns the metadata and playable stream links of public Facebook reels and videos as structured JSON: caption, title, owner ID, duration, publish time, upload date, thumbnail, and every DASH and MP4 stream with its codec, resolution, bitrate and direct URL. Use it whenever someone needs Facebook video data without cookies, a login, or a browser - archiving reels with their captions, feeding stream URLs to a transcoder, or indexing captions for search. Inputs: urls (array of strings, required, one public Facebook link per line: https://www.facebook.com/reel/<id>, https://www.facebook.com/<page>/videos/<id>/ or https://www.facebook.com/watch/?v=<id>, no default), proxyConfiguration (object, optional, Apify Proxy or your own proxy URLs, prefilled as {"useApifyProxy": false}). Every URL gives exactly one row with a status field: "Success" rows carry the full data and are the only rows charged (event row_result); "Unavailable" rows (the page had no playable video: deleted, private or not a video) and "Failed" rows (the page could not be fetched after 3 attempts, with an error field) are not charged. A summary of the run is saved as SUMMARY.json in the run's key-value store. Media links are signed by Facebook and expire, so download them soon after the run.
```

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

Point your AI assistant at the Apify MCP server and it can find this Actor through the server's search, add and call actor tools, then read Facebook videos on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open Facebook Videos Scraper in the Apify Store.
3. Paste the Facebook reel or video URLs, one per line.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Facebook Videos Scraper to bulk

The URL list has no size cap, so one run can take hundreds of links; that makes it a bulk Facebook video scraper without any extra setup. The Actor fetches up to three links at a time and saves the rows in the same order as your list, each one as soon as it is ready. Remove duplicate links first: a link listed twice is fetched twice and returns two rows. For recurring jobs, save the input as an Apify task and put it on a schedule, or start runs from your own code through the Apify API.

***

### ✨ Features

Facebook Videos Scraper fetches clean, structured videos from Facebook ⚡. It's ideal for building reel archives, feeding stream URLs to a downloader or transcoder, tracking what a page publishes, and collecting captions for search or AI pipelines. It works as a facebook reels scraper and a facebook video metadata scraper in one.

It extracts, per video:

- **Streams with direct links** – every DASH video and audio track plus the HD and SD MP4 files, each with its codec, bitrate, resolution and the download settings that come with it, so each entry works as a facebook video download link.
- **Selected pair** – the highest-bitrate video track plus the audio track, with resolution, frame rate, codecs and estimated size.
- **Caption** – the text the creator wrote, taken from the requested video only, never from the other reels on the same page.
- **Owner ID** – the numeric ID of the account that posted the video.
- **Publish time** – Unix timestamp and upload date.
- **Duration** – in seconds and as M:SS.
- **Thumbnail** – the preferred preview image.

⚡ A link that carries no playable video is reported as "Unavailable" instead of a half-empty success row, and it is never charged.

***

### Use cases 💡

- **Media archivist** — save each reel's HD link with its caption, owner ID and publish date.
- **Pipeline engineer** — pick the DASH track whose height matches the target and skip needless re-encodes.
- **Content analyst** — track a page's video length and posting dates over time.
- **Researcher** — use it as a facebook reel caption extractor and study hashtags across reel sets.
- **AI engineer** — index captions and titles into a RAG pipeline, keyed on video ID.

Building an AI agent? [Connect Facebook Videos Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **Six links, six rows, under four seconds.** A recorded run with 6 links (two reels, a page video, a Watch link, a deleted reel and a repeated reel) returned 6 rows in 3.5 to 3.8 seconds, each with its status.
- **The full media picture for each video.** A recorded National Geographic reel came back with a 62.687-second runtime, 5 stream entries up to 720x1280 at 23.976 frames per second, and its full caption.
- **45 output fields, three link types, honest statuses.** Reel, page-video and Watch links are accepted, and every row says whether it is a success, unavailable or failed.

***

### ⬇️ Input

The Actor takes a list of public Facebook links in the URL field, which is the only required input. Proxy settings are optional.

#### Accepted URLs for the Facebook video scraper

- `https://www.facebook.com/reel/<id>`
- `https://www.facebook.com/<page>/videos/<id>/`
- `https://www.facebook.com/watch/?v=<id>`

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `urls` | Yes | array | Public Facebook reel or video links, one per line. Each link gives one row. No default. | `["https://www.facebook.com/reel/1775334020324572"]` |
| `proxyConfiguration` | No | object | Apify Proxy or your own proxy URLs (only the first one is used). Prefilled as `{"useApifyProxy": false}`, a direct connection; on a direct connection a blocked request is retried through a proxy. | `{"useApifyProxy": true}` |

#### Example input

```json
{
  "urls": [
    "https://www.facebook.com/reel/1775334020324572",
    "https://www.facebook.com/reel/816552800975144",
    "https://www.facebook.com/watch/?v=1395487772147320"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

***

### ⬆️ Output

Every video is one typed, normalized JSON item with the same field names on every run, and you can export facebook reels to CSV, JSON (default) or Excel. Each URL gives exactly one row, and its status tells you which kind it is.

#### Facebook video scraper row types

- **Success** – the full row, charged as one `row_result` event.
- **Unavailable** – the page carried no playable video (deleted, private or not a video). Only the video ID, input URL, status, reason and charged flag; not charged.
- **Failed** – the page could not be fetched after 3 attempts. Input URL, status, reason, charged flag and the error message; not charged.

#### Example output

A real Success row and a real Unavailable row from a recorded run. The stream list is cut to two entries and the long signed media links are shortened here; a real row lists every stream with its full link.

```json
[
  {
    "title": "Some sharks navigate across entire ocean basins, covering distances comparable to Earth's circumference. Hidden within their snouts is the sensory system that helps guide these extraordinary journeys. But some species are adjusting their migrations—National Geographic Explorer Arzucan Askin explains why. | National Geographic",
    "description": "Some sharks navigate across entire ocean basins, covering distances comparable to Earth's circumference. Hidden within their snouts is the sensory system that helps guide these extraordinary journeys. But some species are adjusting their migrations—National Geographic Explorer Arzucan Askin explains why.",
    "uploader": null,
    "uploader_id": "100044623170418",
    "thumbnail": "https://scontent.fdac8-1.fna.fbcdn.net/v/t15.5256-10/740365861_177533419…",
    "duration": 62.687,
    "id": "1775334020324572",
    "formats": [
      {
        "format_id": "2121894758360781a",
        "manifest_url": "https://www.facebook.com/dash_mpd_debug.mpd?v=1775334020324572&dummy=.mpd",
        "ext": "m4a",
        "width": null,
        "height": null,
        "tbr": 59.806,
        "asr": 48000,
        "fps": null,
        "language": null,
        "format_note": "DASH audio",
        "filesize": 468632,
        "container": "m4a_dash",
        "vcodec": "none",
        "acodec": "mp4a.40.5",
        "dynamic_range": null,
        "url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m412/AQMtnRVE7KQ1xseaN553…",
        "manifest_stream_number": 0,
        "is_dash_periods": true,
        "http_headers": {
          "User-Agent": "facebookexternalhit/1.1",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Language": "en-us,en;q=0.5",
          "Sec-Fetch-Mode": "navigate"
        },
        "downloader_options": {
          "http_chunk_size": 262144000
        },
        "protocol": "https",
        "audio_ext": "m4a",
        "video_ext": "none",
        "audio_channels": 2,
        "vbr": 0,
        "abr": 59.806,
        "resolution": "audio only",
        "aspect_ratio": null,
        "format": "2121894758360781a - audio only (DASH audio)"
      },
      {
        "format_id": "hd",
        "quality": -2,
        "url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m366/AQNWFkIfscJ3e75ieKsJ…",
        "http_headers": {
          "User-Agent": "facebookexternalhit/1.1",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Language": "en-us,en;q=0.5",
          "Sec-Fetch-Mode": "navigate"
        },
        "downloader_options": {
          "http_chunk_size": 262144000
        },
        "protocol": "https",
        "ext": "mp4",
        "video_ext": "mp4",
        "audio_ext": "none",
        "vbr": null,
        "abr": null,
        "tbr": 1508.885,
        "resolution": null,
        "dynamic_range": "SDR",
        "aspect_ratio": null,
        "filesize_approx": 11823434,
        "format": "hd - unknown"
      }
    ],
    "timestamp": 1784401217,
    "webpage_url": "https://www.facebook.com/100044623170418/videos/1775334020324572/",
    "original_url": "https://www.facebook.com/reel/1775334020324572",
    "webpage_url_basename": "1775334020324572",
    "webpage_url_domain": "facebook.com",
    "extractor": "facebook",
    "extractor_key": "Facebook",
    "thumbnails": [
      {
        "url": "https://scontent.fdac8-1.fna.fbcdn.net/v/t15.5256-10/740365861_177533419…",
        "id": "0"
      }
    ],
    "display_id": "1775334020324572",
    "fulltitle": "Some sharks navigate across entire ocean basins, covering distances comparable to Earth's circumference. Hidden within their snouts is the sensory system that helps guide these extraordinary journeys. But some species are adjusting their migrations—National Geographic Explorer Arzucan Askin explains why. | National Geographic",
    "duration_string": "1:02",
    "upload_date": "20260718",
    "epoch": 1790844848,
    "requested_formats": [
      {
        "format_id": "2121894841694106v",
        "manifest_url": "https://www.facebook.com/dash_mpd_debug.mpd?v=1775334020324572&dummy=.mpd",
        "ext": "mp4",
        "width": 720,
        "height": 1280,
        "tbr": 2213.98,
        "asr": null,
        "fps": 23.976,
        "language": null,
        "format_note": "DASH video",
        "filesize": 17348470,
        "container": "mp4_dash",
        "vcodec": "avc1.64001f",
        "acodec": "none",
        "dynamic_range": "SDR",
        "url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m366/AQNWFkIfscJ3e75ieKsJ…",
        "manifest_stream_number": 0,
        "is_dash_periods": true,
        "http_headers": {
          "User-Agent": "facebookexternalhit/1.1",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Language": "en-us,en;q=0.5",
          "Sec-Fetch-Mode": "navigate"
        },
        "downloader_options": {
          "http_chunk_size": 262144000
        },
        "protocol": "https",
        "video_ext": "mp4",
        "audio_ext": "none",
        "abr": 0,
        "vbr": 2213.98,
        "resolution": "720x1280",
        "aspect_ratio": 0.56,
        "format": "2121894841694106v - 720x1280 (DASH video)"
      },
      {
        "format_id": "2121894758360781a",
        "manifest_url": "https://www.facebook.com/dash_mpd_debug.mpd?v=1775334020324572&dummy=.mpd",
        "ext": "m4a",
        "width": null,
        "height": null,
        "tbr": 59.806,
        "asr": 48000,
        "fps": null,
        "language": null,
        "format_note": "DASH audio",
        "filesize": 468632,
        "container": "m4a_dash",
        "vcodec": "none",
        "acodec": "mp4a.40.5",
        "dynamic_range": null,
        "url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m412/AQMtnRVE7KQ1xseaN553…",
        "manifest_stream_number": 0,
        "is_dash_periods": true,
        "http_headers": {
          "User-Agent": "facebookexternalhit/1.1",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Language": "en-us,en;q=0.5",
          "Sec-Fetch-Mode": "navigate"
        },
        "downloader_options": {
          "http_chunk_size": 262144000
        },
        "protocol": "https",
        "audio_ext": "m4a",
        "video_ext": "none",
        "audio_channels": 2,
        "vbr": 0,
        "abr": 59.806,
        "resolution": "audio only",
        "aspect_ratio": null,
        "format": "2121894758360781a - audio only (DASH audio)"
      }
    ],
    "format": "2121894841694106v - 720x1280 (DASH video)+2121894758360781a - audio only (DASH audio)",
    "format_id": "2121894841694106v+2121894758360781a",
    "ext": "mp4",
    "protocol": "https+https",
    "format_note": "DASH video+DASH audio",
    "filesize_approx": 17817102,
    "tbr": 2273.786,
    "width": 720,
    "height": 1280,
    "resolution": "720x1280",
    "fps": 23.976,
    "dynamic_range": "SDR",
    "vcodec": "avc1.64001f",
    "vbr": 2213.98,
    "aspect_ratio": 0.56,
    "acodec": "mp4a.40.5",
    "abr": 59.806,
    "asr": 48000,
    "audio_channels": 2,
    "status": "Success",
    "unavailableReason": null,
    "charged": true
  },
  {
    "id": "2429400350831482",
    "original_url": "https://www.facebook.com/reel/2429400350831482",
    "status": "Unavailable",
    "unavailableReason": "video_unavailable_or_not_a_reel",
    "charged": false
  }
]
```

***

### How does it work?

The Actor reads only public data that any logged-out visitor can see, with one plain HTTP request per link and no browser. For each link it collects the video ID, owner ID, caption, publish time, thumbnail and the full list of streams, and it makes sure the caption and owner belong to the exact video you asked for, not to other videos shown on the same page. Each request gets up to three attempts. You can use Apify Proxy or your own proxy; a blocked request, or a live video whose data Facebook holds back, is retried through a proxy automatically. A deleted or private video is reported as unavailable instead of a half-empty row. The row shape is defined by the Actor, not by Facebook's page layout, so your field names stay the same from run to run.

***

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

Facebook Videos Scraper works with what you already use: the REST API from any language (a simple facebook reels api for your own code), MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

Add the Apify MCP server to your agent with one command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

Your agent then finds this Actor with the server's search, add and call actor tools, which registers it as a tool your agent can call directly. The same server URL works in Claude Code, Cursor and Windsurf, so your assistant can pass in links and read back structured video rows.

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

- **n8n** – add the Apify node, choose "Run an Actor", pick this Actor and pass your list of links; the next node reads the run's dataset items.
- **Make** – use the Apify app's "Run an Actor" module, then "Get Dataset Items" to send each row to Google Sheets, Airtable or your storage.
- **LangChain** – load a finished run's dataset with `ApifyDatasetLoader` from `langchain-apify` and map each row's caption and title into documents.

***

### Is it legal to scrape Facebook data?

Scraping publicly available Facebook video data is generally legal when no login is bypassed and no private content is accessed. Facebook Videos Scraper returns only publicly available data, what any user sees without logging in. Captions and owner IDs can identify people, so under GDPR and similar laws, storing and using that data must have a lawful basis and follow local data-protection rules. The stream links point to videos that their creators own; a link is not a licence to republish the video. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

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

It returns the caption, the owner ID, the duration, the publish time and every playable stream with its direct link, plus the title, thumbnail and the selected video and audio pair. See [the data fields section](#what-data-can-i-extract-with-facebook-videos-scraper) for the full list.

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

No. Only public video data is extracted, and there is no field for a cookie, token or password. No credentials are needed beyond your Apify account.

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

A recorded run with 6 links returned 6 rows in 3.5 to 3.8 seconds, with up to three links fetched at a time. Data is fetched live at run time, not from a cache.

#### What happens if a video is private or doesn't exist?

You get one row with status "Unavailable" and a reason, and it is not charged. If the video exists but Facebook holds its data back, the Actor first retries through a proxy, so an Unavailable row means the video could not be shown publicly. If the page cannot be fetched after 3 attempts, the row has status "Failed" with the error message, also not charged. In code, keep the rows where status equals "Success" and read the other fields with `.get()`, because Unavailable and Failed rows carry only a few fields.

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

Yes. Put as many links as you like in the URL list; up to three are fetched at a time and the rows are saved in your list's order.

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

Yes, this Actor is available as an MCP tool through the Apify MCP server. Register the server in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com"` and the agent finds the Actor with the search, add and call actor tools. Any agent that can call an HTTP endpoint can also use the Apify REST API directly.

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

Yes. Rows are typed, normalized JSON with consistent field names, with no HTML parsing and no selectors. Pass them to an LLM, index them into a vector store, or hand them to an agent tool with no transformation step.

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

The Actor is maintained, and when Facebook changes, the Actor is updated so your calls keep returning the same JSON field names with no changes on your end. If a value stops being available, it shows up as an empty field rather than a wrong one.

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

Yes. There is no browser to run, and proxies are optional: tick Apify Proxy, add your own proxy URL, or leave it off and let the Actor retry blocked requests through a proxy on its own. You send a list of links and get structured JSON back.

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

For RAG, use the caption and the title, with the input URL as the citation link. For training data, use the duration, publish time, width, height, frame rate and bitrates, which are plain numbers. All fields are typed values, strings, numbers or plain objects, so no extra cleaning is needed.

***

### Your feedback

Found a bug or missing a field? Let us know through the Actor's Issues tab in Apify Console. Include the exact Facebook link and the input you ran so the problem can be reproduced quickly.

# Actor input Schema

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

📎 One public Facebook link per line. Reel links (https://www.facebook.com/reel/<id>) are the main format. Page-video links (https://www.facebook.com/<page>/videos/<id>/) and Watch links (https://www.facebook.com/watch/?v=<id>) also work when Facebook serves the video to a logged-out visitor. A link whose page carries no playable video (deleted, private or not a video) returns one row with status "Unavailable", and a link that cannot be fetched after 3 attempts returns status "Failed"; neither is charged. Duplicate links are fetched again. Free plan: up to 20 URLs per run and 200 items per month; paid plans have no limit.

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

🛡️ Optional. Use Apify Proxy or your own proxy URLs (only the first one is used). Left off (direct connection), a request that looks blocked is retried through a proxy for that link. If Facebook holds back a live video's data from your connection, the link is retried through an Apify proxy even when no proxy is set.

## Actor input object example

```json
{
  "urls": [
    "https://www.facebook.com/reel/1775334020324572"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the Actor's default dataset.

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

SUMMARY.json in the key-value store: per-URL status (Success/Unavailable/Failed) and totals for the run.

# 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 = {
    "urls": [
        "https://www.facebook.com/reel/1775334020324572"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/facebook-videos-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 = {
    "urls": ["https://www.facebook.com/reel/1775334020324572"],
    "proxyConfiguration": { "useApifyProxy": False },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialdataapi/facebook-videos-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/Q1eTpkEuh5KQtAofC/builds/37U6nIYECa0vbedwz/openapi.json
