Piotr VassevPiotr Vassev

How to Scrape Facebook Video Transcripts and Reel Data

How to Scrape Facebook Video Transcripts

If you want to scrape Facebook video transcripts for brand monitoring, creative research, or feeding an AI pipeline, this guide walks you through the whole process. You will learn how to turn any public Facebook reel into clean, timestamped, searchable text — with the full post context attached — and what to do with that text once you have it.

Why Scrape Facebook Video Transcripts?

Facebook is still where the largest brand audiences live, and Reels is where those brands now spend their video effort. The post text above a reel is a caption in the marketing sense — a line of copy, a hashtag, a link in comments. The claim, the product name, the offer and the joke are all spoken aloud.

Every social listening tool that reads post text is reading the label and calling it the contents.

What makes Facebook unusual is how much text is already there, unreachable. Facebook auto-generates captions for reels with speech, and then auto-translates them — one reel in our test run offered caption tracks in nine locales, from Spanish and Hindi to Thai and Urdu. None of it is downloadable, searchable, or exposed by any API. Roughly 3 in 5 reels with speech carry a caption track of some kind. The rest need real speech-to-text.

Once the audio is text, Facebook video becomes just another corpus: greppable, embeddable, summarizable, comparable across Pages and over time.

Teams scrape Facebook video transcripts for a range of purposes:

  • Brand and competitor monitoring — what a Page claims on camera, verbatim and dated
  • Creative and ad research — the scripts behind organic reels that outperform paid campaigns
  • Localization intelligence — which reels Facebook is auto-translating, and into which markets
  • Trend and language tracking — which phrases spread through a category, and how fast
  • AI and RAG pipelines — a dated, attributable corpus of what an audience is being told
  • Repurposing your own catalogue — turn every reel you posted into captions, clips and blog drafts

Doing this by hand means watching every video and typing what you hear. That is the definition of an automation target.

What Data You Can Extract from Facebook Videos

Each reel comes back as one structured record — the transcript plus everything that gives it context.

FieldDescriptionExample
id / url / pageVideo identifier, direct link and the Page it belongs to1744364316612926
descriptionThe post text above the videoIt wouldn't be "The Dog Stars" world premiere without…
createdAt / durationSecondsPublish timestamp and clip length2026-08-20T20:11:30Z / 12.886
thumbnail / width / heightCover image and video dimensions1080 × 1920
ownerName / ownerVerifiedThe Page behind it and whether it is verifiedVogue / true
ownerUrl / ownerPictureLink to the Page and its profile imagefacebook.com/Vogue
views / reactionsEngagement as numbers, with viewsText and reactionsText as shown2,100,000 / 27,000
soundtrack / isOriginalAudioThe sound used, and whether it is the Page's own audioVogue · Original audio / true
transcriptFull spoken text as one blockAnd straight ahead. Straight ahead for me.
transcriptCuesThe same text split into cues with start and end secondsstart 0.661 → end 4.361
transcriptLanguage / transcriptSourceLanguage of the text, and whether it came from the platform or AIen_US / platform
transcriptIsTranslationTrue when the text is a machine translation, not the original speechfalse
availableCaptionLocalesEvery caption language the video offerste_IN, es_LA, hi_IN, th_TH, +5
hasTranscript / skippedReasonWhether text was found, and in plain words why it wasn'tfalse / "no transcript published"

The pairing is what makes this useful. A transcript on its own is a wall of text. A transcript attached to a view count, a reaction count, a publish date and a list of the languages Facebook chose to translate it into is a data point you can rank, filter and correlate.

Cues, not just a blob

transcriptCues splits the transcript into { text, start, end } entries. That is the difference between "we have the words" and "we can act on the words":

  • Jump straight to the second a specific claim is made
  • Cut clips programmatically around a quote
  • Generate subtitle files
  • Chunk sensibly for embedding — timestamped boundaries beat arbitrary character windows for RAG quality

Facebook cues are short and gappy — silence between spoken lines is common in reels built around music. Merging cues into 20–30 second windows before embedding usually gives better retrieval than using them raw.

The translation flag matters more than it sounds

Some reels publish no original-language caption at all — only machine translations Facebook generated for other markets. A scraper that ignores this hands you Telugu text for an English video and lets you believe it is a transcript.

