Skip to content

Recipe: transcribe a channel

Goal: the full transcript set of a creator’s recent videos, ready for search or an LLM. Two endpoints: channel-videos to enumerate, transcript per video.

The loop

import httpx
BASE = "https://api.scrapersocial.com/v1"
H = {"Authorization": "Bearer sk_live_..."}
def channel_videos(handle: str, limit: int = 50):
# One call returns the latest videos, up to 50. There is no cursor.
r = httpx.get(f"{BASE}/tiktok/channel-videos",
params={"handle": handle, "limit": limit},
headers=H, timeout=120)
r.raise_for_status()
return r.json()["data"]
transcripts = {}
for video in channel_videos("tiktok"):
t = httpx.get(f"{BASE}/tiktok/transcript",
params={"url": video["url"]}, headers=H, timeout=120)
if t.status_code == 404: # no caption track; not charged
continue
t.raise_for_status()
transcripts[video["id"]] = t.json()["data"]["text"]

Credit math

50 videos listed (1 credit each) + 50 transcripts (2 credits each) = 150 credits — about $0.75 at the monthly rate. Videos without captions return 404 and cost nothing, so the real total is usually lower.

Notes

  • channel-videos returns one batch of up to 50 videos, newest first, with no cursor. Pinned videos can appear out of order, so sort on posted_at if order matters.
  • Transcripts are cached forever, so re-running the loop is fast for already-seen videos (same credits, millisecond responses).
  • Prefer format=text if you’re piping straight into a prompt.
  • For Instagram, swap in instagram/channel-reels and instagram/transcript. Instagram transcripts are priced per started minute (1 credit + 20 per minute), so a 50-reel run costs far more than TikTok’s. Facebook and X transcript calls currently return 404.

Related: Pagination · Content repurposing use case