SocialCrawl

TikTok

TikTok profiles, videos, comments, replies, single-comment lookup, search, trending, sounds, transcripts, and on-screen text through one unified API

TikTok

TikTok accounts and their videos, the comment section down to a single named comment, three flavours of search, per-country trending, sound-level discovery, spoken transcripts, and the text burned into the frame.

Looking for commerce data? TikTok Shop products, reviews, and creator showcases now live on the dedicated TikTok Shop API.

Base URL: /v1/tiktok/...

Comments have several endpoints (one page via /v1/tiktok/post/comments, the whole nested thread via /v1/prism/comments, a single comment via /v1/tiktok/comment). See Which endpoint should I use?.

How do I get started with TikTok data?

1. Fetch a profile

curl "https://www.socialcrawl.dev/v1/tiktok/profile?handle=charlidamelio" \
  -H "x-api-key: sc_your_api_key_here"

2. Fetch their content

curl "https://www.socialcrawl.dev/v1/tiktok/profile/videos?handle=charlidamelio" \
  -H "x-api-key: sc_your_api_key_here"

3. Read computed fields

When an endpoint supports a computed field and the required source inputs are present, the unified response includes that optional field. Depending on the endpoint, optional fields can include engagement_rate, language, content_category, and estimated_reach. See Computed fields for formulas, clamping rules, and null semantics.

Accounts

  • GET /v1/tiktok/profile (1cr) — display name, bio, the unrounded integer follower count on author.followers (when the source exposes it; otherwise the public rounded figure with author.ext.followers_approximate: true), like counts, verification, and the numeric user_id. Takes handle or user_id; one is required.
  • GET /v1/tiktok/profile/videos (1cr) — a page of an account's recent public videos with captions, view/like/comment/share counts, and thumbnails. Pages with max_cursor.
  • GET /v1/tiktok/profile/full (5cr) — the profile, its recent videos, and computed metrics (average engagement rate, posting cadence with its measurement window, top post, format mix) in one call instead of three. posts sets the window, 1-100, default 25.
  • GET /v1/tiktok/user/followers (1cr) — who follows this account, paged. Takes handle or user_id.
  • GET /v1/tiktok/user/following (1cr) — the reverse. This one returns a single page only, unlike followers, which pages in full.
  • GET /v1/tiktok/user/audience (5cr) — where a creator's followers are: top countries with sampled counts and each country's share. Geography only. Age and gender are not publicly available on TikTok, or on any other platform, so no endpoint here returns them.
  • GET /v1/tiktok/profile/region (1cr) — just the two-letter country code for an account, when routing or de-duplicating by market is all you need.
  • GET /v1/tiktok/user/live (1cr) — the account's live room in TikTok's own shape: cover, title, start time, status code, viewer and entry counts, stream ids, and the host's profile. Check status and the start time yourself — a room can still be returned after the broadcast has ended.

Videos, comments, and threads

  • GET /v1/tiktok/post (1cr) — one video in full from its url: caption, engagement, author, sound, and video metadata. download_media=true adds direct media URLs.
  • GET /v1/tiktok/post/comments (1cr) — a page of the comment section, each row with username, text, like count, reply count, and timestamp. Pages with cursor.
  • GET /v1/tiktok/video/comment/replies (1cr) — one thread opened up. It needs both the comment_id from the previous call and the same video url.
  • GET /v1/tiktok/post/transcript (10cr) — the spoken words from the video's captions. use_ai_as_fallback=true transcribes when TikTok has no caption track.
  • GET /v1/tiktok/video/screen-text (5cr) — the text shown on the video: native text stickers plus AI OCR of the cover frame, so captions burned in by an editor are caught too.

Three different texts, three different endpoints: the caption is on post, the spoken words are on post/transcript, and the on-screen overlay is on video/screen-text. post also surfaces the creator's own text-tool stickers at post.ext.on_screen_texts without the OCR pass.

# A page of comments
curl "https://www.socialcrawl.dev/v1/tiktok/post/comments?url=https://www.tiktok.com/@mrbeast/video/7654638524729216287" \
  -H "x-api-key: sc_your_api_key_here"

# Then expand one thread — comment_id AND url are both required
curl "https://www.socialcrawl.dev/v1/tiktok/video/comment/replies?url=https://www.tiktok.com/@mrbeast/video/7654638524729216287&comment_id=7654640784985211670" \
  -H "x-api-key: sc_your_api_key_here"

