Facebook Video Transcript Extractor By Keyword Search
Pricing
from $2.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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 bypageUrl - 📝 Full spoken transcript text — the video's own transcript, extracted and whitespace-normalized, not a caption snippet
- 🆔 Stable identifying fields —
videoIdandurlon every row, so results are easy to de-duplicate and re-check - 🧭 Discovery metadata —
discoverySource,matchedKeyword,sourcePageUrl, andresultRankshow exactly how and where each video was found - 🎚️ Per-run volume controls —
maxVideosPerQueryandmaxVideosPerSourcecap 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.
| Field | Example Value | Use 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 |
error | null | Short reason the transcript could not be extracted, or null on success |
timestamp | 1761496105.9149563 | Unix 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) |
resultRank | 3 | This 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.
| Feature | Meta Graph API | Facebook Video Transcript Scraper |
|---|---|---|
| Keyword search across public videos | Not a documented endpoint | ✅ mode: "keyword", up to maxVideosPerQuery (max 50) matches |
| A Page's own recent videos | Requires Page Public Content Access approval | ✅ mode: "page", up to maxVideosPerSource (max 50) videos |
| Transcript / caption text field | No documented text field on /video | ✅ Full text in transcript |
| Access requirements | Access token, app registration, App Review for content you don't own | ✅ No Facebook login, token, or developer account |
| Output shape | Depends 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.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
mode | No | string | Choose 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" |
videoUrls | No | array | Used 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"] |
urls | No | array | Legacy 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/..."] |
searchKeyword | No | string | Used 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" |
pageUrl | No | string | Used 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" |
maxVideosPerQuery | No | integer | Upper limit on how many matching videos to resolve and transcribe per search keyword (keyword mode). Default 5, minimum 1, maximum 50. | 5 |
maxVideosPerSource | No | integer | Upper limit on how many of a Page's own recent videos to resolve and transcribe (page mode). Default 5, minimum 1, maximum 50. | 5 |
proxyConfiguration | No | object | Optional — 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 Name | What 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 ApifyClientclient = 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.
Is it legal to scrape Facebook videos?
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.