# Facebook Video Transcript Scraper (`piotrv1001/facebook-video-transcript-scraper`) Actor

The Facebook Video Transcript Scraper turns Facebook Reels and videos into searchable text, capturing full transcripts with timestamps, available caption languages, post text, Page name, publish date, length, views and reactions — ideal for content research and AI pipelines.

- **URL**: https://apify.com/piotrv1001/facebook-video-transcript-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** AI, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🎬 Facebook Video Transcript Scraper

Turn Facebook Reels and videos into searchable text. The **Facebook Video Transcript Scraper** returns the spoken words of a video — full transcript plus timestamped cues — alongside the whole post record: post text, Page name and verified status, publish date, length, thumbnail, views, reactions and the sound used.

Give it a **Page** and it pulls that Page's recent reels on every run, which makes it a monitor rather than a one-off lookup. Paste **video URLs** instead when you already know exactly which ones you want.

### ✨ Features

- 🗣️ **Transcript with timestamps** — the full text plus cue-level `start`/`end` seconds, ready to search, quote or feed to an LLM.
- 📄 **Track Pages, not just links** — enter Page names and get their latest reels each run. Add a date filter and a scheduled run only ever returns what's new.
- 🌍 **Every caption language listed** — many videos carry machine-translated tracks in up to a dozen languages, and the full list comes back with each row at no extra cost.
- 🏷️ **Honest about translations** — when the only text available is a machine translation rather than the original speech, the row says so in `transcriptIsTranslation` instead of quietly passing it off.
- 🤖 **AI transcription for the rest** — most videos with speech already carry a transcript. Switch on AI transcription and the ones that don't get transcribed too.
- 📊 **The whole post, not just the words** — post text, publish date, length, thumbnail, dimensions, Page name, verified status, views and reactions.
- 🎯 **Never pays for empty rows** — unavailable videos are skipped, and a video with no speech is charged as a video, not as a transcript.
- ⚡ **No account needed** — no login, no cookies, nothing to configure.

### 🛠️ How to Use the Facebook Video Transcript Scraper

1. **Enter Pages** – add one or more Facebook Pages (`vogue`, `BBCNews`, or a Page URL).
2. **Or paste video URLs** – reel, watch or video links; use these when you have specific videos in mind.
3. **Set a date filter** *(optional)* – `7 days` or `2026-08-01` keeps a scheduled run to fresh posts only.
4. **Run it** – transcripts and post data arrive in the dataset, ready to export as JSON, CSV or Excel.

### 🔧 Input

| Field                | Type    | Description                                                                   |
| -------------------- | ------- | ----------------------------------------------------------------------------- |
| `pages`              | array   | Facebook Pages to pull recent reels from. Page name or Page URL.              |
| `videoUrls`          | array   | Specific reel, watch or video URLs. Use instead of, or alongside, Pages.      |
| `onlyPostsNewerThan` | string  | Skip anything older. Accepts `2026-08-01` or `7 days`. Empty means no filter. |
| `transcribeWithAI`   | boolean | Also transcribe videos that have no transcript of their own. Off by default.  |
| `language`           | string  | Spoken language for AI transcription. Automatic by default.                   |
| `maxResults`         | integer | Stop after this many videos. Default `50`.                                    |
| `proxyConfiguration` | object  | Used only if Facebook rate-limits the run. Residential recommended.           |

### 📊 Sample Output Data

```json
[
    {
        "id": "2478199499323298",
        "url": "https://www.facebook.com/reel/2478199499323298/",
        "page": "Vogue",
        "description": "Margaret Qualley brought Chanel's barefoot sandals to the red carpet.",
        "createdAt": "2026-08-20T20:33:44.000Z",
        "durationSeconds": 11.008,
        "thumbnail": "https://scontent.xx.fbcdn.net/v/t15.5256-10/781958773_...",
        "width": 1080,
        "height": 1920,
        "ownerId": "100059378598050",
        "ownerName": "Vogue",
        "ownerVerified": true,
        "ownerUrl": "https://www.facebook.com/Vogue",
        "ownerPicture": "https://scontent.xx.fbcdn.net/v/t39.30808-1/358106809_...",
        "soundtrack": null,
        "isOriginalAudio": true,
        "views": 1100000,
        "viewsText": "1.1M",
        "reactions": 8600,
        "reactionsText": "8.6K",
        "availableCaptionLocales": ["en_US"],
        "transcriptIsTranslation": false,
        "hasTranscript": true,
        "transcriptSource": "platform",
        "transcriptLanguage": "en_US",
        "transcript": "Just your right please. And again eyes straight up. Thank you.",
        "transcriptCues": [
            { "start": 0, "end": 3.761, "text": "Just your right please. And again eyes straight up. Thank" }
        ],
        "skippedReason": null,
        "scrapedAt": "2026-08-22T10:01:14.221Z"
    }
]
```

### 📋 Data Fields

