Facebook Video AI Transcript Scraper API avatar

Facebook Video AI Transcript Scraper API

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Facebook Video AI Transcript Scraper API

Facebook Video AI Transcript Scraper API

Transcribe public Facebook videos, Reels, Watch videos, and fb.watch links into text, timestamped segments, SRT, and WebVTT with optional translation and metadata.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

LanceAPI

LanceAPI

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

6 days ago

Last modified

Share

Turn public Facebook videos and Reels into AI-generated transcripts, timestamped segments, SRT, and WebVTT subtitles—with optional translation and structured video metadata.

Submit one or more public Facebook video URLs and receive a new transcript generated directly from the spoken audio—even when the video has no existing Facebook captions. The defaults work immediately, while optional controls let you keep Results lightweight or add subtitles, translation, and richer context when your workflow needs them.

  • Real AI transcript: spoken audio becomes new, machine-readable text
  • Choose your output: request text, timed segments, SRT, WebVTT, metadata, or translation
  • One transcription, multiple formats: selecting more formats does not create multiple transcription jobs
  • Batch-safe processing: one failed URL does not cancel the rest of the batch
  • Transparent pricing: unnecessary and unsuccessful AI work is not silently billed
  • No usable transcript, no transcription charge

Built for clean API workflows: request only the data you need, keep Results lightweight when you want simplicity, or enable richer metadata and translation when you need more context.

🎛️ Control exactly what you receive

You do not have to accept one large, fixed payload. The Actor starts with sensible defaults and lets each workflow choose the useful parts.

Choose the transcript format for your workflow

  • Request text for the smallest, simplest transcript payload—ideal for LLM prompts, search, summarization, storage, and content indexing.
  • Add segments when you need timestamps, quote extraction, timestamp-aware analysis, or alignment back to the video.
  • Request srt for subtitle import, editing, and localization workflows.
  • Request vtt for web video, accessibility, and subtitle workflows.

Need everything? Select all four. They come from the same AI transcription pass, so requesting more formats does not create multiple transcription jobs or multiply AI transcription charges.

Keep the Result lean—or add research context

Set includeMediaMetadata to false when you want a transcript-focused Result without content, media, author, or engagement. This produces a leaner payload with simpler parsing and less unnecessary data.

Keep it true when research or analytics needs available Facebook content details, author/Page information, engagement metrics, thumbnails, and temporary media URLs. One Actor can therefore serve both lightweight transcript pipelines and richer research workflows.

Translation is opt-in, not forced

Keep translation off for the leanest, lowest-cost transcription workflow. Turn it on only when another language is useful—the original transcript is always preserved. targetLanguage matters only when translation is enabled, so original-language workflows need no extra language configuration.

If the detected language already matches the target language, the Actor reuses the original transcript instead of performing or charging an unnecessary translation.

Transparent by design

You always know what creates a charge. A run has a small fixed start fee, successful Results have a plan-based processing fee, and AI transcription is charged only after audio successfully produces a usable transcript. Translation is completely optional.

No surprise AI charges: failed transcription is not charged, failed translation is not charged, canonical duplicates are processed once, and Text + Segments + SRT + WebVTT still use one transcription pass.

No usable transcript → no successful-Result processing fee and no AI transcription fee. See the Actor’s Pricing tab for current plan-specific rates.

🚀 Quick start

  1. Paste one or more public Facebook video URLs into urls.
  2. Keep the default transcript formats or select the formats you need.
  3. Enable translation only when needed.
  4. Run the Actor.
  5. Open the Dataset to retrieve the transcript and available metadata.
{
"urls": [
"https://www.facebook.com/reel/123456789012345/"
]
}

Replace the illustrative URL with a public Facebook video URL you are permitted to process.

The defaults already return plain transcript text plus timestamped segments. Add SRT, WebVTT, translation, or metadata controls only when your workflow needs them.

Supported Facebook URLs

The Actor recognizes these public Facebook URL families:

  • Facebook Reels: facebook.com/reel/{videoId}
  • Canonical Facebook video pages: facebook.com/{name}/videos/{videoId}
  • Facebook Watch URLs: facebook.com/watch/?v={videoId}
  • Mobile Facebook video URLs on m.facebook.com

The resolver also recognizes fb.watch, /share/r/, and /share/v/ redirect links. These short and share links are less reliable than canonical Reel, Watch, and video URLs and may work only when Facebook exposes a publicly resolvable destination.

