Back to Blog
Marketing

How to Get the Transcript of Any Facebook (Meta) Video Ad

August 2, 2026
5 min read
S
By SociaVault Team
Facebook AdsMeta AdsAd LibraryTranscriptCreative Research

How to Get the Transcript of Any Facebook (Meta) Video Ad

The Meta Ad Library shows you every video ad a competitor is running, which is great, until you realize "watching" isn't "analyzing." The single most valuable part of a video ad is the script: the hook in the first three seconds, the claims, the offer, the call to action. That's the part you actually want to study, compare, and learn from. But you can't search a video, and nobody's going to sit through 200 competitor ads with a notepad.

So we shipped an endpoint that returns the transcript of a Meta Ad Library video ad, and it only charges you when there's actually a transcript to return. Here's how to use it for real creative research.

The endpoint (and the fair billing)

Give it either the ad id or the ad url, and it returns the transcript text. Base URL https://api.sociavault.com/v1, x-api-key header, payload under data:

const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = "https://api.sociavault.com/v1";

async function adTranscript({ id, url }) {
  const qs = new URLSearchParams(id ? { id } : { url }).toString();
  const res = await fetch(
    `${BASE}/scrape/facebook-ad-library/ad/transcript?${qs}`,
    { headers: { "x-api-key": API_KEY } },
  );
  if (!res.ok) throw new Error(`Request failed: ${res.status}`);
  return await res.json();
}

const result = await adTranscript({ id: "1165355941320467" });
console.log(result.data.transcript);
console.log("charged:", result.credits_used); // 0 when no transcript exists

Here's the part worth knowing: credits are only charged when a transcript is returned. If the ad is an image, or its video has no transcript available, the call comes back with credits_used: 0, you don't pay to find out there's nothing there. That matters a lot when you're sweeping hundreds of ads, plenty of which won't have transcripts.

The response carries transcript (the text), transcript_available (a boolean), plus ad_id and url so you can tie each transcript back to its ad. Branch on the flag:

import os, requests

API_KEY = os.environ["SOCIAVAULT_API_KEY"]
BASE = "https://api.sociavault.com/v1"

def ad_transcript(ad_id=None, url=None):
    params = {"id": ad_id} if ad_id else {"url": url}
    r = requests.get(f"{BASE}/scrape/facebook-ad-library/ad/transcript",
                     headers={"x-api-key": API_KEY}, params=params, timeout=60)
    r.raise_for_status()
    body = r.json()
    data = body.get("data", {})
    if not data.get("transcript_available"):
        return None            # no transcript; you weren't charged
    return data.get("transcript")

Turning ad scripts into creative intelligence

Transcripts are only useful if you do something with them. The workflow that pays off:

  1. Pull a competitor's ads from the Ad Library (the company-ads and search endpoints give you the ad IDs).
  2. Fetch the transcript for each video ad by id.
  3. Analyze the scripts together. Now you can do the things video makes impossible: compare hooks (what's in everyone's first sentence?), spot the offers and claims that recur, and see which angles a competitor keeps re-running, a strong signal those ads are working.

Pull this across several competitors and you've built a searchable corpus of what's actually being said in your category's paid video, which is a different and deeper layer than the creative screenshots most ad-spy tools stop at. It slots right into a broader cross-platform ad-spy workflow.

The honest limits

  • No transcript, no charge, but also no data. The zero-credit behavior is a billing courtesy, not a guarantee every ad has a transcript. Many won't (image ads, videos without available captions), and you simply get nothing back for those.
  • It returns available transcripts, not fresh speech-to-text. This surfaces the transcript tied to the ad rather than transcribing the audio itself. If none is available, the response says so.
  • Auto-generated text is imperfect. Expect the usual caption quirks with machine transcripts. Fine for analysis and search; proofread before quoting.
  • Creative, not performance. A transcript tells you what an ad says, not how it performed. The Ad Library exposes no spend or results, so how long an ad has been running remains your best proxy for "working."
  • Public ads only. This is competitive research on publicly listed ads, consistent with collecting only public data.

Frequently Asked Questions

How do I get the script of a Facebook or Meta video ad?

Pass the ad's id or url to the ad transcript endpoint. It returns the transcript text in data.transcript when one is available, along with a transcript_available flag and the ad_id/url so you can map it back to the ad.

Do I get charged if an ad has no transcript?

No. Credits are only charged when a transcript is actually returned. If the ad has no available transcript (for example an image ad), the response comes back with credits_used: 0, so sweeping many ads doesn't rack up charges for empty results.

Can I look up an ad by URL instead of ID?

Yes. Provide either the id or the url, whichever you have. Both resolve to the same ad; you don't need both.

Is this transcribing the ad's audio?

It returns the transcript available for the ad rather than running its own speech-to-text on the audio. When no transcript is available, transcript_available is false and you aren't charged.

How do I analyze many competitor ads at once?

Pull a competitor's ads from the Ad Library to collect ad IDs, then request the transcript for each video ad and analyze the scripts together, comparing hooks, offers, and recurring angles. Long-running ads are your best signal for which scripts are working.

How accurate are the transcripts?

When machine-generated, expect typical auto-caption issues (misheard words, light punctuation). They're reliable for search and analysis but should be proofread before you quote them verbatim.


Want to read your competitors' ad scripts instead of watching them one by one? Start free with 50 credits, no card required and pull your first ad transcript today, you only pay when there's one to read.

Found this helpful?

Share it with others who might benefit

Ready to Try SociaVault?

Start extracting social media data with our powerful API. No credit card required.