# Facebook Page Video Downloader (`maximedupre/facebook-page-video-downloader`) Actor

Scrape public Facebook Page videos. Export video IDs, captions, publish times, play and reaction counts, authors, thumbnails, and playable URLs when Facebook exposes them.

- **URL**: https://apify.com/maximedupre/facebook-page-video-downloader.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.45 / 1,000 saved videos

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 page video downloader for public Pages

Facebook Page Video Downloader exports videos published on public [Facebook](https://www.facebook.com/) Pages. Add a Page URL, handle, slug, profile ID, or delegate Page ID, choose how many videos to save, and get a clean Apify dataset with video IDs, captions, publish times, duration, play and reaction counts, author IDs, thumbnails, and direct playable URLs when Facebook exposes them.

Use this Facebook page video downloader when you need repeatable exports for content research, campaign reporting, social listening, competitor tracking, brand archiving, or a lightweight Facebook Page videos scraper workflow. Instead of opening a Page, scrolling through the Videos tab, and copying metadata by hand, you can run the Actor, export the dataset, schedule repeat checks, or call it from the Apify API.

The Actor is built for public Facebook Page video libraries. It does not ask for Facebook cookies, a Facebook login, a Meta API key, or a third-party API key. Private, restricted, removed, login-only, group, Marketplace, photo, story, search-result, and direct single-post media download workflows are outside this Actor's scope.

### ✅ What this Actor does

- Scrapes videos published on public Facebook Pages.
- Accepts Page URLs, handles, slugs, profile IDs, and delegate Page IDs.
- Saves one dataset row per successful public Page video.
- Automatically continues through the Page's video list until your `maxResults` limit or the end of the public list.
- Deduplicates repeated videos inside the same run.
- Returns only successful video rows, not failed-target placeholder rows.
- Adds direct playable video URLs and thumbnail URLs when Facebook exposes them publicly.
- Includes Page identity, video identity, captions, timestamps, duration, engagement counts, reaction breakdowns, and author IDs when available.

For a small first run, keep the prefilled public Facebook Pages and the default **Maximum videos** value. Once the output shape looks right, replace them with the Pages you want to monitor.

### 📦 Data you can export

Each output row represents one public Facebook Page video. Fields can include:

- `target` - the Page URL, handle, slug, profile ID, or delegate Page ID you submitted.
- `page` - source-confirmed Page identity with Page ID, delegate Page ID, name, and handle when available.
- `videoId` - stable Facebook video ID.
- `title` and `description` - title, headline, caption, or description when exposed.
- `publishedAt` - public publish timestamp as ISO 8601 when available.
- `durationSeconds` - video duration in seconds.
- `playCount`, `reactionCount`, and `shareCount` - public engagement counts when exposed.
- `reactions` - like, love, care, haha, wow, sad, and angry counts when Facebook exposes the breakdown.
- `author` - author or Page IDs and name when available.
- `media.playableUrl` - direct playable Facebook video URL when exposed.
- `media.thumbnailUrl` - video thumbnail URL when exposed.
- `media.quality` and `media.format` - media hints parsed from the playable URL when available.

Some values can be `null` because Facebook exposes different fields for different Pages, videos, regions, and run times. The Actor does not invent missing metadata.

### 🚀 How to run it

1. Open the Actor input.
2. Add one or more public Facebook Pages in **Facebook Pages**.
3. Use a Page URL such as `https://www.facebook.com/facebook`, a handle such as `facebook`, a profile ID, or a delegate Page ID such as `20531316728`.
4. Set **Maximum videos** to the number of successful video rows you want across the run.
5. Start the Actor and open the dataset.

You can export the dataset as JSON, CSV, Excel, XML, RSS, or HTML. You can also run the Actor through the Apify API, schedule repeat exports, connect webhooks, or send the dataset to automation tools.

### 🔧 Input

| Field | What to enter |
| ----- | ------------- |
| `pageTargets` | Public Facebook Page URLs, handles, slugs, profile IDs, or delegate Page IDs. |
| `maxResults` | Maximum number of public Page videos to save across the whole run. Default is `25`, maximum is `1000`. |

Example input:

```json
{
	"pageTargets": [
		"https://www.facebook.com/facebook",
		"https://www.facebook.com/instagram",
		"https://www.facebook.com/Meta",
		"https://www.facebook.com/WhatsApp"
	],
	"maxResults": 25
}
````

### 🧾 Output example

```json
{
	"target": "https://www.facebook.com/facebook",
	"page": {
		"id": "100064860875397",
		"delegatePageId": "20531316728",
		"name": "Facebook",
		"handle": "facebook"
	},
	"videoId": "1765474204639221",
	"title": "New camera roll suggestions",
	"description": "We're introducing new cut-out videos for our opt-in camera roll suggestions!",
	"publishedAt": "2026-06-15T18:20:51.000Z",
	"durationSeconds": 29.853,
	"playCount": 386329,
	"reactionCount": 3770,
	"shareCount": null,
	"reactions": {
		"like": 2400,
		"love": 820,
		"care": 15,
		"haha": 410,
		"wow": 90,
		"sad": 20,
		"angry": 15
	},
	"author": {
		"id": "100064860875397",
		"delegatePageId": "20531316728",
		"name": "Facebook"
	},
	"media": {
		"playableUrl": "https://video-sea5-1.xx.fbcdn.net/o1/v/t2/f2/example.mp4",
		"thumbnailUrl": "https://scontent-sea5-1.xx.fbcdn.net/v/t15.5256-10/example.jpg",
		"quality": "sd",
		"format": "mp4"
	}
}
```

### 🔌 API and automation

Facebook Page Video Downloader works well as a small Facebook Page videos API for public Page video exports. Start a run from Apify Console for one-off research, schedule it for recurring monitoring, call it from the Apify API, or connect the dataset to webhooks and integrations.

The `target`, `page`, and `videoId` fields make rows easier to join across repeated runs. The Actor also deduplicates videos within a run, so the same video is not saved twice when Facebook exposes it in more than one public video connection.

### 💸 Pricing

This Actor uses pay-per-event pricing. You are charged for each public Page video that is found and saved.

Failed, private, restricted, removed, unsupported, or unavailable targets do not create paid video events. Pricing is `$0.00445` per saved video, equal to `$4.45` per 1,000 saved videos.

### ⚖️ Limits and caveats

This Actor only works with public Facebook Page videos that Facebook exposes without logging in. It does not bypass Facebook privacy controls and does not use your account, cookies, or internal authentication.

Direct playable Facebook video URLs can be temporary. Use `videoId`, `target`, and `page` fields when you need stable identifiers for deduping, auditing, or reruns.

Facebook can expose different metadata for different public videos. If a title, share count, reaction breakdown, thumbnail, or playable URL is not available for a video, the corresponding field is `null`.

### ❓ FAQ

**Can it download private Facebook Page videos?**

No. It only exports public Page videos that Facebook exposes without login. Private, restricted, removed, and login-only content is skipped.

**Do I need a Facebook account, cookies, or a Meta API key?**

No. The Actor is designed for public Page videos and does not ask for user-provided Facebook credentials.

**Can I paste normal Facebook Page URLs?**

Yes. You can use Page URLs, handles, slugs, profile IDs, or delegate Page IDs. Numeric ID forms are supported for automation, but they are not required for a normal first run.

**Does it scrape Facebook Reels, search results, groups, or direct video URLs?**

No. This Actor is focused on Page video libraries. Use a direct Facebook media downloader when you already have individual video or reel URLs.

**Why are some output fields empty?**

Facebook does not expose the same metadata for every public video. Empty fields mean that fact was not visible for that video during the run.

### 📝 Changelog

- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~facebook-page-video-downloader/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Facebook Media Downloader ↗](https://apify.com/maximedupre/facebook-media-downloader) - Download media from known public Facebook video and reel URLs.
- [Facebook User Posts Scraper ↗](https://apify.com/maximedupre/facebook-user-posts-scraper) - Export public Facebook profile and Page timeline posts.
- [Facebook Reviews Scraper ↗](https://apify.com/maximedupre/facebook-reviews-scraper) - Collect public Facebook Page reviews and recommendations.
- [Instagram Downloader API ↗](https://apify.com/maximedupre/instagram-downloader-api) - Extract direct media links from public Instagram post and reel URLs.
- [TikTok Video Downloader ↗](https://apify.com/maximedupre/tiktok-video-downloader) - Download public TikTok video or audio files to Apify storage.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `pageTargets` (type: `array`):

Page URLs, handles, slugs, profile IDs, or delegate Page IDs to collect videos from.

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

Maximum number of public Page videos to save across all Pages.

## Actor input object example

```json
{
  "pageTargets": [
    "https://www.facebook.com/facebook",
    "https://www.facebook.com/instagram",
    "https://www.facebook.com/Meta",
    "https://www.facebook.com/WhatsApp"
  ],
  "maxResults": 25
}
```

# Actor output Schema

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

Open the dataset with one row per successful public Facebook Page video, including source Page identity, video metadata, engagement counts, and media links.

# 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 = {
    "pageTargets": [
        "https://www.facebook.com/facebook",
        "https://www.facebook.com/instagram",
        "https://www.facebook.com/Meta",
        "https://www.facebook.com/WhatsApp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/facebook-page-video-downloader").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 = { "pageTargets": [
        "https://www.facebook.com/facebook",
        "https://www.facebook.com/instagram",
        "https://www.facebook.com/Meta",
        "https://www.facebook.com/WhatsApp",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/facebook-page-video-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "pageTargets": [
    "https://www.facebook.com/facebook",
    "https://www.facebook.com/instagram",
    "https://www.facebook.com/Meta",
    "https://www.facebook.com/WhatsApp"
  ]
}' |
apify call maximedupre/facebook-page-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/facebook-page-video-downloader",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Page Video Downloader",
        "description": "Scrape public Facebook Page videos. Export video IDs, captions, publish times, play and reaction counts, authors, thumbnails, and playable URLs when Facebook exposes them.",
        "version": "0.1",
        "x-build-id": "EtPyF19o1EfHq5ynY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~facebook-page-video-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-facebook-page-video-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~facebook-page-video-downloader/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-facebook-page-video-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~facebook-page-video-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-facebook-page-video-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "pageTargets"
                ],
                "properties": {
                    "pageTargets": {
                        "title": "Facebook Pages",
                        "minItems": 1,
                        "maxItems": 50,
                        "type": "array",
                        "description": "Page URLs, handles, slugs, profile IDs, or delegate Page IDs to collect videos from.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    },
                    "maxResults": {
                        "title": "Maximum videos",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of public Page videos to save across all Pages.",
                        "default": 25
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