Public Facebook videos only. Private, friends-only, deleted, login-required, age-restricted, region-restricted, live-in-progress, or otherwise inaccessible content cannot be processed.

Common use cases

AI, RAG, and automation

Use structured transcript text and timestamps for summarization, semantic search, classification, retrieval-augmented generation, and AI-agent workflows.

Subtitles and localization

Generate SRT or WebVTT output for authorized editing, accessibility, localization, and web-video workflows, with optional transcript translation.

Research and monitoring

Review what submitted public creators, brands, and competitors say in video content, including public messaging and spoken mentions.

Searchable content databases

Create transcript archives, index spoken Facebook content, connect it to knowledge systems, or use it in content-repurposing workflows.

Input

The defaults are intentionally useful out of the box. Most users only need to provide urls; the remaining options control how much data is returned and whether translation is added.

FieldTypeRequiredDefaultLimitsDescription
urlsstring[]Yes1–100 Schema items; up to 5 unique URLs on non-paying runs and 100 on paying runsPublic Facebook Reel, video-page, Watch, mobile, or resolvable redirect URLs. Values are trimmed, normalized, and deduplicated.
formatsstring[]No["text", "segments"]Values: text, segments, vtt, srtSelects which transcript fields appear. All formats come from one transcription result.
translatebooleanNofalseAdds a translated transcript while preserving the original transcript.
targetLanguagestringNo"en"A supported target-language codeUsed only when translate is true. Suggested values include en, es, pt, fr, de, it, ja, ko, zh-CN, zh-TW, ar, hi, ru, id, tr, vi, th, nl, pl, and uk.
includeMediaMetadatabooleanNotrueWhen false, successful items omit content, media, author, and engagement.

Canonical duplicates are processed once. When a video ID is available, deduplication uses that ID; otherwise it uses the normalized URL. Tracking variants of the same video do not produce repeated Results or repeated usage charges.

Input examples

Basic Facebook video transcription

{
"urls": ["https://www.facebook.com/watch/?v=123456789012345"]
}

Batch transcription

{
"urls": [
"https://www.facebook.com/reel/123456789012345/",
"https://www.facebook.com/example/videos/234567890123456/"
],
"formats": ["text", "segments"]
}

SRT only

{
"urls": ["https://www.facebook.com/reel/123456789012345/"],
"formats": ["srt"]
}

All transcript formats

{
"urls": ["https://www.facebook.com/reel/123456789012345/"],
"formats": ["text", "segments", "vtt", "srt"]
}

Translate to English

{
"urls": ["https://www.facebook.com/reel/123456789012345/"],
"formats": ["text", "segments", "srt"],
"translate": true,
"targetLanguage": "en"
}

Transcript without media metadata

{
"urls": ["https://www.facebook.com/reel/123456789012345/"],
"formats": ["text"],
"includeMediaMetadata": false
}

Short output example

{
"inputUrl": "https://www.facebook.com/reel/123456789012345/",
"normalizedUrl": "https://www.facebook.com/reel/123456789012345/",
"success": true,
"status": "success",
"transcript": {
"source": "ai",
"language": "en",
"characterCount": 48,
"text": "Example Facebook video transcript from spoken audio.",
"segments": [
{
"id": 0,
"start": 0,
"end": 4.8,
"text": "Example Facebook video transcript from spoken audio."
}
]
},
"translation": null,
"error": null
}

Transcript formats

text

Plain transcript text for search, summarization, LLM prompts, content analysis, and database indexing.

segments

Timestamped transcript segments containing id, start, end, and text. Times are measured in seconds and are useful for timestamp-aware analysis, quote extraction, and media alignment.

vtt

A complete WebVTT subtitle document returned as a string for authorized web-video, accessibility, localization, or editing workflows.

srt

A complete SubRip subtitle document returned as a string for authorized video editing, subtitle import, and accessibility workflows.

All selected formats are derived from the same transcription pass. Requesting text, segments, WebVTT, and SRT together does not multiply the transcription charge.

The Actor returns segment-level timestamps. It does not return speaker diarization, speaker names, or word-level timestamps.

Translation

Set translate to true and provide targetLanguage to add a translated transcript. The original transcript is preserved in transcript; translated content appears separately in translation.

