TikTok data.
Without the scraping.
One key returns profiles with exact follower counts, an account’s videos, keyword search, hashtag feeds, a video’s comments and its transcript — every video in the same typed shape.
Trusted by developers shipping real products.
2,555,790 served today
Request
$ curl -X POST \ https://api.fetchlayer.dev/tiktok/user-videos \ -H "Authorization: Bearer ss-your-key" \ -H "Content-Type: application/json" \ -d '{"username":"@nasa","limit":35, "sort":"popular"}'
Response
{
"profile": {
"uniqueId": "nasa",
"verified": true,
"stats": { "followerCount": 1719888,
"heartCount": 8962614, "videoCount": 45 }
},
"videos": [{
"id": "7686148096895569165",
"description": "Turns out you can dance in space!",
"createdAt": "2026-09-16T15:00:41.000Z",
"durationSeconds": 58, "isPhotoPost": false,
"stats": { "playCount": 27600, "diggCount": 4367,
"commentCount": 173, "shareCount": 104 },
"roundedStats": ["playCount"],
"music": { "title": "original sound - NASA" }
}, …34 more],
"hasMore": true, "pagesFetched": 1
} Built for feedback workflows
Fetch the public signal. Use it wherever your team works.
Exact counts, not rounded ones
TikTok publishes both the rounded figure on the page and the precise one. This returns the precise pair, so a follower count is 1719888 rather than 1.7M — which is the difference between tracking week-to-week movement and watching a number that never changes.
One video shape on every route
A search result, an account’s post and a hashtag entry are the same record: caption, timestamp, duration, cover, assets, play, like, comment, share, save and repost counts, author, music, hashtags, mentions, ad flag and language. Write the mapping once.
Hashtags and mentions, already separated
Every video arrives with its hashtags and the accounts it mentions as their own lists, as TikTok tags them on the post, each with its position in the caption. A tag written inside a word never turns up as a false positive, and a tag TikTok recorded is never missed.
Comments, with the commenter behind each one
Text, timestamps, like and reply counts, pinned and author flags, and the profile of whoever wrote it — so a comment list comes back as people you can segment, not strings you have to match up later.
Transcripts, with the translation for free
A video’s spoken words as full text plus segments timed to the second — and a video posted in another language usually carries an English track alongside its original, already timed, for the same one credit. TikTok does not transcribe everything: a video with no transcript comes back as a normal 200 saying so, and a photo carousel has no audio to transcribe at all.
Videos without the watermark
Every video carries a downloadUrl that delivers it as an MP4 without the TikTok watermark, with Range support so players can seek — and every cover and photo-carousel frame has one too, still working after TikTok’s own links expire.
Hashtag feeds, sized before you read them
A tag comes back with its own total view and video counts across TikTok alongside the videos posted under it — so you can tell a trend worth reading from one worth skipping before you spend a credit paging through it.
Any link, resolved for free
Hand /resolve-url a URL someone pasted and it tells you whether it is a video, an account, a hashtag, a sound or a search, plus the id, handle, tag or query it encodes. It costs nothing.
Size up a creator or a hashtag—then export it to CSV.
Prefer not to write code? Paste a handle or a hashtag into FetchLayer Research Chat, ask how the account is really performing or what a trend looks like, and get a clean table for the next campaign review.
- ✓Ask questions in plain English
- ✓Analyze themes, sentiment, and pain points
- ✓Download the structured results as CSV or JSON
No code or setup required · Uses your FetchLayer credits
Compare these 6 TikTok creators: exact followers, median plays per video, engagement rate, how often they post, and what share of their posts are marked as promotional. Export as CSV.
I pulled each account and its 35 most recent videos. The table gives the exact follower count, median and best play count, the like, comment and share rates against plays, posting cadence, and the share of posts flagged as ads. It is ready to download.
tiktok-creator-comparison.csv
6 creators · 9 columns · ready to download
Solutions
Build the workflow around the feedback.
The paid side of TikTok
The ads a brand is running on TikTok, the creative behind them and the advertisers themselves — a separate platform on the same key.
Explore →The other short-form feed
YouTube video comments at scale, for when a campaign runs on both and you want one comparison.
Explore →Where the discussion lands
What people say about a creator, a product or a trend once they leave the app, in threads and comment trees.
Explore →From raw feedback to action
One request is the start of the workflow.
Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.
- 01
Point at an account, term or tag
A handle, a profile URL, a keyword or a hashtag. If all you have is a link someone pasted, run it through /resolve-url first — that is free.
- 02
Read the posts
One request returns up to 500 videos across up to 20 pages, each with its full stats block, author and music. The account’s profile comes back with its videos, so that is one call, not two.
- 03
Go deeper where it matters
Pull one video in full, or read its comments to find out what people actually said. Store what you read: counts are as at the time of the request, and there is no history to go back for.
One command.
Your agent does the rest.
Use the TikTok endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.
1 Run one command, then sign in
$ npx fetchlayer
◇ Agents
│ Claude Code and Codex
◇ Signed in as you@company.com
◇ Connected
│ ✓ Claude Code ✓ Codex
It opens a sign-in page in your browser. New here? Signing in creates your free account.
2 Ask
›How is @nasa doing on TikTok, and which of their recent videos did best?
fetchlayer.tiktok_user_videos
1,719,888 followers and 8.96M total likes across 45 public videos. Their most recent post took 27,600 plays, 4,367 likes, 173 comments and 104 shares in its first hours — a like rate of about 16%. One request, one credit: the profile came back with the videos.
No key to copy and nothing to install. New accounts are free, with no credit card.
Use cases
What teams build with TikTok data.
Same API, endless applications. Here is what teams ship with TikTok profiles, videos and comments.
Creator vetting
Read a creator’s exact follower and like totals and their last fifty posts, then judge them on median plays and engagement rate rather than on the rounded number in their media kit.
Trend research
Pull the top videos under a hashtag alongside the tag’s own total view count, and see which formats, sounds and accounts are actually carrying it before you brief anything.
Competitor content tracking
Watch what rival brands post, how often, and which videos outperform the rest of their feed — with captions, durations, sounds and hashtags on every post.
Comment mining
Read the comments on the videos that took off and find the questions, objections and feature requests buyers repeat, straight from the people watching.
Campaign measurement
Follow a branded hashtag or a set of creator posts after launch and report plays, likes, comments, shares and saves per post, with the promotional flag where TikTok sets it.
Social listening datasets
Search a term on a schedule and build your own corpus of captions, hashtags and engagement counts — counts are point-in-time, so storing them is how you get a history at all.
Compare approaches
Spend time on the insight, not the collection layer.
| What you need | FetchLayer | Official API | Build it yourself |
|---|---|---|---|
| Public data with no app review | ✓ | Application required | You run the browsers |
| Exact follower and like counts | ✓ | Own account only | You parse them out |
| One record shape on every route | ✓ | Varies by endpoint | You design it |
| Partial results explained, not silent | ✓ | n/a | You detect it |
| Ready for AI and MCP workflows | ✓ | Your integration | Your integration |
FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.
Start free. Scale when ready.
Try it free, buy credits as you go, or take a monthly plan when your volume is steady.
Free
$0
30 requests
Enough to call the platforms you care about and read real responses before you pay anything.
- Every platform and endpoint
- REST and MCP
- No credit card
Pay as you go
$1.99
per 1,000
Buy credits when you need them. They stay on your account until you use them.
- Credits never expire
- No monthly commitment
- Same access as subscribers
- ∞ req/min, ∞ API keys
Monthly plan
Starter$25
per month
15,000 requests a month, about 500 a day.
$1.67 per 1,000, $5 less than credits each month
- ∞ req/min, ∞ API keys
1 page fetched is 1 credit
A normal call reads one page. Ask for more pages and each one is one more credit.
The same on every platform
No multiplier for harder targets, and no charge per result returned.
Nothing back, nothing billed
If a request does not return usable data, it costs 0 credits.
Not sure which volume fits?
15 minutes with the founder. Tell us the workload, we tell you what it needs.
Guaranteed throughput on the platform you run on
A dedicated platform from $400/mo, plus $500 for each ~21 req/s. Every other platform on the same key. 99.95% uptime, 24-hour support on Slack or Telegram.
API reference
Every parameter, documented.
All requests are POST with a JSON body and Bearer auth header.
POST /tiktok/user-videos The videos an account has posted, newest first by default, with the account’s profile alongside them — so listing an account’s posts does not also need a profile call. Sort by latest, popular or oldest, and page with a cursor.
username* string A handle with or without the @, or a profile URL limit number Maximum videos, up to 500, or -1 for the maximum. Defaults to 30; at most 35 a page. sort string 'latest' (default) | 'popular' | 'oldest' pages / cursor number | string Pages to return in one request, up to 20, or resume from a previous nextCursor. POST /tiktok/user-profile One account’s profile, by username, userId or secUid: bio, avatar, verification and organization flags, creation date, bio link, and the exact follower, following, like, video and friend counts rather than the rounded figures shown on the page.
username* string A handle with or without the @, or a profile URL POST /tiktok/search-videos Videos matching a term, in TikTok’s own ranking for it. There is no sort order and no date filter, because TikTok offers a public caller neither — passing one is a 400 rather than a parameter that is accepted and ignored.
query* string What to search TikTok for limit number Maximum videos, up to 500. Defaults to 30; about 12 a page. pages / cursor number | string Page through the result list. POST /tiktok/hashtag-videos Videos posted under a hashtag, plus the tag itself — its id, name, description, cover and its own exact view and video counts across TikTok, which is how you size a trend before deciding how much of it to read.
hashtag* string A tag with or without the #, or a hashtag URL limit number Maximum videos, up to 500. Defaults to 30; at most 30 a page. pages / cursor number | string Page through the tag feed. POST /tiktok/comments Comments on a video with text, timestamp, like and reply counts, pinned and author flags, and each commenter’s profile. replyCount reports the true reply total even where replies holds only the handful TikTok inlines.
video* string A video URL or numeric id limit number Maximum comments, up to 500. Defaults to 30; at most 50 a page. pages / cursor number | string Page through the comment list. POST /tiktok/video-detail One video in full by id or URL, in the same shape every other route returns videos in — caption, timestamp, duration, cover, assets, engagement stats, author, music, tagged accounts and hashtags, ad, paid-partnership and shop flags — plus the region it was posted from.
video* string A video URL or numeric id. Short share links are rejected — resolve them first. POST /tiktok/video-transcript The transcript TikTok publishes for a video: full text plus segments with start and end times in seconds. 68% of videos measured had one, and a non-English video usually carries a free English track alongside its original.
video* string A video URL or numeric id POST /tiktok/resolve-url What a TikTok link points to — video, account, hashtag, sound or search — plus the id, handle, tag or query it encodes. Free.
url* string Any TikTok link Fields marked * are required. Full API reference →
FAQ
Common questions.
How much does FetchLayer's TikTok API cost?
FetchLayer's TikTok API returns public TikTok profiles, videos, search, hashtag feeds, comments and transcripts as JSON over REST or MCP. A request is one page of results, and each request costs one credit: $1.99 per 1,000 requests pay-as-you-go, or $25 a month for 15,000, with 30 free requests and no card to start. A request that fails is not billed. The same key covers 36 other platforms, and every route is also a tool on FetchLayer's MCP server at https://mcp.fetchlayer.dev, for Claude, ChatGPT, Cursor and other MCP clients.
What is a TikTok API?
Here it means one HTTP endpoint that returns public TikTok data as clean JSON: an account’s profile and posts, one video in full, keyword search, the videos under a hashtag, a video’s comments, and the transcript TikTok publishes for a video. You send a handle, a URL, a term or a tag with a Bearer token, and get back typed records with captions, timestamps, durations, engagement counts, authors, music and hashtags. It is not TikTok’s own developer platform — there is no application to file, no review, and no OAuth. Everything returned is public on TikTok.
Do I need a TikTok account or developer approval?
No. You send your FetchLayer key and nothing else. There is no TikTok login, no app registration and no approval step. FetchLayer is not affiliated with, endorsed by, or sponsored by TikTok, and the TikTok name is used only to identify the platform the data comes from.
What does a video record contain?
The same fields on every route that returns videos, so code written against a search result works unchanged on an account’s posts or a hashtag feed: id, url, description (the caption), createdAt, durationSeconds, isPhotoPost, coverUrl, assets, stats with playCount, diggCount, commentCount, shareCount, collectCount and repostCount, roundedStats, author, music, hashtags, mentions, mentionedUsers, hashtagDetails, isAd, isPaidPartnership, isShoppable, createdRegion and language. Hashtags and mentions are TikTok’s own tags on the post rather than parsed out of the caption, so a tag written inside a word does not produce a false positive. A null counter means TikTok did not publish that figure; a real zero comes back as 0, and roundedStats names any count TikTok publishes only rounded.
Are the follower counts the rounded ones?
No. TikTok publishes both the rounded figure shown on the page and the precise one, and this returns the precise pair — a follower count comes back as 1719888 rather than 1.7M. That is the difference between being able to track week-to-week movement and not: a creator can gain thirty thousand followers without 1.7M changing at all. A video’s views, likes, comments and shares are a different matter: TikTok publishes those rounded once they reach 10,000, and roundedStats on each video says which ones are.
Can I search TikTok by date, or sort the results?
No, and the API says so rather than pretending otherwise. TikTok offers a public caller neither a date filter nor a sort order on search, so passing one returns a 400 naming the field instead of being accepted and quietly ignored — which would hand you the wrong data with no indication why. Search results come back in TikTok’s own ranking for the term. An account’s own videos can be sorted: latest, popular or oldest.
How does paging work?
limit caps the items returned and pages caps how many pages are fetched to get them, up to 20 in one request. A page holds at most 35 of an account’s videos, 30 of a hashtag’s, about 12 search results or 50 comments. When more exists, hasMore is true and nextCursor carries an opaque token to pass back unchanged; a cursor from another route, account, hashtag, search term or video is a 400. Passing -1 on limit or pages means "the maximum this service allows", which is 500 videos, 500 comments and 20 pages.
How does billing work?
One credit per page of results fetched, and every response states it as pagesFetched, so a bill is never a surprise. A single-page request costs 1 credit whatever the page holds — thirty videos or five. Asking for five pages costs five. Hashtag videos are the exception: 1 credit per page of up to 30 posts delivered, minimum 1 credit per request, and each response states its cost as credits. Parsing a URL with /resolve-url reports pagesFetched 0 and is free.
Can I get a video’s transcript, and how many videos have one?
Yes, and the honest figure is 68% — 125 of 185 videos measured across 14 languages carried a transcript. TikTok transcribes spoken audio for most videos but not all, and a photo carousel is 0% by nature because there is no audio to transcribe. What makes the route worth more than the number suggests is that the translations are free: a video posted in another language usually carries an English track alongside its original, already timed, for the same one credit. You get the full text plus segments with start and end times in seconds. A video without one is a normal 200 — transcript.available is false, tracks is empty, durationSeconds is still filled in, and a note says why — so do not retry it.
How complete are a video’s comments?
The comments themselves page normally, up to 500 in one request. Two things are worth knowing. The replies array on a comment holds only the replies TikTok shows alongside it — usually none or a handful — while replyCount reports how many exist in total, and a response where the two differ carries a note saying so. And totalCount is the figure TikTok publishes for the video, which can exceed what paging can reach. Both are stated rather than glossed over, so you can tell a complete read from a partial one.
What happens when there is nothing to return?
You get an explanation, not an empty array. Every response carries a notes array, and an empty result always comes with a note saying why: the account is private, the account has no public posts, comments are turned off for the video, the hashtag has no public videos, or the list stopped before the requested number was reached. A missing answer and an explained absence are different things, and the response distinguishes them.
How reliable is it?
Every route is monitored 24/7 and a failure alerts our team, and you are only charged for successful responses. Listing an account’s videos succeeds about 199 times in 200, and a 503 there comes only after repeated attempts — wait before retrying rather than retrying immediately.
Can my AI agent use it?
Yes. All eight routes are MCP tools on the same FetchLayer MCP server, named tiktok_user_profile, tiktok_user_videos, tiktok_video_detail, tiktok_search_videos, tiktok_hashtag_videos, tiktok_comments, tiktok_video_transcript and tiktok_resolve_url. They are distinct from the tiktok_ad_library_* tools, which cover the paid ad library rather than organic posts. Tool calls use the same key and are billed exactly like REST.
What is not available?
Account analytics — audience demographics, watch time, traffic sources — are not available from anyone for an account you do not own, because TikTok publishes none of it. There are no historical snapshots either: counts are as they stand when you ask, so tracking movement means storing what you get back and asking again.
Start pulling TikTok data today.
Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.
Used by developers at
Individual developers or teams — not official partnerships