transcriptIsTranslation says so explicitly, and transcriptLanguage tells you which language you actually got. Translated text is genuinely useful for search and topic detection; it is not safe to quote, and it should not be embedded next to original-language text in a vector index. Turn on AI transcription when you need the real spoken words for those videos.

Common Use Cases for Facebook Transcript Data

Brand and Competitor Monitoring

Run the scraper against a competitor's Page on a schedule. Within a month you have a corpus of everything they have said on camera: product claims, pricing language, the objections they keep pre-empting. Search it for your own brand name and you catch every mention that only ever happened out loud.

Creative and Ad Research

Facebook is where organic reels and paid creative share the same feed and often the same script. Transcribing a Page's organic output tells you which messages a brand tested before it spent money on them — and the ones that got repeated are the ones that worked.

Localization Intelligence

availableCaptionLocales is a free signal nobody else reports. Facebook auto-translates captions for content it is pushing into other markets, so a reel offered in nine locales is being distributed far more widely than one offered in one. Aggregate the locales across a competitor's Page and you can see which markets they are expanding into before any announcement.

Trend and Language Tracking

Run the same Page list weekly and track term frequency over time. When a phrase — a category name, an ingredient, a competitor, a compliance deadline — starts appearing in spoken content across a niche, you have caught a narrative shift while it is still forming. Post text lags speech by weeks.

AI Pipelines and RAG

Transcripts are near-ideal LLM input: conversational, opinionated, dated, and attributable. Embed the cues, keep url, page and createdAt as metadata, filter out translated tracks, and you have a queryable index of what an audience is being told — with a citation and a timestamp to link back to.

Repurposing Your Own Content

Point it at your own Page. Every reel you have posted becomes a blog draft, a newsletter section, a set of pull-quotes and a subtitle track. The most efficient content you can produce is content you already made.

Challenges of Doing This Manually

Before the tutorial, it is worth being clear about why this is awkward to build in-house:

  • The caption track is there but unexposed — Facebook generates it, serves it to the player and offers no way to read it. Finding and fetching it correctly is the whole trick, and getting it wrong means paying for speech-to-text you did not need
  • Translated tracks masquerade as transcripts — without an explicit check you will silently collect machine translations and treat them as spoken words
  • Two in five videos need real transcription — which means resolving the media file and running it through a speech-to-text model, with all the cost control that implies
  • The pages are enormous — a reel listing decompresses to roughly 19 MB and a detail page to 2 MB. Without correct compression headers you are moving 72× more data than you need to, and paying proxy bandwidth for it
  • One detail page carries six reels — the one you asked for plus five pieces of adjacent feed content. Returning the wrong one is worse than returning nothing
  • Engagement lives outside the data payload — logged out, views and reactions appear only in page metadata and have to be parsed from there
  • Discovery is capped — the public listing shows roughly ten recent reels per Page, so any real archive has to be accumulated over time rather than fetched at once
  • Maintenance — Facebook's frontend payload changes regularly, and each change breaks an unmaintained scraper

For most teams, a maintained actor is more practical than owning that stack.

Step-by-Step: How to Scrape Facebook Video Transcripts

Here is how to do it using the Facebook Video Transcript Scraper on Apify.

Step 1 — Choose Your Input

The scraper takes two kinds of input, and you can mix them in one run:

  • Pagesvogue, BBCNews, or a full Page URL. The Page's recent reels are collected automatically and every one with speech is transcribed. This is the monitoring path
  • Video URLs — full reel, watch or video links, for when you already know exactly which videos you want, including older ones beyond the Page's recent window

Step 2 — Configure the Run

Head to the Facebook Video Transcript Scraper and set your options:

  1. Add Pages to pages and/or links to videoUrls
  2. Set onlyPostsNewerThan7 days or 2026-08-01 — so a scheduled run only returns what is new
  3. Set maxResults to cap the number of videos returned (default 50) — this is your cost control
  4. Leave transcribeWithAI off for a first pass. Most reels with speech already carry a transcript, and those cost nothing extra
  5. Turn transcribeWithAI on when you need the original speech for videos that publish only translated tracks, or maximum coverage generally — it is billed per started minute
  6. Leave language on automatic unless AI transcription is misreading a specific accent

Example input for monitoring a Page:

{
  "pages": ["vogue"],
  "onlyPostsNewerThan": "7 days",
  "transcribeWithAI": false,
  "language": "auto",
  "maxResults": 50
}

And for transcribing a specific set of videos with the original speech guaranteed:

{
  "videoUrls": [
    "https://www.facebook.com/reel/1744364316612926/"
  ],
  "transcribeWithAI": true,
  "language": "auto",
  "maxResults": 10
}

Step 3 — Run the Scraper

Once started, the actor will:

  • Resolve each Page into its recent reels, newest first
  • Skip unavailable videos and anything older than your date filter
  • Read the platform's own caption track wherever one exists, and list every locale it offers
  • Flag rows where the only available text is a machine translation
  • Run AI transcription on the remainder, if you enabled it
  • Split the result into timestamped cues and report the language
  • Attach the full post context — post text, publish date, length, thumbnail, Page, views, reactions, sound
  • Explain every empty row through skippedReason
  • Stop cleanly at your maxResults cap

Step 4 — Export Your Results

  • JSON — the right choice here, since transcriptCues and availableCaptionLocales are nested arrays
  • CSV / Excel — fine if you only need the flat transcript text and video metadata
  • API — pull results programmatically via the Apify API
  • Integrations — push straight to Google Sheets, Make, Zapier, or Slack

Ready to try it? Run the Facebook Video Transcript Scraper on Apify and get your first transcripts in minutes.

Example Output (Real Data Preview)

Facebook video transcript scraper results

Here is a real record, trimmed for length:

{
  "id": "1744364316612926",
  "url": "https://www.facebook.com/reel/1744364316612926/",
  "page": "Vogue",
  "description": "It wouldn't be \"The Dog Stars\" world premiere without a #Dogue. For the occasion, Jacob Elordi kept things classic in a navy pinstripe suit...",
  "createdAt": "2026-08-20T20:11:30.000Z",
  "durationSeconds": 12.886,
  "thumbnail": "https://scontent-waw2-2.xx.fbcdn.net/v/t15.5256-10/777260046_...",
  "width": 1080,
  "height": 1920,
  "ownerId": "100059378598050",
  "ownerName": "Vogue",
  "ownerVerified": true,
  "ownerUrl": "https://www.facebook.com/Vogue",
  "soundtrack": "Vogue · Original audio",
  "isOriginalAudio": true,
  "views": 2100000,
  "viewsText": "2.1M",
  "reactions": 27000,
  "reactionsText": "27K",
  "availableCaptionLocales": ["en_US"],
  "transcriptIsTranslation": false,
  "hasTranscript": true,
  "transcriptSource": "platform",
  "transcriptLanguage": "en_US",
  "transcript": "And straight ahead. Straight ahead for me.",
  "transcriptCues": [
    { "start": 0.661, "end": 4.361, "text": "And straight ahead." },
    { "start": 8.921, "end": 13.461, "text": "Straight ahead for me." }
  ],
  "skippedReason": null
}

Key things to notice:

  • Short reels are honest about being short — this one is 13 seconds of red-carpet direction, and the transcript reflects that. Length filtering on durationSeconds before analysis saves you from treating a soundbite as a script
  • transcriptSource tells you what you paid forplatform means Facebook's own caption track, which costs nothing beyond the transcript event however long the video is. ai means the per-minute fallback ran
  • availableCaptionLocales is free reach data — this reel offers one locale. Another in the same run offered nine, including Telugu, Hindi, Thai and Urdu, which says Facebook was pushing it into South and Southeast Asian feeds
  • transcriptIsTranslation protects your quotes — on that nine-locale reel the only track available was Telugu, so the row came back flagged rather than pretending to be the original English
  • Views and reactions are both number and stringviews for math, viewsText ("2.1M") for display, so you never have to re-derive the label Facebook showed
  • Empty rows explain themselves — a video with no published transcript returns hasTranscript: false and a skippedReason in plain English, rather than a silent null you have to investigate

Try the Facebook Video Transcript Scraper now — no coding required.

Automating Facebook Transcript Collection

Scheduled Runs

This actor is designed for monitoring, not backfilling. Around 10 recent reels are reachable per Page, so the way to build a deep archive is to run weekly against a fixed Page list with onlyPostsNewerThan: 7 days and let it accumulate. A year of weekly runs gives you a corpus nobody can reconstruct after the fact — Facebook does not let you page back through it later.

Deduplicate on id and you will never store or pay for the same video twice.

API Integration

Use the Apify API to trigger runs and collect results programmatically:

  • Push transcripts into a vector database for semantic search
  • Summarize each new reel with an LLM and post the summary to Slack
  • Append rows to a competitor-messaging sheet automatically
  • Alert when a tracked phrase or your brand name is spoken on a monitored Page