{
"translation": {
"source": "translation",
"language": "en",
"characterCount": 43,
"text": "This is an example translated transcript.",
"segments": [
{
"id": 0,
"start": 0,
"end": 4.8,
"text": "This is an example translated transcript."
}
],
"srt": "1\n00:00:00,000 --> 00:00:04,800\nThis is an example translated transcript."
}
}
  • Translation is optional. If disabled, translation is null and there is no translation charge.
  • If the detected language already matches the target language, the original transcript is reused without a translation charge.
  • zh-CN and zh-TW are distinct targets when simplified/traditional conversion is requested.
  • Translation preserves segment timing from the original transcript.
  • If translation fails after transcription succeeds, the item becomes partial_success, preserves the original transcript, and does not charge the failed translation.
  • Translation character units use the original transcript, not translated output or number of formats.

Output

Each unique accepted URL creates one Dataset item. Successful items contain the transcript and may include metadata. Failed items contain an actionable item-level status and error without canceling the rest of the batch.

Metadata is best effort. A missing title, author field, or engagement count does not make a successful transcript fail. Unavailable counts are returned as null, not estimated or replaced with zero.

Temporary media URLs: Facebook media and thumbnail URLs may expire. They are not permanent storage links, and the Actor does not save video or audio files in the Dataset.

Complete output field reference

Processing and input

FieldTypeNullableMeaning
successbooleanNotrue when a usable original transcript was produced, including partial_success.
statusstringNoItem processing status.
errorobjectYesError with code, message, and retryable, or null.
inputUrlstringNoTrimmed URL supplied for this unique item.
normalizedUrlstringYesCanonical or normalized Facebook URL when available.

Content

FieldTypeNullableUnit / formatMeaning
content.videoIdstringYesFacebook video ID when resolved.
content.typestringNoreel, video, unknownNormalized media type.
content.titlestringYesAvailable video title.
content.descriptionstringYesAvailable description.
content.publishedAtstringYesISO 8601Publication time when available.
content.durationSecondsnumberYesSecondsBest available media duration.

Media

FieldTypeNullableMeaning
media.videoUrlstringYesTemporary resolved video URL.
media.audioUrlstringYesTemporary separate audio URL when available.
media.thumbnailUrlstringYesTemporary thumbnail URL when available.
media.mediaUrlsTemporarybooleanNoIndicates returned URLs may expire.

Author

FieldTypeNullableMeaning
author.idstringYesAvailable author or Page ID.
author.usernamestringYesAvailable username.
author.displayNamestringYesAvailable display name.
author.urlstringYesAvailable author or Page URL.
author.verifiedbooleanYesVerification state when exposed.

Engagement

FieldTypeNullableMeaning
engagement.viewCountnumberYesView count when independently available.
engagement.playCountnumberYesPlay count when independently available.
engagement.reactionCountnumberYesTotal reactions when available.
engagement.likeCountnumberYesLike count when independently available.
engagement.commentCountnumberYesComment count when available.
engagement.shareCountnumberYesShare count when available.

Transcript and translation

FieldTypeNullableUnit / availabilityMeaning
sourcestringNoai or translationOriginal or translated transcript.
languagestringYesLanguage codeDetected original or requested target language.
characterCountnumberNoUnicode charactersLength of returned text.
textstringConditionalWhen text requestedPlain transcript.
segmentsobject[]ConditionalWhen segments requestedTimed segments.
segments[].idnumberNoZero-basedSegment identifier.
segments[].startnumberNoSecondsStart time.
segments[].endnumberNoSecondsEnd time.
segments[].textstringNoOriginal or translated text.
vttstringConditionalWhen vtt requestedComplete WebVTT document.
srtstringConditionalWhen srt requestedComplete SRT document.

Status values

StatusMeaningTranscriptTranslationTypical retry behavior
successOriginal transcript and any requested translation succeeded.PresentPresent or nullNo retry needed
partial_successOriginal transcript succeeded; optional translation failed.PresentnullRetry only if translation is still needed
invalid_urlInput is not a valid URL.nullnullCorrect the URL
unsupported_urlNot a supported Facebook video URL.nullnullUse a supported video URL
login_requiredFacebook requires login.nullnullNot retryable without public access
private_contentContent is private or restricted.nullnullNot retryable without public access
media_not_foundNo accessible media source was resolved.nullnullUsually not retryable; verify availability
unsupported_mediaMedia exceeds supported limits or cannot be processed.nullnullUsually not retryable
no_audioNo usable audio source is present.nullnullNot retryable for the same media
no_speechAudio contains no detectable spoken language.nullnullNot retryable for the same media
transcription_failedAI transcription did not complete.nullnullCheck error.retryable
rate_limitedA public media request was rate limited.nullnullRetry later
temporarily_unavailableResolution failed for a potentially temporary reason.nullnullRetry later
processing_failedAnother item-level error occurred.nullnullCheck error.retryable

