Facebook Video Transcript Extractor By Keyword Search avatar

Facebook Video Transcript Extractor By Keyword Search

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Facebook Video Transcript Extractor By Keyword Search

Facebook Video Transcript Extractor By Keyword Search

Extract transcripts from Facebook videos found through keyword searches. Collect video titles, descriptions, transcripts, URLs, authors, dates, views, likes, comments, and shares for content research, competitor analysis, sentiment analysis, and social media intelligence.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

2 days ago

Last modified

Share

Facebook Video Transcript Scraper — Keyword Search, Page Videos

Get clean, readable transcripts from public Facebook videos without ever collecting the links by hand. This Facebook video transcript scraper returns transcript, videoId, url, discoverySource, matchedKeyword, sourcePageUrl, resultRank, and scrapedAt for every video it processes — whichever way you point it at Facebook. Paste direct video links, give it a searchKeyword and let it search Facebook itself, or hand it a pageUrl and pull that Page's own recent videos. Content teams, researchers, and monitoring agencies use it to turn spoken video content into searchable text at scale.

What is Facebook Video Transcript Scraper?

Facebook Video Transcript Scraper is an Apify Actor that extracts the spoken transcript from public Facebook videos and returns it as structured JSON. It does not require a Facebook account, login, or API key — it works entirely against public pages and public GraphQL endpoints, the same way a signed-out visitor's browser would. Every mode — direct URL, keyword search, or Page discovery — feeds the same transcript engine, so the output row shape stays identical no matter how the video was found.

Key features:

  • 🔗 Three discovery modes — paste video URLs directly, discover matches by searchKeyword, or pull a Page's own recent uploads by pageUrl
  • 📝 Full spoken transcript text — the video's own transcript, extracted and whitespace-normalized, not a caption snippet
  • 🆔 Stable identifying fieldsvideoId and url on every row, so results are easy to de-duplicate and re-check
  • 🧭 Discovery metadatadiscoverySource, matchedKeyword, sourcePageUrl, and resultRank show exactly how and where each video was found
  • 🎚️ Per-run volume controlsmaxVideosPerQuery and maxVideosPerSource cap how many videos each discovery mode resolves (1–50)
  • ⬇️ Standard dataset export — JSON, CSV, Excel, and the other formats the Apify dataset export supports

What data can I extract with Facebook Video Transcript Scraper?

Every processed video comes back as one row with the same 10 fields, regardless of which mode found it.

FieldExample ValueUse Case
url"https://www.facebook.com/100044280796927/videos/4141502542759187"The video URL that was processed — input URL, or the one resolved by keyword/Page discovery
videoId"4141502542759187"The numeric Facebook video id, for de-duplication and re-checking
transcript"You're watching the legal breakdown. Glenn we've got breaking news..."The extracted spoken transcript, or null if none is available
errornullShort reason the transcript could not be extracted, or null on success
timestamp1761496105.9149563Unix epoch timestamp of when the row was produced
scrapedAt"2026-08-11T09:15:12.123456+00:00"Same moment as timestamp, as an ISO 8601 date string
discoverySource"keyword"How the video was found: direct_url, keyword, or page
matchedKeyword"cooking recipe"The search keyword that found this video (keyword mode only, otherwise null)
sourcePageUrl"https://www.facebook.com/nba"The Page URL this video was discovered from (page mode only, otherwise null)
resultRank3This video's 1-based position within its discovery batch (keyword/page modes only, otherwise null)

📝 Transcript and status

transcript is the field most integrations care about — the video's full spoken text, whitespace-normalized into a single readable string. When Facebook has no transcript for a video, or the fetch fails after retries, transcript comes back null and error carries a short, specific reason ("No transcript is available for this video", "Could not fetch this video after several attempts", "Could not process this video"). Nothing is ever fabricated to fill the field.

🧭 Discovery and targeting data

