100 free credits on signup · no card required

TikTok Transcript API

One URL in. Clean JSON out.

Give this endpoint a TikTok video URL and it returns the spoken words as plain text, plus the language it detected. It reads the captions TikTok already carries for the video — there is no speech-to-text step, so a video with no captions returns a 404 rather than a guess. 8 credits per video, and every transcript is stored permanently, so the second call for the same video is free of upstream work and comes back in milliseconds.

Credits 8 / video
Input ?url=
Cache
GET · BEARER
Request composing…
Cached forever
same bytes every call
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="css-1qb2n7d-DivItemContainer e148ts220" data-e2e="recommend-list-item"><div class="css-x6y88p-DivContainer"><a class="css-1g95xhm-AVideoContainer" href="/@tiktok/video/7231338487075638570"><video src="blob:https://www.tiktok.com/8f3a..."></video></a></div><div class="css-1f5bbrz-DivCardFooter"><strong data-e2e="video-views" class="css-ws4x78">1.2M</strong><strong data-e2e="like-count">88.4K</strong><strong data-e2e="comment-count">2,314</strong></div><h3 class="css-1yy6f0h">Behind the scenes of our new feature</h3><script id="__UNIVERSAL_DATA_FOR_REHYDRATION__" type="application/json">{"__DEFAULT_SCOPE__":{"webapp.video-detail"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 4 typed fields
{
"data": {
"platform": "tiktok",
"entity_id": "7231338487075638570",
"language": "en",
"source": "subtitles",
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": [
{
"start": 0,
"end": 3.2,
"text": "Today I want to show you the three settings"
},
{
"start": 3.2,
"end": 5.9,
"text": "everyone ignores when they set this up"
}
]
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 One object per video

One object per video. The main payload is `text`: the whole spoken track as a single continuous string, punctuation and casing as the caption track had them. Most TikToks are under a minute, so this is usually a few hundred words — small enough to drop straight into a prompt, a search index, or a database column without chunking.

02 Language and provenance included

Alongside the text you get `language` (a short code TikTok assigns to the caption track) and `source`, which tells you which leg of the pipeline produced the transcript. There is also a `segments` field for timestamped chunks. Read the gotcha below before you build against it: on TikTok it is currently null in practice, because caption tracks arrive as flat text with the timing already stripped.

03 Cached forever, by design

Transcripts belong to the immutable cache class. A video's spoken words do not change after posting, so once we have transcribed it we keep it forever and never re-fetch. That is why this is one of the few endpoints where repeat traffic is genuinely cheap on our side, and why `fresh=true` does almost nothing here.

Field explorer Pick a key to see its type and the caveats.
string Always set Per item
source

Which leg produced the transcript: "upstream" for a platform caption track. Always present, on fresh pulls and on responses served from the stored transcript corpus alike.

{
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": [ … ],
"language": "en",
"source": "subtitles"
}
Good fit

Reach for this when

  • Feeding TikTok content into an LLM — summarising, classifying, tagging or answering questions about a video without downloading and processing the video yourself.
  • Building a searchable archive of a creator's or a competitor's catalogue, where you want to find every video that mentioned a product name or a claim.
  • Compliance and brand-safety review, where someone has to know what was actually said in a video before it gets amplified or paid for.
  • Accessibility and repurposing work: turning a video into a blog draft, a newsletter section, or subtitles for a re-upload elsewhere.
  • Keyword research at the script level, checking which phrases recur across the videos that performed in your niche.
Different job?

There's an endpoint for that

  • You want the summary rather than the raw words — use the TikTok Summary API, which runs this transcript through a model and returns a short summary plus key points in one call.
  • You want view, like, comment, share and save counts — that is the TikTok Video Stats API, and it is much cheaper per call.
  • You want what the audience said, not what the creator said — the TikTok Comments API returns comment text with authors and like counts.
  • You are starting from a handle rather than a list of video URLs — pull the catalogue with the TikTok Channel Videos API first, then send the URLs here.

Pricing

Start free, pay for what comes back

One transcript is 8 credits — about 4¢ on the monthly plan. $5 covers roughly 125 videos, and failed calls are never charged.

Estimate your bill
$24/ month
30 videos/day × 8 credits × 365 days = 87,600 credits/yr, or $282/yr on the annual plan plus 76 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 87,600
Plan Annual $54/yr
Per video

Estimate only, on a full-year basis. 8 credits per returned video. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

This is the single most important thing to know before you build. We read the caption track the platform already publishes for a video. We do not download the audio and run recognition over it. If TikTok has no caption track for a video, there is nothing to read and the call returns 404 with `not_found`.

In practice TikTok's automatic captioning covers a large share of spoken-word video, which is why this endpoint is worth having on TikTok specifically. Coverage is much thinner on Facebook and X, where the platforms rarely carry captions at all — if you are planning a cross-platform pipeline, expect a materially higher miss rate there and design the fallback before you ship.

A miss is not a partial result. You either get a transcript or you get an error, and errors are not charged.

The response has a `segments` field and it is typed as an array of { start, end, text }, but caption tracks reach us as flat text with the per-cue timing already flattened out. That means TikTok responses carry `segments: null`. If your feature depends on jumping to the 14-second mark, this endpoint will not get you there right now.

The field is not decorative — it is populated when a transcript comes from the audio-recognition leg of the pipeline, which is disabled in the current subtitles-only configuration. Code for null and you will not have to change anything if that changes.

Once transcribed, a video's text lives in a permanent corpus. Repeat calls for the same video are served from there and return in milliseconds. `fresh=true` will not force a re-transcription of a video we already hold, because the spoken content of a published video does not change.

The flip side: a cache hit still costs 8 credits. If you are re-reading the same videos in a loop, store the text on your side after the first call rather than paying us to hand you the same string back.

The text comes back in whatever language was spoken. We do not translate it and we do not tidy it. Auto-generated captions carry the usual artefacts: mis-heard proper nouns, no speaker labels, missing punctuation on fast delivery, and brand names spelled the way they sound. For search and LLM input that is fine. For anything you are going to publish verbatim, budget for a human pass.

There is no batch mode. Send calls concurrently — they are independent and the API is built for parallel traffic. Short links from the app (vm.tiktok.com, vt.tiktok.com) are accepted and resolved for you, so you can pass whatever the share sheet produced.

Questions

Frequently asked

Send a GET request to /v1/tiktok/transcript with the video URL and your API key. You get back JSON containing the spoken text and its language. No TikTok developer account, no OAuth, no app review. The endpoint reads the public caption track for the video, which is the same thing you would see if you turned captions on while watching it.

It reads the captions. There is no speech recognition running behind this endpoint at present, so if TikTok has not generated a caption track for a video, you get a 404 rather than a transcript. TikTok auto-captions most spoken-word video, so coverage is good in practice — but plan for misses, especially on music-led or wordless clips.

Because the caption track arrives as flat text with the per-cue timings already stripped. The segments field exists in the schema and is filled by the audio-recognition path, which is not active in the current subtitles-only setup. Every TikTok response today carries segments: null. If your product needs timestamped jump points, this endpoint does not yet provide them.

8 credits per video. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so one transcript is about 4 cents and $5 covers roughly 125 videos. Cached transcripts cost the same 8 credits as fresh ones. Calls that fail — including 404s where no caption track exists — are never charged.

Whatever language the video's caption track is in. We return the text as published and a language code alongside it, with no translation step. If you need English output from a Spanish video, run the returned text through a translation model on your side. The language field is null when TikTok's track carries no language tag.

No. We read public content, logged out, with no session. Private, deleted and region-restricted videos return an error and are not charged. There is no setting, plan or parameter that changes this — if you cannot open the video in a browser without logging in, the API cannot read it either.

As accurate as TikTok's own captions, which is usually good for clear speech and noticeably worse for fast delivery, heavy accents, background music, and brand or product names. There are no speaker labels. Treat the output as reliable enough to search, classify and summarise, and not reliable enough to quote verbatim in something you publish.

Next

Pairs well with

Full TikTok API reference →
/v1/tiktok/summary
TikTok Summary API Short AI summary of a TikTok video, built on its transcript. 10 cr / video
/v1/tiktok/stats
TikTok Stats API Views, likes, comments and shares for a single TikTok video. 3 cr / video
/v1/instagram/transcript
Instagram Transcript API Full transcript of an Instagram reel with timestamped segments. 40 cr / reel
/v1/tiktok/channel-videos
TikTok Channel Videos API Latest videos from a TikTok account with per-video metrics. 3 cr / video

More TikTok endpoints

/v1/tiktok/summary Short AI summary of a TikTok video, built on its transcript. 10 credits / video /v1/tiktok/stats Views, likes, comments and shares for a single TikTok video. 3 credits / video /v1/tiktok/comments Paginated comments on a TikTok video; charged per comment returned. 2 credits / comment /v1/tiktok/channel-stats Follower counts and profile metadata for a TikTok account. 3 credits / profile /v1/tiktok/channel-videos Latest videos from a TikTok account with per-video metrics. 3 credits / video /v1/tiktok/search Keyword search over TikTok videos. 4 credits / result /v1/tiktok/hashtag-search Videos posted under a TikTok hashtag. 3 credits / result /v1/tiktok/download Resolves a downloadable media URL for a TikTok video (URL expires within 1h). 7 credits / video

Try the TikTok Transcript endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/tiktok/transcript
Get your free API key