No-speech example

{
"inputUrl": "https://www.facebook.com/reel/123456789012345/",
"normalizedUrl": "https://www.facebook.com/reel/123456789012345/",
"success": false,
"status": "no_speech",
"transcript": null,
"translation": null,
"error": {
"code": "NO_SPEECH",
"message": "No speech was detected in the media.",
"retryable": false
}
}

Failed-input example

{
"inputUrl": "https://www.facebook.com/example",
"normalizedUrl": null,
"success": false,
"status": "unsupported_url",
"content": null,
"media": null,
"author": null,
"engagement": null,
"transcript": null,
"translation": null,
"error": {
"code": "UNSUPPORTED_URL",
"message": "The URL is not a supported Facebook video URL.",
"retryable": false
}
}

Translation partial-success example

{
"inputUrl": "https://www.facebook.com/reel/123456789012345/",
"normalizedUrl": "https://www.facebook.com/reel/123456789012345/",
"success": true,
"status": "partial_success",
"transcript": {
"source": "ai",
"language": "es",
"characterCount": 22,
"text": "Transcripción original."
},
"translation": null,
"error": {
"code": "TRANSLATION_FAILED",
"message": "Translation could not be completed.",
"retryable": true
}
}

Complete output example

{
"inputUrl": "https://www.facebook.com/reel/123456789012345/",
"normalizedUrl": "https://www.facebook.com/reel/123456789012345/",
"success": true,
"status": "success",
"content": {
"videoId": "123456789012345",
"type": "reel",
"title": null,
"description": "Illustrative public Facebook Reel description.",
"publishedAt": "2026-08-01T10:30:00.000Z",
"durationSeconds": 42.6
},
"media": {
"videoUrl": "https://video.example/video.mp4",
"audioUrl": "https://video.example/audio.m4a",
"thumbnailUrl": "https://media.example/thumbnail.jpg",
"mediaUrlsTemporary": true
},
"author": {
"id": "1000123456789",
"username": null,
"displayName": "Example Creator",
"url": "https://www.facebook.com/example.creator",
"verified": null
},
"engagement": {
"viewCount": null,
"playCount": 12000,
"reactionCount": 450,
"likeCount": null,
"commentCount": 38,
"shareCount": 21
},
"transcript": {
"source": "ai",
"language": "es",
"characterCount": 51,
"text": "Este es un ejemplo de una transcripción de Facebook.",
"segments": [{"id": 0, "start": 0, "end": 4.8, "text": "Este es un ejemplo de una transcripción de Facebook."}],
"vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:04.800\nEste es un ejemplo de una transcripción de Facebook.",
"srt": "1\n00:00:00,000 --> 00:00:04,800\nEste es un ejemplo de una transcripción de Facebook."
},
"translation": {
"source": "translation",
"language": "en",
"characterCount": 46,
"text": "This is an example Facebook video transcript.",
"segments": [{"id": 0, "start": 0, "end": 4.8, "text": "This is an example Facebook video transcript."}],
"vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:04.800\nThis is an example Facebook video transcript.",
"srt": "1\n00:00:00,000 --> 00:00:04,800\nThis is an example Facebook video transcript."
},
"error": null
}

All URLs and values in this output example are illustrative.

API usage

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('lance_api/facebook-video-ai-transcript-scraper-api').call({
urls: ['https://www.facebook.com/reel/123456789012345/'],
formats: ['text', 'segments'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("lance_api/facebook-video-ai-transcript-scraper-api").call(
run_input={
"urls": ["https://www.facebook.com/reel/123456789012345/"],
"formats": ["text", "segments", "srt"],
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl -X POST \
'https://api.apify.com/v2/actors/lance_api~facebook-video-ai-transcript-scraper-api/runs' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"urls":["https://www.facebook.com/reel/123456789012345/"],"formats":["text","segments"]}'

Keep your Apify Token in an environment variable or secret manager. Do not place it in source code, prompts, screenshots, or URL query parameters.

💰 Pricing

Your usage can contain four clearly separated charges:

  • Actor start: a fixed $0.005 fee applies once per run.
  • Successful Result processing: charged only when a URL produces a usable Result.
  • AI transcription: charged by started audio minute only after a usable transcript is produced.
  • Translation: optional and charged by started source-text units only when translation is actually performed.

No surprise AI charges: failed transcription is not charged, failed translation is not charged, canonical duplicates are processed once, and requesting Text + Segments + SRT + WebVTT still uses one transcription pass.

If transcription succeeds but translation fails, the successful transcript and Result processing remain billable; the failed translation does not. If source and target languages match, no translation operation or translation charge occurs.

Check the Actor’s Pricing tab for the latest Free, Starter, Scale, and Business rates.

How it works

  1. Validate, normalize, and deduplicate submitted Facebook URLs.
  2. Resolve publicly accessible Facebook media.
  3. Select usable audio or media for transcription.
  4. Generate one AI transcript with language detection and timed segments.
  5. Derive requested text, segments, WebVTT, and SRT formats.
  6. Optionally translate the completed transcript and save the structured Result to the Dataset.

🤖 Use with AI agents

This Actor can be called through the Apify MCP Server by compatible AI clients. Connect the Apify MCP Server, then call:

lance_api/facebook-video-ai-transcript-scraper-api

Example prompt:

Use the Apify Actor lance_api/facebook-video-ai-transcript-scraper-api to transcribe these public Facebook video URLs. Return the original transcript, timestamped segments, and SRT subtitles. Translate the transcript to English when requested and summarize the Results in a table.

MCP executions use the same Actor pricing as standard executions.

FAQ

Does this Actor use existing Facebook captions?

No. It generates a new transcript from spoken audio using AI.

Which Facebook URL types are supported?

Canonical Reel, video-page, Watch, and mobile video URLs are recognized. fb.watch and share redirects are less reliable and work only when a public destination can be resolved.

Can I process multiple videos at once?

Yes. The Schema accepts up to 100 URLs. Non-paying runs are limited to 5 unique URLs; paying runs support up to 100.

What happens if one URL fails?

The failure is returned as an item-level Dataset record. Other unique URLs continue processing.

What happens if a video has no audio or speech?

It returns no_audio or no_speech. No successful-Result or AI transcription fee applies, but the run start fee still applies.

Do four formats cost four times?

No. One transcription generates all requested formats.

Can transcripts be translated, and is the original kept?

Yes. The original remains in transcript; the translated version appears separately in translation.

Is unnecessary or failed translation charged?

No. Matching source and target languages reuse the original transcript. If translation fails, the original transcript is preserved and the failed translation is not charged. Simplified and Traditional Chinese remain distinct when conversion is requested.

How am I charged?

Every run has a $0.005 start fee. Each successful Result has a plan-specific processing fee. AI transcription uses ceil(durationSeconds / 60). Optional translation is charged per started 1,000 source characters.

Are duplicate URLs charged twice?

No. Canonical duplicates are processed once.

Are media URLs permanent, and are media files stored?

No. Temporary media URLs may expire. The Actor stores structured Dataset Results and does not permanently host Facebook video or audio files.

Can it access private Facebook content?

No. It processes publicly accessible content and does not bypass access controls.

Can AI agents use this Actor?

Yes. It provides structured output for Apify API and MCP workflows.

Limitations

  • Publicly accessible content only; private, login-required, age-restricted, region-restricted, or deleted media is unsupported.
  • Live streams that have not completed are unsupported.
  • Facebook page structures, accessibility rules, and media URLs can change without notice.
  • Canonical Reel, Watch, and video URLs are more reliable than short/share redirect URLs.
  • Returned media URLs are temporary and may expire.
  • Metadata is best effort; unavailable fields and counts may be null.
  • Transcription quality may be affected by background music, noise, accents, low volume, or overlapping speech.
  • Speaker diarization, speaker names, and word-level timestamps are not returned.
  • Translation is limited to supported target-language codes.
  • The Actor does not download or permanently host Facebook media.
  • The Actor does not bypass login, privacy, regional, or other access controls.

Public data and responsible use

Only process content you are legally permitted to access and process. Respect privacy, copyright, contractual restrictions, and Facebook/Meta terms. Do not attempt to bypass access controls.

Do not use this Actor for harassment, spam, unlawful profiling, copyright infringement, or attempts to obtain non-public information.

This is an unofficial Actor and is not affiliated with, endorsed by, or sponsored by Facebook or Meta.

Support

For help, open an issue on the Actor page or email lanceapi2026@hotmail.com.

Include the Run ID, a non-sensitive example Facebook URL, the returned status and error, and the expected versus actual result.

Never send your Apify Token, Facebook cookies, login credentials, API keys, or other secrets.