Docs menu

Facebook video transcript

Beta GET /v1/facebook/post/transcript

GET /v1/facebook/post/transcript

Transcript of a video post or reel: existing captions first, otherwise AI transcription of the audio.

  • Cost: 1 credit for captions; AI transcription 1 up to 2 minutes, then 1 per started minute
  • Status: Beta. Built and tested against recorded responses; the shape may still gain fields.
  • Cache: Results are kept up to 30 days; send max_age_days to reuse them for free.
  • Timeout: A request still running after about 25 seconds answers 202 with a job to poll (Batch and jobs).

Parameters#

NameTypeRequiredDescription
urlURLyesPost, video or reel URL. Accepted hosts: facebook.com, fb.com, fb.watch.

Every request also accepts:

  • trim: true for a smaller response without null fields and extra.
  • raw: true to also get the platform's original object as raw.
  • max_age_days: accept a cached result up to this many days old, for 0 credits (Caching).

Example request#

Set your key in the environment first (see Authentication).

curl
curl -G "https://api.socialscrape.io/v1/facebook/post/transcript" \
  -H "x-api-key: $SOCIALSCRAPE_API_KEY" \
  --data-urlencode "url=https://www.facebook.com/reel/1803909017420449/"
Python
import os
import requests

params = {
    "url": "https://www.facebook.com/reel/1803909017420449/",
}
res = requests.get(
    "https://api.socialscrape.io/v1/facebook/post/transcript",
    headers={"x-api-key": os.environ["SOCIALSCRAPE_API_KEY"]},
    params=params,
)
body = res.json()

if body["ok"]:
    print(body["data"])
else:
    print(body["error"]["code"], body["error"]["message"])
TypeScript
const url = new URL("https://api.socialscrape.io/v1/facebook/post/transcript");
url.search = new URLSearchParams({
  "url": "https://www.facebook.com/reel/1803909017420449/"
}).toString();
const res = await fetch(url, {
  headers: { "x-api-key": process.env.SOCIALSCRAPE_API_KEY! },
});
const body = await res.json();

if (body.ok) {
  console.log(body.data);
} else {
  console.error(body.error.code, body.error.message);
}
n8n
{
  "nodes": [
    {
      "name": "SocialScrape Facebook video transcript",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        0,
        0
      ],
      "parameters": {
        "method": "GET",
        "url": "https://api.socialscrape.io/v1/facebook/post/transcript",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "https://www.facebook.com/reel/1803909017420449/"
            }
          ]
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "={{ $env.SOCIALSCRAPE_API_KEY }}"
            }
          ]
        }
      }
    }
  ],
  "connections": {}
}

Example response#

This is a sample from a recorded response, lists and long text are shortened. Status 200.

{
  "ok": true,
  "credits_charged": 1,
  "credits_remaining": 4999,
  "cached": false,
  "cached_at": null,
  "request_id": "req_d2d91dc1cdb2346c2edf20f6",
  "data": {
    "object": "transcript",
    "platform": "facebook",
    "video_id": "1803909017420449",
    "url": "https://www.facebook.com/reel/1803909017420449/",
    "language": "en-US",
    "source": "auto_captions",
    "duration_seconds": 59.861,
    "text": "But the standard that we should continuously aspire to exceed, which is why we are bringing that intensity, that discipline, that engineering ownership back to NASA, because great nations do not remain great by being caretakers of history,...",
    "segments": [
      {
        "start": 0.033,
        "end": 4.0,
        "text": "But the standard that we should continuously aspire to exceed,"
      },
      {
        "start": 4.0,
        "end": 7.166,
        "text": "which is why we are bringing that intensity, that discipline, that"
      },
      {
        "start": 7.166,
        "end": 11.4,
        "text": "engineering ownership back to NASA, because great nations do not remain great"
      }
    ],
    "available_languages": [
      "en-US"
    ],
    "extra": null
  },
  "cursor": null,
  "has_more": null
}

Response#

A Transcript object in data.

See Data models for every field. The envelope around data is described in Responses.

Errors#

Failures are free: credits_charged is 0. Branch on error.code, never on the message.

CodeHTTPRetryMeaning
invalid_params400noA parameter is missing, unknown or has the wrong type.
unsupported_url400noThe URL is not one this endpoint accepts (wrong platform or form).
not_found404noThe platform says this profile, post or item does not exist.
transcript_unavailable404noNo captions exist and AI transcription is not possible for this media.

Every request can also fail with the account and platform errors listed on the Errors page.

Example error:

{
  "ok": false,
  "error": {
    "code": "transcript_unavailable",
    "message": "No captions exist and AI transcription is not possible for this media.",
    "retryable": false
  },
  "credits_charged": 0,
  "request_id": "req_efe140022d84117cb256b574"
}