Node.js Example

For a complete working example showing how to call this actor from Node.js — including separating translated tracks from original speech, reporting caption locales and turning transcriptCues into ready-to-embed chunks — see the GitHub repository.

Webhooks

Fire a webhook on run completion so summarization, embedding and alerting kick off the moment new transcripts land.

Using Facebook Transcript Data for Business Intelligence

Hook Performance at Scale

The first three seconds decide whether a reel is watched, and the hook is almost always spoken rather than written. Take the first cue of every transcript, cluster the openings by type — question, claim, number, story — and compare average reaction rate per cluster. This is impossible without transcripts, because the hook is never written down.

Claim Extraction

Run an LLM over each transcript with a fixed extraction schema — product claims, brand names, prices quoted, competitors mentioned. You end up with a structured claims table built from unstructured speech, which is exactly the kind of dataset competitive intelligence teams normally assemble by hand.

Engagement Correlation

Join transcript features against views and reactions. Reactions per view is the comparable metric — Facebook reach is uneven enough that a 70,000-view reel can out-perform a 4.6-million-view one on engagement rate. Does word count per second correlate with reach? Does mentioning a brand in the first five seconds move reactions?

Market Expansion Signals

Aggregate availableCaptionLocales per Page per month. A brand whose reels start appearing with Portuguese and Indonesian tracks is being distributed into those markets, whether or not they have announced anything. This is the kind of signal that normally requires a paid social intelligence subscription.

Multilingual Coverage

Transcripts come back in whatever was published or spoken, and AI transcription supports automatic detection across major languages. One run over a regional Page list gives you comparable text for markets you do not staff. Translate downstream and the analysis is identical to your home market's — just keep translated and original tracks in separate columns.

Does Facebook Provide an API for This?

Not for this. Facebook's Graph API only returns content for Pages you administer or have been granted access to, gated behind app review and permission scopes. There is no public endpoint that returns another Page's video content, and there is certainly none that returns spoken text.

What's Available

  • The Graph API covers your own Pages, and only after app review
  • The Content Library exists for approved researchers, with its own application process
  • No transcript, caption or speech-to-text surface exists in any of them
  • No bulk export of another Page's video content is offered

What That Means

Scraping is not an alternative to an API here — there is no API to be an alternative to. Everything the actor reads is rendered publicly for any visitor: the reel, the post text, the Page, the view and reaction counts, and the caption track Facebook's own player uses. The optional AI transcription step happens on your side, from a public media file.

The Facebook Video Transcript Scraper reads that public surface and returns it as structured records with the transcript normalized into text and timestamped cues.

Pricing — Pay Only for Results

The actor uses Apify's Pay-Per-Event pricing model, so you pay for what you actually get back.

EventWhen it's chargedPrice
Actor startOnce per run$0.001
videoPer video returned, with all its metadata$0.003
transcriptOnly when the video actually comes back with text$0.005
transcript-minutePer started minute, only when AI transcription is used$0.020

Quick cost estimates:

  • A video that comes back with a transcript → $0.008; one with no speech → $0.003
  • 100 videos with transcripts on about two-thirds of them → roughly $0.63
  • The same 100 videos with AI transcription switched on for the gaps → roughly $1.30, since most reels run well under a minute
  • A weekly monitor over 10 Pages, ~8 new reels each → about $0.50 per week

Three things keep the bill honest: unavailable videos are skipped and never charged, a video with no speech is charged as a video and not as a transcript, and maxResults caps every run. The full list of caption languages comes back free with every row. New Apify accounts include free monthly usage credits, so you can validate the output before spending anything.

Try the Facebook Video Transcript Scraper

The Facebook Video Transcript Scraper turns Facebook's least accessible content type into structured text — full transcripts with timestamped cues and every available caption language, plus post text, Page name, verified status, publish date, length, thumbnail, views and reactions.

What you get:

  • Full transcripts of public Facebook reels and videos, from the platform's own caption track or from AI
  • Timestamped cues — ready for clipping, subtitling or embedding
  • Every caption language listed — free reach and localization data on every row
  • Honest translation flagging — machine-translated text is labelled, never passed off as speech
  • Complete post context on every record, so transcripts are analyzable, not just readable
  • Page monitoring — enter Page names, add a date filter, and a scheduled run returns only what is new
  • No login, no cookies, no session management
  • Pay-Per-Event pricing — about $0.63 per 100 videos
  • Scheduled runs, webhooks, and API access