Finding one comment without paging the section

TikTok exposes no fetch-one-comment read, so GET /v1/tiktok/comment is implemented as a bounded server-side scan that stops the instant it finds your target. That is why it is priced flat rather than per page, and why the budget matters.

You can address the target three ways:

  • comment_url — a .../@{handle}/video/{id}?comment_id={cid} link, an m.tiktok.com share link, or a vm.tiktok.com / tiktok.com/t/ shortlink, all resolved for you. TikTok's own share sheet emits the cid base64-encoded (?cid=NzY1...); that form is accepted too and decoded automatically.
  • post_url + comment_id — the same thing in two parts. comment_id must be the numeric id; if all you have is a share link's base64 cid, pass the share link as comment_url instead. If the target is a reply, also pass parent_comment_id: a reply URL does not carry its parent, and supplying it resolves the reply directly through the native replies endpoint instead of scanning.
  • A searchpost_url plus either author_username (that person's comments) or text_contains (an exact, case-insensitive snippet), returning up to max matches (1-20, default 5).
curl "https://www.socialcrawl.dev/v1/tiktok/comment?comment_url=https://www.tiktok.com/@mrbeast/video/7654638524729216287?comment_id=7654640784985211670" \
  -H "x-api-key: sc_your_api_key_here"

Three things make it safe to call speculatively:

  • Flat 2 credits. deep_scan=true raises the page ceiling and the deadline for deeply-buried comments and bills 6 credits instead. That is the entire 2-6 range — there is nothing in between and nothing above.
  • A not-found is fully refunded. It returns 404 and costs nothing, so you can point it at a comment that may have been deleted without paying to find out.
  • Re-checks get cheap. Every response carries lookup.position_hint. Store it, pass it back on the next lookup of the same comment, and the scan probes that last-known location first.

For recurring tracking of a known set, POST /v1/prism/comment-lookup (2cr) re-checks up to 25 comments in one call with per-item found / not-found / errored / deferred status.

  • GET /v1/tiktok/search/suggestions (1cr) — autocomplete terms for a partial query, the same list the search box shows. Expand a seed here, then call search or search/top.
  • GET /v1/tiktok/search (1cr) — video-only keyword search you can page and filter with date_posted, sort_by, and region.
  • GET /v1/tiktok/search/top (1cr) — TikTok's own Top-tab relevance ranking for a keyword, rather than a recency list. Videos only; it does not include accounts.
  • GET /v1/tiktok/search/users (1cr) — accounts matching a term, with follower counts and verification.
  • GET /v1/tiktok/search/hashtag (1cr) — the feed under one tag, which is the right shape for tracking a campaign or challenge.

Follower counts next to search results

Search rows carry no follower count, but every row carries two join keys: post.author.username and post.ext.author_id, the creator's numeric user id. Either one resolves to the current follower count on author.followers through GET /v1/tiktok/profile (1cr, cached for 15 minutes): pass the username as ?handle= or the id as ?user_id=. The id survives username changes; the handle is the one that works on audience-gated accounts, so retry a 404'd id lookup as ?handle= before treating the creator as gone.

For a crawl, deduplicate creators across the whole run first — the same creators recur across keywords and you pay once per creator, not per row. POST /v1/prism/profiles resolves up to 50 usernames in one call at 1 credit per resolved profile, refunds rows that fail, and never serves from cache. Match rows to your input by each row's index.

curl "https://www.socialcrawl.dev/v1/tiktok/profile?user_id=7527113447973487646" \
  -H "x-api-key: sc_your_api_key_here"

curl -X POST "https://www.socialcrawl.dev/v1/prism/profiles" \
  -H "x-api-key: sc_your_api_key_here" \
  -H "content-type: application/json" \
  -d '{"items":[{"platform":"tiktok","handle":"charlidamelio"},{"platform":"tiktok","handle":"khaby.lame"}]}'
author.followers is the unrounded integer where TikTok exposes one; when only the rounded public figure exists the response sets author.ext.followers_approximate to true. A repeat lookup of the same account within 15 minutes replays the cached snapshot at no charge — send Cache-Control: no-cache when you need a guaranteed-fresh read.

GET /v1/tiktok/trending (5cr) requires a region and returns what is popular in that country right now. It is a fixed snapshot — no keyword, no cursor, nothing to page.

GET /v1/tiktok/song (1cr) takes a clipId and returns a sound's title, artist, duration, cover, and how many videos use it. GET /v1/tiktok/song/videos (1cr) returns the videos made with that sound, paged. Together they are how you tell a rising sound from a saturated one before you brief a creator on it.

curl "https://www.socialcrawl.dev/v1/tiktok/trending?region=US" \
  -H "x-api-key: sc_your_api_key_here"

curl "https://www.socialcrawl.dev/v1/tiktok/song/videos?clipId=7016187547651328773" \
  -H "x-api-key: sc_your_api_key_here"
TikTok's Creative Center trend endpoints — popular songs, creators, hashtags, and videos — are disabled upstream and return a 503 at no charge. GET /v1/tiktok/trending and GET /v1/tiktok/search/hashtag are the working substitutes for per-country and per-tag trend work.

Ad Library and collections

GET /v1/tiktok/adlibrary/search and GET /v1/tiktok/adlibrary/ad (5cr each) read the TikTok Ad Library, the same advanced tier as Facebook, Google, and LinkedIn ads. Search by query or advertiser_name, then pass an ad id to adlibrary/ad for the creative, landing page, and brand. GET /v1/tiktok/collection/videos (1cr) lists the public videos inside a collection URL, paged with max_cursor.

What TikTok data can I access?

25 endpoints available.

EndpointPathCredit Tier
List videos in a TikTok collection/v1/tiktok/collection/videosstandard (1cr)
Look up one TikTok comment by URL or id/v1/tiktok/commentstandard (2-6cr)metered
Get TikTok post details/v1/tiktok/poststandard (1cr)
List TikTok post comments/v1/tiktok/post/commentsstandard (1cr)
Get TikTok user profile/v1/tiktok/profilestandard (1cr)
TikTok profile, recent posts, and computed analytics in one call./v1/tiktok/profile/fullstandard (5cr)
Get TikTok profile region/v1/tiktok/profile/regionstandard (1cr)
List TikTok user videos/v1/tiktok/profile/videosstandard (1cr)
Search TikTok videos by keyword/v1/tiktok/searchstandard (1cr)
Search TikTok by hashtag/v1/tiktok/search/hashtagstandard (1cr)
Get TikTok search suggestions/v1/tiktok/search/suggestionsstandard (1cr)
TikTok top search results/v1/tiktok/search/topstandard (1cr)
Search TikTok users/v1/tiktok/search/usersstandard (1cr)
Get TikTok song details/v1/tiktok/songstandard (1cr)
List TikTok videos using a song/v1/tiktok/song/videosstandard (1cr)
List TikTok user followers/v1/tiktok/user/followersstandard (1cr)
List TikTok user following/v1/tiktok/user/followingstandard (1cr)
Get TikTok user live stream/v1/tiktok/user/livestandard (1cr)
List TikTok comment replies/v1/tiktok/video/comment/repliesstandard (1cr)
Get a TikTok Ad Library ad/v1/tiktok/adlibrary/adadvanced (5cr)
Search the TikTok Ad Library/v1/tiktok/adlibrary/searchadvanced (5cr)
Get TikTok trending feed/v1/tiktok/trendingadvanced (5cr)
Get TikTok user audience demographics/v1/tiktok/user/audienceadvanced (5cr)
Get TikTok video on-screen text/v1/tiktok/video/screen-textadvanced (5cr)
Get TikTok video transcript/v1/tiktok/post/transcriptpremium (10cr)

TikTok Shop endpoints (product details, reviews, products, search, and creator showcases) moved to the dedicated TikTok Shop API under /v1/tiktokshop/.... The old /v1/tiktok/shop/* and /v1/tiktok/user/showcase paths still resolve for backward compatibility.

What should I know about TikTok data?

  • All endpoints use GET method with query parameters
  • Authentication via x-api-key header
  • Responses follow the unified SocialCrawl schema
  • profile, user/followers, and profile/full take handle or user_id; post, post/comments, post/transcript, and video/screen-text take the video url; the sound endpoints take clipId
  • region on profile/videos, post, search, search/top, and search/hashtag routes the request through that country, which changes what TikTok serves. trending requires it
  • trim=true on most list endpoints returns a lighter payload at the same price

Official TikTok Resources