All posts

How to scrape TikTok: every endpoint, one API call each

Kevin Wang
Kevin Wang
Founder, AnyAPI · June 21, 2026
tiktokscrapinghow-toapi
How to scrape TikTok: every endpoint, one API call each

If you want public TikTok data, TikTok's own APIs won't give it to you: the useful one is gated to academics, the rest only reach your own account. So you reverse-engineer the private web endpoints and maintain them against a target that re-signs its requests whenever it feels like it. I ran all 26 TikTok endpoints in the AnyAPI catalog against live public data. One POST each; here is what each call returns, how fast, and what it costs.

Why TikTok's own APIs don't help

TikTok has three official APIs, and none of them let you pull arbitrary public data:

  • Research API is the closest fit, and it is gated hard. You apply with an academic affiliation and a research proposal, approval is limited to nonprofit universities in the US and Europe, it bars commercial use, and it caps how much you can query. If you are building a product, you will not get in.
  • Display API is OAuth into a user's own account. It returns the authorized user's videos and profile and nothing else, so it is useless for looking up an arbitrary creator, hashtag, or competitor.
  • Marketing API manages campaigns on your own advertiser account. It writes ad spend and reads your own performance. It does not return public content.

That leaves scraping the private web endpoints yourself, and the cost is not the first request, it is keeping it alive when TikTok changes its markup and signing. That is the work most teams underestimate.

The short version
  • 26 endpoints cover profiles, videos, comments, transcripts, search, sounds, ads, and Shop. One POST each, input as JSON, normalized JSON back.
  • The median call returned in 3 seconds, and 22 of the 26 came back in under 6.
  • Almost every call costs $0.002 ($2 per 1,000). Two heavier ones cost more, noted below.
  • No browser, no proxies, no request signing. The endpoint stays our problem when TikTok changes.

The shape of every call

The pattern is identical across all 26 endpoints. POST to /v1/run/<endpoint>, pass the input as JSON, get normalized JSON back. Here is a profile lookup:

curl -X POST https://api.getanyapi.com/v1/run/tiktok.profile \
  -H "Authorization: Bearer $ANYAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"handle": "mrbeast"}'
{
  "output": {
    "found": true,
    "data": {
      "handle": "mrbeast",
      "displayName": "MrBeast",
      "followers": 128800000,
      "following": 351,
      "likes": 1300000000,
      "videos": 459,
      "verified": true,
      "bio": "Watch my latest video! 👇"
    }
  },
  "provider": "AnyAPI",
  "costUsd": 0.002,
  "items": 0
}

The data sits under output.data, and every response carries the costUsd of that exact call so you can meter spend as you go. Every endpoint follows that shape. What changes is the name after the slash and the input you send.

What you can pull from TikTok

The 26 endpoints split into six groups. Profiles and the videos under them are the bulk of it, with search, sounds, ads, and a full TikTok Shop set rounding it out.

Profiles & audience: 6 (23%)Videos & comments: 5 (19%)Search & discovery: 6 (23%)Shop: 5 (19%)Sounds: 2 (8%)Ads: 2 (8%)26endpointsProfiles & audience6 (23%)Videos & comments5 (19%)Search & discovery6 (23%)Shop5 (19%)Sounds2 (8%)Ads2 (8%)
The 26 live TikTok endpoints by category. Profiles, videos, and search are the core; Shop adds a full commerce set most TikTok scrapers skip.

Speed was consistent. I timed every call on a single cold run, no warm-up. Most answered in a few seconds.

under 2s: 66under 2s2-3s: 772-3s3-5s: 773-5s5-8s: 445-8sover 8s: 22over 8s
Response time across all 26 endpoints, one cold run each. Median 3.0 seconds. The two over 8 seconds were the hashtag video feed (a heavier crawl) and an ad detail lookup.

Profiles and audience

Start from a handle. You get the account's headline stats, its follower and following lists, the country it posts from, an audience-by-country breakdown, and live-room status.

EndpointWhat you getKey fields
tiktok.profileOne account's statsfollowers, following, likes, videos, verified, bio
tiktok.followersA page of followersusername, nickname, userId, followerCount, region
tiktok.followingWho an account followshandle, displayName, followers, region
tiktok.profile_regionThe account's countryregion, profileUrl
tiktok.audience_demographicsFollower split by countrycountry, countryCode, percentage
tiktok.liveLive room statusstatus, title, viewers, roomId, startTime

audience_demographics is the one you cannot get from the page itself. It samples followers and returns the country mix:

{ "audienceLocations": [
  { "country": "United States", "countryCode": "US", "percentage": "22.44%" },
  { "country": "Mexico",        "countryCode": "MX", "percentage": "8.67%"  },
  { "country": "Colombia",      "countryCode": "CO", "percentage": "5.56%"  }
] }

That split is what a creator-vetting tool runs on: filter a roster to accounts whose audience is actually in your market, and rank by real reach instead of raw follower count. It is also the field you cannot fake from a profile page, which is why it is worth the extra call.

Two caveats. following only returns data when the account leaves its follow list public, and a lot of large accounts hide it, so expect found: false on those. audience_demographics is the priciest call in the set at $0.052, because it samples followers to build the split.

Put those three calls behind a table and you have a creator-vetting dashboard: headline stats, audience geography, and recent performance in one view.

A creator-intelligence dashboard showing a TikTok profile's follower stats, audience-by-country bars, and a recent-videos table.
A creator-vetting dashboard, built on tiktok.profile + audience_demographics + profile_videos.

Videos and comments

From a handle you get recent uploads with their stats; from a single video URL you get its metrics, its spoken transcript, its comments, and the replies under any comment.

EndpointWhat you getKey fields
tiktok.profile_videosRecent uploads with statsurl, caption, views, likes, comments, createdAt
tiktok.videoOne video's metricsviews, likes, comments, shares, saves, region
tiktok.video_transcriptSpoken transcript (WebVTT)transcript, language
tiktok.video_commentsTop-level commentstext, likes, replies, author, createdAt
tiktok.comment_repliesReplies under a commenttext, likes, author, createdAt

profile_videos is the workhorse. Each item is a real video with engagement attached:

{
  "url": "https://www.tiktok.com/@mrbeast/video/7651447222449556767",
  "caption": "At least he got the last one 😅",
  "views": 7003422,
  "likes": 402006,
  "comments": 13149,
  "createdAt": "1781491401"
}

The transcript endpoint returns timestamped WebVTT, the spoken audio rather than the on-screen caption, which is the version you want for search or summarization. The dedicated transcript walkthrough covers this one call in depth:

{
  "language": "",
  "transcript": "WEBVTT\n\n00:00:00.000 --> 00:00:02.700\nGuess the Youtuber win $1,000..."
}

The value is in chaining them. profile_videos into video_transcript builds a searchable index of a creator's entire catalog, which is the raw material for a RAG bot, a trend tracker, or a brand-safety scan before a partnership. video_comments is where audience sentiment and unfiltered product feedback live, ready to summarize.

Run those comments through an LLM and the last point becomes an audience-feedback dashboard: sentiment, recurring themes, and the questions people keep asking, refreshed after every post.

An AI dashboard summarizing TikTok comment sentiment, top themes, and top comments for a video.
An audience-feedback dashboard: tiktok.video_comments clustered by an LLM into sentiment and themes.

Search and discovery

You do not need a handle to start. Search by keyword, by hashtag, or for accounts, pull a hashtag's video feed, or read a region's trending feed.

EndpointWhat you getKey fields
tiktok.search_keywordVideos for a querycaption, views, likes, comments, region
tiktok.search_topTop results, mixed typesauthor, caption, views, likes, url, contentType
tiktok.search_usersAccounts for a queryhandle, nickname, followers, userId
tiktok.search_hashtagVideos under a hashtagauthor, caption, views, likes, createdAt
tiktok.hashtag_videosFull hashtag feed, rich shapeplayCount, diggCount, musicMeta, authorMeta, webVideoUrl
tiktok.trending_feedA region's trending feedauthor, caption, views, likes, url, region

hashtag_videos returns a richer raw object per video: play counts, music metadata, author metadata, mentions, and effects. It is also the slowest call in the catalog, around 35 seconds on a cold run, because it crawls the feed in depth. The other five discovery endpoints return the same trimmed, normalized video shape as everything else and come back in a few seconds. Pick search_keyword when you want clean and fast, hashtag_videos when you want everything.

Together these cover social monitoring. Track a competitor's or your own brand's mentions over time, watch a niche for creators on the rise, or poll trending_feed into a daily digest of what is breaking out in a region. They are also the front of a creator-discovery pipeline: search_users to find accounts, then profile and audience_demographics to qualify them. The same two endpoints powered our study of the best time to post on TikTok across 5,311 videos.

Sounds

A clip ID, the kind in a TikTok music URL, gets you the sound's metadata and the videos using it.

EndpointWhat you getKey fields
tiktok.songA sound's metadatatitle, author, duration, videoCount, isOriginal
tiktok.song_videosVideos using a soundauthorHandle, playCount, likeCount, videoId
{ "title": "luther", "author": "Kendrick Lamar & SZA", "duration": 59, "videoCount": 1432492, "isOriginal": false }

That videoCount is the adoption number: 1.4 million videos on one sound, and song_videos lists who is driving it. Poll song on a schedule and you can chart that count over time, which is the core of a trend-detection feature that surfaces a sound before it peaks.

Ads

The TikTok ad library is public, and two endpoints wrap it: search advertiser creatives by query, then pull one ad's full detail.

EndpointWhat you getKey fields
tiktok.ad_library_searchAds matching a queryadId, adTitle, industry, objective, ctr, cost
tiktok.ad_library_adOne ad's detailadTitle, brandName, landingPage, ctr, likes, videoUrl

These wrap TikTok's public Commercial Content Library, the same ad transparency data, returned as JSON instead of a search UI.

{
  "adId": "7648438168497012743",
  "adTitle": "Don't Miss Out! Last 50 Sets at ✨$22.99",
  "objective": "campaign_objective_conversion",
  "ctr": 0.82
}

One call gives you a competitor's live creative, its campaign objective, its click-through rate, and the landing page it points at.

Run ad_library_search nightly and diff the new ad IDs, and the public ad library becomes an ad-intelligence feed of what competitors shipped this week.

An ad-intelligence dashboard showing competitor TikTok ad creatives with CTR, objective, and likes.
An ad-intelligence feed, built on tiktok.ad_library_search + ad_library_ad.

TikTok Shop

The set most TikTok scrapers skip. Search products, pull one product's detail, read its reviews, list a store's catalog, or read a creator's product showcase.

EndpointWhat you getKey fields
tiktok_shop.searchProducts for a querytitle, price, rating, soldCount, shopName, url
tiktok_shop.productOne product's detailprice, rating, reviewCount, soldCount, sellerName, sellerLocation
tiktok_shop.product_reviewsA product's reviewstext, rating, reviewerName, verifiedPurchase, createdAt
tiktok_shop.shop_productsA store's catalogtitle, price, rating, soldCount, url
tiktok_shop.user_showcaseA creator's showcased productstitle, price, rating, imageUrl, url
{
  "title": "Silicone Smartphone Case with Lip Gloss Holder",
  "price": "$16.14 - 16.99",
  "rating": 4.6,
  "reviewCount": 583,
  "soldCount": 4846,
  "sellerName": "Trendy Shop",
  "sellerLocation": "United States of America"
}

Together these cover product research and competitive pricing. search to size a category by soldCount, product and product_reviews to read demand and complaints on a single listing, shop_products to map a competitor's whole catalog, and user_showcase to see which products a creator actually pushes. With soldCount and price you can estimate a seller's revenue without leaving the call.

The Shop endpoints want a region ("US") alongside the URL. Leave it off and the product lookup returns a 502, which cost me one confused minute before I added it back.

Sort a category by that revenue estimate and you have a product-research tool, the seller's manual spreadsheet turned into a product.

A TikTok Shop product-research tool: a grid of product cards with price, rating, units sold, and an estimated-revenue figure.
A product-research grid, built on tiktok_shop.search + product + product_reviews; revenue is soldCount times price.

Chaining calls: a worked pipeline

Most jobs chain a list call into detail calls. This one goes from a handle to a folder of transcripts, three endpoints piped with jq:

# 1. recent video URLs for a creator
curl -s -X POST https://api.getanyapi.com/v1/run/tiktok.profile_videos \
  -H "Authorization: Bearer $ANYAPI_KEY" -H "Content-Type: application/json" \
  -d '{"handle": "mrbeast"}' \
  | jq -r '.output.data.videos[].url' > urls.txt

# 2. transcript for each
while read url; do
  curl -s -X POST https://api.getanyapi.com/v1/run/tiktok.video_transcript \
    -H "Authorization: Bearer $ANYAPI_KEY" -H "Content-Type: application/json" \
    -d "{\"url\": \"$url\"}" | jq -r '.output.data.transcript'
done < urls.txt

No login tokens, no proxies, no scraping logic to keep alive. The same pattern, pull a list then fetch each item's detail, works for comments, for Shop reviews, and for sounds. The dashboards above are each one of these chains behind a UI, and the 26 endpoints recombine into plenty more: a trend tracker from song and trending_feed, a transcript search engine from video_transcript, or a niche leaderboard from search_users and profile.

Why not scrape it yourself

You can, and for a one-off you probably should. For anything that has to keep running, maintenance is the real cost.

ApproachSetupBreaks whenWho maintains it
Headless browserHours to daysMarkup shifts, bot checks, signing changesYou, continuously
Unofficial libraryMinutesThe library falls behind TikTokThe maintainer, until they stop
One API callOne requestRarely, and it is our problemUs

The hidden cost of the first two is maintenance. When TikTok changes its signing scheme, the pipeline goes quiet until someone notices, usually a week after it broke.

Heads up

Scraping public data is generally permitted, but you are responsible for using it lawfully, especially anything tied to a person. Read the acceptable use policy before you ship, and do not collect data you do not have a basis to process.

Frequently asked questions

Does TikTok have an official API?

Not a general one for public data. The Research API is approval-gated and limited to vetted academics, the Display API only reaches an authorized user's own account, and the Marketing API is for advertisers. None of them let you pull an arbitrary public profile or video, which is why scraping exists.

How do I scrape TikTok without getting blocked?

The blocking problem is proxies, rotation, and request signing, and it is the part that breaks. Using a hosted endpoint moves that maintenance off your plate: you send one request and the blocking is handled upstream. If you roll your own, expect to maintain residential proxies and the signing scheme continuously.

Is there a free way to get a TikTok transcript?

Yes, for a one-off. Our free TikTok transcript tool does it in the browser with no key. For bulk or programmatic use, the tiktok.video_transcript endpoint above is one call at $0.002.

How much does it cost to scrape TikTok this way?

Almost every endpoint is $0.002 per call ($2 per 1,000). The audience-demographics call is $0.052 and the deep hashtag feed is $0.03, because both crawl more. There is no subscription; you pay per request in dollars.

Can I scrape TikTok without an account or login?

Yes. None of the 26 endpoints need a TikTok login, cookies, or a session. You send one authenticated POST with your key and get public data back. The login and session juggling is what breaks home-grown scrapers, and it is handled upstream here.

Is it legal to scrape TikTok?

Scraping public data is generally permitted, but you are responsible for using it lawfully, especially anything tied to a person. Read the acceptable use policy before you ship, and do not collect data you have no basis to process.

What data can you scrape from TikTok?

The 26 endpoints cover six groups: profiles and audience, videos and comments, search and discovery, sounds, the public ad library, and TikTok Shop. Each returns normalized JSON from one POST. The tables above list the exact fields per endpoint.

How do I scrape TikTok comments?

Post a video URL to tiktok.video_comments for top-level comments, then tiktok.comment_replies for the thread under any comment. Both return the text, author, like count, and timestamp as JSON, at $0.002 a call.

How do I scrape a TikTok hashtag?

Two endpoints. tiktok.search_hashtag returns the trimmed, fast video shape; tiktok.hashtag_videos returns the full raw object (play counts, music and author metadata) but takes around 35 seconds because it crawls the feed in depth.

Can you scrape TikTok Shop?

Yes, and it is the set most scrapers skip. Five endpoints cover product search, a single product's detail, its reviews, a store's full catalog, and a creator's showcase. Pass a region like "US" or the product lookup returns a 502.

Where do I start?

New accounts begin with free credit, so you can run any call in this post without a card. Copy the profile-lookup curl above, swap in your key, or browse the full set in the catalog.

All 26 TikTok endpoints plus 200+ other sources, one key, priced in dollars. New accounts start with free credit to run the calls in this post.

Browse the TikTok endpoints in the catalog