discoverySource, matchedKeyword, sourcePageUrl, and resultRank record how each row was produced. In direct mode these are all null/"direct_url" since you supplied the URL yourself. In keyword mode, matchedKeyword and resultRank let you group and rank results per search term. In page mode, sourcePageUrl and resultRank let you track which Page each video came from and its position in that Page's recent-videos list. timestamp/scrapedAt let you segment or de-duplicate results by run.

How does Facebook Video Transcript Scraper differ from the official Facebook API?

Meta's Graph API is the platform's own public API, but its /video node — checked on developers.facebook.com on 2026-08-15 — has no documented field that returns transcript or caption text, only a /captions edge described as "Captions for this video" with no documented content structure. The API also has no documented endpoint for searching public videos by keyword across arbitrary users or Pages; its video endpoints are built around retrieving a specific /{video-id} or publishing to accounts you already control.

FeatureMeta Graph APIFacebook Video Transcript Scraper
Keyword search across public videosNot a documented endpointmode: "keyword", up to maxVideosPerQuery (max 50) matches
A Page's own recent videosRequires Page Public Content Access approvalmode: "page", up to maxVideosPerSource (max 50) videos
Transcript / caption text fieldNo documented text field on /video✅ Full text in transcript
Access requirementsAccess token, app registration, App Review for content you don't own✅ No Facebook login, token, or developer account
Output shapeDepends on the fields and permissions granted✅ Same 10-field row across all three modes

Why doesn't the Graph API just return public video transcripts?

The Graph API's /video node is designed around content an app has been granted access to — your own Page's uploads, or content another app owner explicitly shared — not open discovery across the platform. Reaching even a single video you don't own typically requires an access token and, per Meta's own developer documentation, App Review for anything beyond public_profile/email-level access. There is no keyword-search endpoint for public videos at all. Facebook Video Transcript Scraper works around that by reading the same public pages and public GraphQL calls a signed-out browser makes, so a keyword or a Page URL is enough.

Use the Graph API when you own the Page and just need metadata for content already in your account. Use this Actor when you need to go from a keyword or a public Page URL straight to transcript text, without registering an app or waiting on a review.

How to use data extracted from Facebook video transcripts?

🎬 Content and marketing teams

Run in keyword mode with a topic (searchKeyword) to pull every matching public video's transcript in one go — no watching videos or copying links by hand. The transcript text drops straight into blog drafts, video captions, or show notes, and url/videoId let you credit or re-check the source video.

🏢 Agencies monitoring client or competitor Pages

Point pageUrl at a client's or competitor's public Facebook Page and run on a schedule. Each run returns that Page's current recent videos with resultRank showing their order and transcript giving the actual spoken content — useful for benchmarking messaging consistency across a Page's uploads without watching each one.

📊 Market research and content audits

Sweep a topic with searchKeyword and mine the returned transcript fields for messaging, claims, or terminology used across many videos at once — far faster than transcribing by hand. matchedKeyword and resultRank keep results grouped by the term that found them for downstream analysis.

🤖 AI agents and automated pipelines

Feed transcript text into a RAG index or summarization pipeline keyed on videoId, or chain the Actor into a scheduled enrichment job that turns a list of Page URLs or keywords into transcript text automatically, on the standard Apify run/schedule surface.

🔼 Input sample

Pick an Input Mode (mode) and fill in the matching field. Nothing is schema-required, but each mode needs its own field filled or the run fails with a clear error message.

ParameterRequiredTypeDescriptionExample Value
modeNostringChoose how to find videos to transcribe. direct processes the links you paste. keyword finds videos matching a search term. page pulls a Page's own recent videos. Enum: direct, keyword, page. Default: "direct"."keyword"
videoUrlsNoarrayUsed when mode = direct. Paste one or more Facebook video URLs (e.g. facebook.com/.../videos/..., /reel/..., or /watch/?v=...). Each link is processed and its full spoken transcript is extracted.["https://www.facebook.com/100044280796927/videos/2301741263587145"]
urlsNoarrayLegacy alias for videoUrls — kept for compatibility with input JSON built for the original actor. Used only when videoUrls above is empty. Prefer videoUrls.["https://www.facebook.com/.../videos/..."]
searchKeywordNostringUsed when mode = keyword. A search term, e.g. "cats" or "cooking recipe". Matching videos are discovered and each is transcribed, up to maxVideosPerQuery below."cooking recipe"
pageUrlNostringUsed when mode = page. A public Facebook Page URL, e.g. https://www.facebook.com/nba. Its own recent videos are discovered and transcribed, up to maxVideosPerSource below."https://www.facebook.com/nba"
maxVideosPerQueryNointegerUpper limit on how many matching videos to resolve and transcribe per search keyword (keyword mode). Default 5, minimum 1, maximum 50.5
maxVideosPerSourceNointegerUpper limit on how many of a Page's own recent videos to resolve and transcribe (page mode). Default 5, minimum 1, maximum 50.5
proxyConfigurationNoobjectOptional — configure proxy settings for this run. Use proxies to improve reliability, avoid rate limits, or access region-specific content. Leave empty to run without a proxy.{ "useApifyProxy": true }
{
"mode": "keyword",
"searchKeyword": "cooking recipe",
"maxVideosPerQuery": 5,
"proxyConfiguration": { "useApifyProxy": false }
}

Common pitfall: mode controls which field is actually read. Filling in videoUrls while mode is "keyword" does nothing — the Actor only reads searchKeyword in that mode. Set mode to match whichever field you filled in, and leave the others empty.

🔽 Output sample

Every run produces typed, normalized JSON rows with the same 10-field shape whether the video came from a URL, a keyword search, or a Page. Export as JSON, CSV, Excel, or any other format the Apify dataset export supports.

{
"url": "https://www.facebook.com/100044280796927/videos/4141502542759187",
"videoId": "4141502542759187",
"transcript": "You're watching the legal breakdown. Glenn we've got breaking news he...",
"error": null,
"timestamp": 1761496105.9149563,
"scrapedAt": "2026-08-11T09:15:12.123456+00:00",
"discoverySource": "direct_url",
"matchedKeyword": null,
"sourcePageUrl": null,
"resultRank": null
}

⚠️ Only rows with a successful transcript are charged under the row_result event — rows where transcription failed (transcript: null, error populated) are still written to the dataset but pushed uncharged. To see billed results only, filter the dataset for transcript != null (equivalently, error == null).

How do you filter and target specific videos?

mode is the main targeting axis: direct is exact addressing when you already have the video links; keyword is free-text discovery when you don't, trading precision for reach across all matching public videos; page scopes discovery to one Page's own recent uploads instead of the open platform. Volume is controlled per discovery mode: maxVideosPerQuery (keyword mode) and maxVideosPerSource (page mode) each accept 1–50. There is no separate quality or rating filter — the practical quality gate is downstream, filtering the output on transcript != null to keep only videos that actually had a transcript.

⚠️ In keyword mode, video discovery paginates through Facebook's own search results internally, capped at 10 pages of results regardless of maxVideosPerQuery — a keyword with few matching videos within that window may return fewer than the requested maximum even at low maxVideosPerQuery values.

{ "mode": "direct", "videoUrls": ["https://www.facebook.com/100044280796927/videos/4141502542759187"] }
{ "mode": "keyword", "searchKeyword": "cats", "maxVideosPerQuery": 20 }
{ "mode": "page", "pageUrl": "https://www.facebook.com/nba", "maxVideosPerSource": 30 }

▶️ Want to try other Facebook scrapers?

Scraper NameWhat it extracts
Facebook Reviews Scraper (Headlines, Tags & Reviewer Detail)Facebook Page reviews with headlines, tags, and reviewer details
Facebook Event Search Scraper (With Attendance Metrics)Facebook events matched by search, with attendance metrics
Instagram Post Details Scraper (With Engagement Data)Instagram post details and engagement metrics
TikTok Scraper (With Repost Insights Data)TikTok videos with repost insight data
YouTube Video Subtitles Scraper (With Engagement Filters)YouTube video subtitles/transcripts, filtered by engagement
YouTube Video Summarizer (With Multi-Language Transcripts)YouTube video transcripts and summaries in multiple languages

How to extract Facebook data programmatically

Facebook Video Transcript Scraper runs as a standard Apify Actor: one API call starts the run, and the finished dataset comes back as structured JSON over the Apify API — no separate transcript service to integrate.

🐍 Python example

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("your-username/facebook-video-transcript-extractor-by-keyword-search").call(
run_input={
"mode": "keyword",
"searchKeyword": "cooking recipe",
"maxVideosPerQuery": 5,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["videoId"], item["matchedKeyword"], item["transcript"])

🔌 MCP for AI agents

This Actor is reachable through Apify's hosted Actors MCP Server at https://mcp.apify.com (checked 2026-08-15), which exposes any Apify Actor — including this one — as a callable tool over OAuth or a bearer APIFY_API_TOKEN, for MCP clients such as Claude.ai, Claude Code, and VS Code. An agent can call it with a searchKeyword or pageUrl to pull fresh video transcripts as grounding context mid-conversation, without a separate integration.

📊 Export to spreadsheets or CRM

Export the dataset as CSV or Excel directly from the Apify Console or API, mapping videoId → an id column, url → a link column, transcript → a text/notes column, and discoverySource/matchedKeyword/sourcePageUrl → source-tracking columns for import into a spreadsheet or CRM.

Scraping public Facebook videos and Pages is generally legal — this Actor only reads content Facebook already serves to a signed-out visitor, the same way a browser would. That said, video transcripts can contain personal data: names, opinions, or other identifiable information spoken by the people in the video. If you store or reuse transcripts that include such personal data, GDPR and CCPA obligations around lawful basis, retention, and deletion apply to that data, just as they would to any other personal information you collect. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

What happens if a video has no transcript, or the fetch fails?

transcript comes back null and error explains why — "No transcript is available for this video" if Facebook has none, or a fetch/processing error if the video couldn't be reached after retries. Nothing is invented to fill the field.

Can I get the video id and discovery details along with the transcript?

Yes — every row includes videoId and url alongside transcript, plus discoverySource, matchedKeyword, sourcePageUrl, and resultRank showing exactly how that video was found.

How accurate is the transcript text?

The Actor returns whatever transcript Facebook's own systems generated for that video, extracted as-is. Accuracy depends on Facebook's own transcription quality for that video, not on this Actor. For critical use, validate exact wording against the source video.

How many videos can I get per run?

In keyword and page modes, maxVideosPerQuery/maxVideosPerSource cap results at 1–50 per keyword or Page (default 5). direct mode has no schema cap — it processes every URL you list in videoUrls/urls.

Can I discover videos from a Facebook Page instead of searching by keyword?

Yes — set mode to "page" and give it the Page's URL in pageUrl. It resolves up to maxVideosPerSource of that Page's own recent videos and transcribes each one.

Does this work with Facebook Reels?

Yes. direct mode accepts /videos/..., /reel/..., and /watch/?v=... link formats.

Can I still use the legacy urls input field?

Yes — urls is accepted as a legacy alias for videoUrls in direct mode, used only when videoUrls is empty, so existing input JSON built for the original actor keeps working.

Does Facebook Video Transcript Scraper work with Claude, ChatGPT, and AI agent frameworks?

Yes — it's reachable through Apify's Actors MCP Server (https://mcp.apify.com) for MCP-compatible clients, and callable as a standard HTTP/API endpoint via apify_client from any agent framework that can make an API call.

Can I use this without a Facebook login, API key, or developer account?

Yes. The Actor needs no Facebook account, login, access token, or developer app — only an Apify account to run it. Only public videos and Pages can be processed.

Conclusion

Facebook Video Transcript Scraper turns public Facebook videos into clean, structured transcript data — by direct link, by keyword search, or by Page — without a Facebook login, API key, or manual link collection. It's built for content teams repurposing video into text, agencies monitoring client or competitor Pages, researchers mining spoken content at scale, and AI pipelines that need transcript text as context. Start a run from the Apify Console or call it over the API with apify_client to get typed JSON transcripts back in minutes.