Start transcribing Facebook videos now — your first run takes less than 5 minutes to set up.

Doing the same on other platforms? See how to scrape TikTok video transcripts, how to scrape LinkedIn video transcripts and how to scrape X (Twitter) video transcripts, or work through the news and social media scraping guide for the wider picture.

Legal and Ethical Considerations

Video transcripts are people's words, so this dataset warrants more care than a product feed. Read this before building a pipeline.

  • Public Page data only — the actor reads reels visible to any logged-out visitor on Facebook Pages. No login, no cookies, no personal profiles, no private groups
  • Page content is commercial, but speech can still be personal data — a Page is a business surface, which makes this lower-risk than personal-profile scraping, but a named person speaking on camera is still identifiable under GDPR, UK GDPR, CCPA and similar regimes
  • Purpose matters — analyzing a brand's public messaging is a materially different purpose from building profiles of the individuals who appear in its videos. The first is ordinary competitive research; the second attracts obligations you probably do not want
  • Collect only what you need — if you are tracking topics and phrasing, you may not need the speaker's identity at all. Aggregate analysis carries far less risk and usually answers the question just as well
  • Build deletion in from day one — if someone asks to be removed from your dataset, you need to be able to do it. Retrofitting that is painful
  • Never quote a translated tracktranscriptIsTranslation exists precisely so you do not attribute a machine translation to a person as their words. Check it before anything goes into a report
  • Transcripts are not verbatim-perfect — both Facebook's captions and AI models mishear names and jargon. Check the source video before quoting a name publicly
  • Respect the platform's terms — you are responsible for using the data in compliance with Facebook's Terms of Service and applicable law
  • Do not republish wholesale — a transcript is a derivative of someone's creative work. Analysis, search and summarization are fair uses of your own copy; reposting full transcripts as content is not

Public messaging is fair to study. The person who spoke it still has rights over how you process their identity. Treating those two things differently is the whole of doing this responsibly.

Frequently Asked Questions

Can you get a transcript of a Facebook video?

Not from Facebook's own interface. Facebook generates captions for most reels with speech and serves them to the player, but there is no transcript view, no caption download and nothing in the Graph API that returns spoken text. The Facebook Video Transcript Scraper reads that caption track where it exists and runs AI speech-to-text on the videos that lack one, returning the full text plus timestamped cues alongside the post data.

Do I need a Facebook account or login to scrape transcripts?

No. The scraper reads only publicly visible reels and videos on Facebook Pages, so there is no login, no cookie and nothing to configure. It sees what any logged-out visitor sees.

How many videos can I get per Facebook Page?

Around 10 recent reels per Page. Facebook's public listing stops there, so the actor is built to watch Pages over time rather than backfill an entire posting history — schedule it weekly and the archive builds itself. Older videos can still be transcribed by passing their URLs directly.

How much does it cost to transcribe Facebook videos?

The actor uses Pay-Per-Event pricing: $0.003 per video scraped and $0.005 per transcript returned, so a video that comes back with text costs $0.008. A run of 100 videos with transcripts on about two-thirds of them comes to roughly $0.63. AI transcription is optional and adds $0.020 per started minute, charged only for videos that have no transcript of their own.

Why is a Facebook transcript sometimes in the wrong language?

Facebook auto-translates captions into other markets, and some reels publish only those translated tracks with no original-language one. When that happens the row comes back with transcriptIsTranslation set to true and transcriptLanguage telling you which language you got, rather than quietly passing a machine translation off as the original speech. Turn on AI transcription to get the spoken words instead.

Is scraping Facebook video content legal?

The scraper collects only publicly available data from Facebook Pages — no login, no private content, no personal profiles. Page content is commercial and public by design, which makes it lower-risk than personal-profile data, but spoken content can still identify individuals and remains subject to GDPR and similar regimes. You need a lawful basis for collecting and processing it, and you remain responsible for complying with Facebook's Terms of Service and with copyright.

About the Author

This guide was written by Piotr, a software engineer with hands-on experience building and maintaining web scrapers at scale. He develops and maintains a suite of data extraction tools on the Apify platform, helping businesses automate their data collection workflows.

Need help with your scraping project?

Book a free discovery call and let's scope your project together.

Book a Call
Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn