Skip to main content
TikTok

TikTok Scraper API
profiles and videos, exact counts

Send a TikTok profile or video link and get the data back as JSON: exact follower, like and video counts, the latest videos with plays, likes, comments, shares and saves, plus the sound, subtitles and media links.

You sendwww.tiktok.com/@nba
ProfileVideos1 credit
You get back (real run, trimmed)
{
"username": "nba",
"nickname": "NBA",
"verified": true,
"followers": 27306047,
"likes": 1167106918,
"videoCount": 24380,
"recentVideos": [
{
"description": "8-year-old @Stephen Curry hooping in Reggie Miller’s Pacers jersey 🥹🔥…",
"plays": 5428,
"likes": 553,
"comments": 26,
"shares": 12
},
"… 14 more"
]
}
15

latest videos per profile page, each with its own stats

Exact

follower, like and video counts, not 27.3M

1 credit

per page, for a profile or a video

$0

for a page that can't be delivered

Every TikTok link that returns data

Copy the link from the app or your browser. Spidra works out what kind of page it is.

Profiles

The account with exact follower, following, like and video counts, and its latest videos (up to 15) with their stats.

tiktok.com/@nba

Videos

Caption, plays, likes, comments, shares, saves, reposts, hashtags, sound, subtitles and media links.

tiktok.com/@nba/video/7698146299102678303

Photo posts

Slideshow posts come back like videos, with each image of the post in the images list.

tiktok.com/@user/photo/...

Embed and player links

Embed and player links return the same full record as the video page.

tiktok.com/embed/v2/7694797676306615583

Short links

Links from the share button are followed, then read as a profile or a video.

vm.tiktok.com/... or tiktok.com/t/...

Hashtag pages

Read with a real browser, which takes about a minute, and returned as the full page in markdown without structured fields.

tiktok.com/tag/basketball

One call, every field

Point the scrape call at a TikTok link. With JSON output and no prompt, the data comes back as it is, for 1 credit and no AI cost.

Ask for markdown instead and you get the readable page as text. The structured data still comes back, in its own structuredData field next to the markdown.

import { SpidraClient } from "spidra";
 
const spidra = new SpidraClient({
apiKey: process.env.SPIDRA_API_KEY,
});
 
const result = await spidra.scrape({
urls: [{ url: "https://www.tiktok.com/@nba" }],
output: "json",
});
 
const data = result.content;
for (const v of data.recentVideos) console.log(v.description, v.plays, v.likes);
What you get for each profile and video
Account
Username, nickname, ID and secUid, bio and bio link, avatar, language and the date the account was created
Flags
Verified, private account, organization and seller
Counts
Exact followers, following, likes, videos and friends
Recent videos
Up to 15 per profile, newest first, each with the same fields as a video page
Video stats
Plays, likes, comments, shares, saves and reposts
Content
Caption, hashtags, mentions, whether it is an ad or a photo post, the photo post's images, duration, width and height
Media
Cover image, play URL, download URL and subtitle tracks as WebVTT links
Sound and place
The sound's title, author, whether it is original, duration and link, plus the country it was posted from and its language

What comes back

Real responses from Spidra, trimmed for length. Nothing here is mocked up.

Request
https://www.tiktok.com/@nba

A profile link: the account and its latest videos with exact counts.

Response (real run, October 18, 2026, trimmed)
{
"type": "profile",
"username": "nba",
"nickname": "NBA",
"id": "134941634731003904",
"bio": "The 2026-27 NBA season tips off Tuesday, Oct. 20 on NBC and Peacock! \n🏀 3:00pm/et: Celtics/Pistons \n🏀 7:00pm/et: 76ers/K…",
"verified": true,
"followers": 27306047,
"following": 267,
"likes": 1167106918,
"videoCount": 24380,
"createdAt": "2016-08-30T08:01:48.000Z",
"recentVideos": [
{
"id": "7698146299102678303",
"description": "8-year-old @Stephen Curry hooping in Reggie Miller’s Pacers jersey 🥹🔥 #NBA #Basketball #StephCurry #Warriors",
"createdAt": "2026-10-18T22:59:32.000Z",
"plays": 5428,
"likes": 553,
"comments": 26,
"shares": 12,
"saves": 14,
"hashtags": [
"nba",
"basketball",
"… 2 more"
],
"duration": 37,
"music": {
"title": "original sound",
"author": "nba",
"original": false,
"duration": 37,
"playUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-v-27dcd7-tx2/oERlTAEaVt4ia1VBPATDU3UnEvACVA5mOTAVi/…",
"id": "7698146327423257375"
}
},
{
"id": "7698108938658532639",
"description": "“I did it on purpose” 😂 #NBA #basketball #Lakers #Luka #LukaDoncic",
"createdAt": "2026-10-18T20:34:28.000Z",
"plays": 218400,
"likes": 18800,
"comments": 67,
"shares": 118,
"saves": 588,
"hashtags": [
"nba",
"basketball",
"… 3 more"
],
"duration": 7,
"music": {
"title": "original sound",
"author": "NBA",
"original": true,
"duration": 7,
"playUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-v-27dcd7-tx2/o8mVxIqbAEAfATqfAIWeqWqMt8saTqlQIoCGqI…",
"id": "7698108953515559710"
}
},
"… 13 more"
]
}

Exact counts, not 27.3M

TikTok shows rounded numbers to visitors who aren't signed in, such as 27.3M followers. Spidra returns the exact counts TikTok keeps alongside them, so a week-on-week change of a few thousand followers shows up in your data.

Play counts are the one exception. TikTok rounds large ones everywhere, so a video with over a million plays can come back as 1100000.

@nba profile (real run, trimmed)
"username": "nba",
"verified": true,
"isOrganization": true,
"followers": 27306047,
"following": 267,
"likes": 1167106918,
"videoCount": 24380,
"friends": 153

The sound, the tags and where it was posted

Each video says which sound it uses, who made it and whether it is original, so you can group videos by sound and see which ones spread. Hashtags and mentions come back as clean lists, and the country the video was posted from sits next to its language.

You also get the cover, play and download URLs and links to the subtitle tracks. These are TikTok's own media links: they expire after a while and may only play from the network that read the page, so download what you need straight away.

@nba video (real run, trimmed)
"duration": 37,
"width": 720,
"height": 1280,
"hashtags": ["nba", "basketball", "stephcurry", "warriors", "NBA"],
"mentions": ["stephencurry30"],
"music": {
"title": "original sound",
"author": "nba",
"original": false,
"duration": 37,
"id": "7698146327423257375"
},
"locationCreated": "US",
"language": "en"

What a visitor sees, and nothing more

Spidra reads TikTok the way a visitor who isn't signed in sees it. It never signs in, and it doesn't send cookies you pass for TikTok pages. That keeps the scope clear: public profiles and the videos on them.

Pages TikTok keeps for signed-in members are refused or fail free, with a message that says why.

  • Comments aren't included. TikTok doesn't show them to visitors who aren't signed in. You still get each video's comment count.
  • Search and TikTok Shop pages come back blank for visitors, so they fail and you aren't charged.
  • An account or video that doesn't exist, or was made private, fails with a clear message, also free.

Ask for the columns you want

Describe the answer as a prompt, a JSON schema or both, and it comes back in that shape. The AI reads a compact copy of the data Spidra already read, not the whole page.

Request
const result = await spidra.scrape({
urls: [{ url: "https://www.tiktok.com/@nasa" }],
prompt: "Summarise the account and its 5 most viewed recent videos.",
schema: {
type: "object",
properties: {
followers: {
type: "integer"
},
likes: {
type: "integer"
},
topVideos: {
type: "array",
items: {
type: "object",
properties: {
description: {
type: "string"
},
views: {
type: "integer"
}
}
}
}
}
},
});
What came back (real run)
{
"followers": 2103720,
"likes": 11177455,
"topVideos": [
{
"description": "Suited up. Next stop: the International Space Station. 🚀 Crew-13 is targeting liftoff today at 11:10 a.m. EDT! Watch coverage starting at 9:20 a.m. EDT on NASA+…",
"views": 1700000
},
{
"description": "Turns out you can dance in space! 🪩🕺💫🛰️ Microgravity just unlocked some new moves.",
"views": 1400000
},
{
"description": "Off Earth, working for Earth.🚀🧑‍🚀 Crew-13 is headed to the ISS to conduct research and test new technologies in microgravity!",
"views": 615200
},
"… 2 more"
]
}

This request cost 4 credits on October 18, 2026: 1 for the page plus the AI tokens. For the data as it is, use JSON output with no prompt for 1 credit.

What teams build with it

TikTok data feeds creator marketing, brand tracking and content research.

Creator vetting

Check a creator's real follower count, total likes and how their latest 15 videos performed before you sign a deal.

Brand and competitor tracking

Read the same accounts every day and chart followers, posting rate, plays and shares over time.

See the use case

Trend and content research

Group videos by sound and hashtag, compare captions, and pull subtitle tracks to work with what was said.

How Spidra compares

TikTok has several scrapers and one official research API. Some cost less per video at volume and cover more page types. Here is how they differ.

Apify (Clockworks)Bright DataTikTok Research APISpidra
PriceFrom $1.70 per 1,000 results, extras such as video download cost more$1.50 per 1,000 records, $1.30 on the $499 a month planFree, after approval (typically within 4 weeks)1 credit per page: $3.80 down to $1.99 per 1,000. A profile page includes up to 15 videos
Who can use itAnyoneAnyone, after a review of the use caseAcademic and non-profit researchers in eligible regions. No commercial useAnyone
CommentsYes, replies not guaranteedYes, by postYesNo, TikTok doesn't show them to visitors
Search and hashtagsYesYesQuery by keyword and hashtagHashtag pages as markdown, no search
OutputFixed fieldsFixed fieldsFixed fieldsFixed fields, or your own schema or prompt
Beyond TikTokThousands of other actorsOther scrapers and datasetsTikTok onlyAny website, crawl, search, PDFs, MCP

Choose Apify or Bright Data if

You need comments, search results, follower lists or more than a profile's latest videos. Academic researchers should look at the Research API first.

Choose Spidra if

You want exact counts, profiles and videos as clean records you can use as they come, and TikTok plus any other website through one API.

Competitor prices are as published on their own pages on October 17, 2026 and may have changed. Spidra prices use 1 credit per page on each plan. Sources: Apify, Bright Data, TikTok Research API.

What to know before you build

We would rather you hear the limits from us than find them in production.

  • Spidra reads TikTok as a visitor who isn't signed in. Comments, search, TikTok Shop and signed-in pages such as messages aren't available. Those requests fail and aren't charged.
  • A profile link returns the latest videos, up to 15. For an older video, send its own link.
  • Play counts are rounded by TikTok itself for large numbers. Follower, like and video counts are exact.
  • Hashtag pages go through a real browser, take about a minute and return the page as markdown without structured fields.
  • Media and subtitle links are TikTok's own. They expire and may only play from the network that read the page.
  • Profiles and videos contain personal data, and some accounts belong to minors. Handle personal data according to the privacy laws that apply to you.

What it costs

1 credit per page. Pages that can't be delivered are free. Work out your monthly volume below.

Monthly credits
9,000
Fits the Builder plan ($79/mo)

Example: reading 300 profiles a day is about 9,000 credits a month and covers up to 4,500 videos a day with their stats. Plain JSON output uses no AI tokens.

PlanPriceTikTok pages a month
Free$0up to 300 (one time)
Starter$19/moup to 5,000
BuilderPopular$79/moup to 25,000
Pro$249/moup to 125,000

Credits are shared across everything Spidra does, so the same plan covers TikTok and any other site.

Related scrapers

Same API key, same credits. See every scraper.

FAQ

Questions, answered

TikTok

TikTok's Research API is only for academic and non-profit researchers in eligible regions and excludes commercial use. The Display API covers only the account of a user who signs in to your app, and the Shop APIs need a seller's authorization. None of them serves public TikTok data to a business. Spidra reads the public profile and video pages instead, for 1 credit per page.

Send a TikTok link and see what comes back.

Get 300 free credits, no card, and read your first TikTok profile from the dashboard or the API.

Spidra is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance. TikTok is a trademark of ByteDance Ltd. Check TikTok's terms of service and the laws that apply to you before you collect data, and use the data responsibly.