| Field                                                               | Description                                                           |
| ------------------------------------------------------------------- | --------------------------------------------------------------------- |
| `id`, `url`, `page`                                                 | Video identity and the Page it belongs to.                            |
| `description`, `createdAt`, `durationSeconds`                       | The post text, when it went up, how long it runs.                     |
| `thumbnail`, `width`, `height`                                      | Cover image and video dimensions.                                     |
| `ownerId`, `ownerName`, `ownerVerified`, `ownerUrl`, `ownerPicture` | The Page behind it.                                                   |
| `views`, `reactions`                                                | Engagement as numbers, with `viewsText` / `reactionsText` as shown.   |
| `soundtrack`, `isOriginalAudio`                                     | The sound used, and whether it is the Page's own audio.               |
| `transcript`                                                        | The spoken words as one block of text.                                |
| `transcriptCues`                                                    | The same text split into cues with `start` and `end` seconds.         |
| `transcriptLanguage`, `transcriptSource`                            | Language of the text, and whether it came from the platform or AI.    |
| `transcriptIsTranslation`                                           | True when the text is a machine translation, not the original speech. |
| `availableCaptionLocales`                                           | Every caption language the video offers.                              |
| `hasTranscript`, `skippedReason`                                    | Whether text was found, and in plain words why it wasn't.             |

### 💵 Pricing

This Actor uses the **pay-per-event** pricing model — you only pay for what you get:

| Event                    | Price  | When it's charged                                       |
| ------------------------ | ------ | ------------------------------------------------------- |
| Actor start              | $0.001 | Once per run.                                           |
| Video scraped            | $0.003 | Per video returned, with all its metadata.              |
| Transcript returned      | $0.005 | Only when the video actually comes back with text.      |
| Minute transcribed by AI | $0.020 | Per started minute, only when AI transcription is used. |

A video that comes back with a transcript costs **$0.008**; one with no speech costs **$0.003**. A typical run of 100 videos with transcripts on about two-thirds of them comes to roughly **$0.63**. The full list of caption languages is included free, and unavailable videos are skipped and never charged. New Apify accounts include **free monthly usage credits**, so you can try it at no cost.

### 💡 Tips

- Start with a small `maxResults` to preview the data shape before scaling up.
- Pair `pages` with `onlyPostsNewerThan: 7 days` on a weekly schedule to build a rolling archive of a Page's messaging.
- Leave **AI transcription** off for a first pass. Most videos with speech already carry a transcript, and you can rerun the gaps later.
- Check `transcriptIsTranslation` before quoting a transcript — a translated track is useful for search, less so for a direct quote.
- Feed `transcript` into an LLM to summarise a competitor's messaging, extract hooks, or find every video where a product was mentioned.

### ⚠️ Good to Know

- Around **10 recent reels** are available per Page. This Actor is built to watch Pages over time, not to backfill an entire posting history in one run. For older videos, pass their URLs directly.
- Roughly **3 in 5** videos with speech already carry a transcript. Switching on AI transcription covers most of the remainder.
- Some videos offer only machine-translated caption tracks with no original-language one. Those still return text, flagged with `transcriptIsTranslation`.
- Videos with no spoken words return no transcript, and `skippedReason` says so.
- Facebook limits how quickly one IP can read. For larger runs, leave the proxy enabled in the input.

### ❓ FAQ

**Do I need a Facebook account or login?**
No. Nothing to log into and nothing to configure.

**Can I get every video a Page has ever posted?**
Not from a Page name alone — about 10 recent reels are listed per Page. If you have the URLs of older videos, pass them in `videoUrls` and they will be transcribed.

**Why did some videos come back without a transcript?**
Either there was no speech to transcribe, or the platform published no transcript and AI transcription was left off. The `skippedReason` field tells you which.

**Why is a transcript in a language I didn't expect?**
Some videos publish only machine-translated caption tracks. When that happens `transcriptIsTranslation` is `true` and `transcriptLanguage` tells you which language you got. Turn on AI transcription to get the original speech instead.

**Can I get comments?**
Not in this Actor — it focuses on the video and its transcript.

**Is scraping Facebook legal?**
Collecting publicly available data is generally lawful in the EU and US. Use the output responsibly and respect copyright and personal data rules in your jurisdiction.

### 🆘 Support

Found a bug or need a field that isn't here? Open an issue on the Actor's **Issues** tab and it will be looked at.

# Actor input Schema

## `pages` (type: `array`):

Pages to pull recent reels from. Enter a Page name (vogue), a Page URL, or both. Returns the Page's most recent reels — ideal for tracking Pages on a schedule.

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

Specific reels or videos to transcribe. Paste full Facebook reel, watch or video URLs. Use this when you already know which ones you want; leave empty to work from the Pages above.

## `onlyPostsNewerThan` (type: `string`):

Skip anything published before this. Accepts a date (2026-08-01) or a phrase (7 days). Leave empty to take everything found.

## `transcribeWithAI` (type: `boolean`):

Most videos with speech already carry a transcript, which is returned at no extra transcription cost. Turn this on to additionally run AI transcription on the ones that do not. Slower, and billed per minute of audio.

## `language` (type: `string`):

Language of the spoken audio for AI transcription. Leave as automatic unless results come back in the wrong language.

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

Stop after this many videos.

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

Proxy used if Facebook rate-limits the run. Residential proxies are recommended.

## Actor input object example

```json
{
  "pages": [
    "vogue"
  ],
  "videoUrls": [],
  "onlyPostsNewerThan": "",
  "transcribeWithAI": false,
  "language": "auto",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "pages": [
        "vogue"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/facebook-video-transcript-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 = { "pages": ["vogue"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/facebook-video-transcript-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 '{
  "pages": [
    "vogue"
  ]
}' |
apify call piotrv1001/facebook-video-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/facebook-video-transcript-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/PAH0v5pUZ9YDJM62I/builds/XFWt6Qu0WcPbgHwek/openapi.json
