Facebook Ads Transcript Scraper
Pricing
from $0.24 / 1,000 item extracteds
Facebook Ads Transcript Scraper
Extract Meta/Facebook Ads Library creative copy, video URLs, and transcript/subtitle fields exposed for public ads.
Pricing
from $0.24 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
18
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share
Find Meta/Facebook ads and export Meta-exposed captions plus reusable ad media URLs. The actor also returns creative copy, advertiser details, CTA data, and transparency metadata for competitive research.
This is an ad discovery and caption-detection toolβnot automatic speech-to-text. Use returned videoUrls with an external ASR service when Meta does not publish captions.
What does Facebook Ads Transcript Scraper do?
Facebook Ads Transcript Scraper searches public Meta Ads Library pages and saves one dataset row per ad creative.
It captures:
- π¬ Video ad URLs and preview images
- π Creative body copy and headlines
- π·οΈ Advertiser/page categories and like counts when exposed
- π Landing page URLs, descriptions, CTA text, and CTA types
- π§© Creative format and collation metadata
- π Spend, currency, and impression bands when available for political/EU transparency ads
- π§Ύ Transcript, subtitle, closed-caption, speech, or voiceover fields when present
- π§ͺ Diagnostics explaining whether transcript-like data was exposed
The actor is intentionally focused on creative analysis instead of broad political-ad archiving.
Who is it for?
Performance marketers use it to monitor competitor hooks and offers.
Creative strategists use it to build swipe files from live Facebook and Instagram ads.
Agencies use it to compare messaging across client categories.
Growth teams use it to discover videos that should be transcribed or reviewed by an editor.
Researchers use it to export public ad metadata without manually opening every ad card.
Why use this actor?
Meta Ads Library is public, but it is difficult to export repeatably.
This actor handles browser loading, proxy sessions, result normalization, and dataset output.
It also separates explicit Meta transcript/caption evidence from regular ad copy, so you know which creatives need external ASR. Millisecond caption timestamps are normalized to seconds and duplicate segments are removed.
Important transcript caveat
The actor does not invent audio transcripts.
It extracts transcript/subtitle/closed-caption/speech/voiceover fields only when Meta exposes them in the public Ad Library response.
If Meta only exposes the video URL and ad copy, the row will contain transcriptAvailable=false.
You can still use the videoUrls field to pass videos into a separate transcription workflow.
How much does it cost to extract Facebook ad transcripts?
Pricing uses pay per event.
- Start event: small one-time run fee
- Item event: charged per saved ad row
The default prefill is intentionally small so first runs stay cheap.
The current price is shown in the Apify Console before each run; item charges apply only to saved ad rows.
Input options
You can provide one or more of these inputs:
searchQueriesβ keyword searches such as brand names, products, or hooksadsLibraryUrlsβ public Meta Ads Library result or detail URLsadArchiveIdsβ known numeric ad archive IDs
Search filters
The actor supports common Meta Ads Library filters:
countryactiveStatusmediaTypemaxAdsrequireTranscriptincludeRawDiagnosticsβ defaults totrue; set it tofalseto omit the concisediagnosticsobject
Use mediaType=video when your goal is transcript discovery. Existing Tasks remain compatible because diagnostics stay enabled by default.
Example input
{"searchQueries": ["fitness app"],"country": "US","activeStatus": "all","mediaType": "video","maxAds": 25,"requireTranscript": false}
Example output fields
Each dataset row may include:
| Field | Description |
|---|---|
adArchiveId | Meta Ad Library ID |
pageName | Advertiser or Facebook page name |
creativeText | Main ad body copy |
title | Headline or card title |
pageCategories, pageLikeCount | Advertiser metadata when exposed |
caption, linkDescription | Creative caption/display domain and destination description |
callToActionType, displayFormat | Machine-readable CTA and creative format |
collationId, collationCount | Related creative grouping when exposed |
currency, spend, impressions | Political/EU transparency metadata when exposed |
videoUrls, videoPreviewUrls | Public media and preview URLs found in the response |
transcriptAvailable | Whether explicit transcript/caption evidence was exposed |
transcriptText, transcriptSegments | Meta-exposed text and normalized timestamped segments |
transcriptSourceFields | Exact Meta response paths that supplied transcript evidence |
diagnostics | Optional notes about extraction and missing transcript fields |
Output quality
Rows are deduplicated by ad archive ID.
Dates are normalized to ISO date strings.
Arrays are used for media URLs because carousel/video ads can expose multiple assets.
Null values mean Meta did not expose that field for the specific ad. Spend and impression fields are commonly absent from commercial ads and are most often available for regulated political or EU transparency records.
Run summary and partial failures
Every run writes SUMMARY to the default key-value store. It contains successfulTasks, failedTasks, savedAds, and a per-input status/error list. In a mixed-input run, valid inputs still produce dataset rows while failed inputs remain machine-readable in this summary. If no usable rows are produced, the run fails with an actionable error instead of silently succeeding.
For archive-ID inputs, the actor only accepts the requested ID from Meta's response; it never substitutes an unrelated creative.
How to use it
- Open the actor on Apify.
- Enter competitor keywords, Ads Library URLs, or ad archive IDs.
- Keep
maxAdssmall for the first run. - Run the actor.
- Export the dataset as JSON, CSV, Excel, or via API.
- Filter rows where
transcriptAvailable=truefor transcript-ready creatives. - Send rows with only
videoUrlsto your ASR pipeline if needed.
Tips for better results
Use specific brand or product keywords.
Use activeStatus=active for current market research.
Use activeStatus=all for historical creative analysis.
Use mediaType=video for transcript workflows.
Disable requireTranscript if you also want video URLs and creative copy.
Enable requireTranscript only when you need a transcript-only dataset.
Integrations
Use this actor with:
- Google Sheets for competitor swipe files
- Airtable for creative review boards
- Slack alerts for new competitor ads
- BI dashboards for messaging trends
- Whisper or another ASR actor for videos without exposed transcripts
- LLM tools for hook, offer, and CTA classification
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/facebook-ads-transcript-scraper').call({searchQueries: ['fitness app'],country: 'US',mediaType: 'video',maxAds: 10});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/facebook-ads-transcript-scraper').call(run_input={'searchQueries': ['fitness app'],'country': 'US','mediaType': 'video','maxAds': 10,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~facebook-ads-transcript-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchQueries":["fitness app"],"country":"US","mediaType":"video","maxAds":10}'
MCP usage
Claude Code
$claude mcp add --transport http apify-facebook-ads-transcripts https://mcp.apify.com/?tools=automation-lab/facebook-ads-transcript-scraper
Claude Desktop
Add this remote server in your MCP configuration:
{"mcpServers": {"apify-facebook-ads-transcripts": {"url": "https://mcp.apify.com/?tools=automation-lab/facebook-ads-transcript-scraper"}}}
Cursor
Add the same server URL under Settings β Tools & MCP β New MCP server.
VS Code
Add the same server URL to your workspace MCP server configuration and enable the server before prompting your coding agent.
Example prompts:
- "Find active video ads for meal prep apps and summarize the hooks."
- "Export Facebook ad video URLs for this competitor keyword."
- "Show only ads where transcriptAvailable is true."
AI and external services
The actor does not call an AI model and does not perform speech-to-text. It accesses the public Meta Ads Library through Apify's execution and residential-proxy infrastructure. Meta receives the requested public search/detail request; no Meta login or user-supplied third-party API key is used.
Data handling and privacy
Inputs, public ad rows, the SUMMARY record, and operational logs remain in the user's Apify run storage and follow that account's retention settings. Browser cookies and proxy sessions are ephemeral to the run. The actor does not download video files, create an external cache, or send data to an AI provider. Users can delete runs and associated storage through Apify Console/API controls.
Legality and ethical use
This actor extracts publicly available Meta Ads Library data.
Respect Meta terms, privacy rules, and local laws.
Do not use scraped data for harassment, discrimination, or unlawful profiling.
FAQ
Does it always return a transcript?
No. Meta does not expose transcript-like fields for every video ad. The actor returns transcriptAvailable=false when only video URLs and creative copy are available.
Can I use the video URL with another transcription tool?
Yes. Use videoUrls for downstream ASR workflows when Meta does not expose transcript text directly.
Troubleshooting: no results
If a query returns no rows, try a broader keyword, a different country, or activeStatus=all.
Facebook may also temporarily block or throttle a session.
Troubleshooting: no transcripts
Many video ads expose only the video URL and ad copy.
That is normal.
Use transcriptAvailable and diagnostics.extractionNotes to understand what happened.
Related scrapers
Related automation-lab actors:
- https://apify.com/automation-lab/facebook-ads-library
- https://apify.com/automation-lab/meta-ad-library-page-resolver
- https://apify.com/automation-lab/google-ads-transparency-center-scraper
- https://apify.com/automation-lab/pinterest-ads-library-scraper
Best practices
Start with 10 to 25 ads.
Validate output fields.
Increase limits only after confirming the query returns useful creatives.
Run separate jobs for separate competitors so datasets stay easy to compare.
Data retention
Apify stores run datasets according to your account settings.
Export or integrate important results into your own systems.
Support
If a public Ads Library URL fails repeatedly, include the run ID and input when reporting the issue.
Changelog
Initial version: keyword, Ads Library URL, and ad archive ID inputs with creative metadata, media URLs, transcript availability flags, and diagnostics.