The TikTok Research API is the most complete official source of public TikTok data: date-bounded video queries, paged follower lists, comments, liked and reposted videos. It is also closed to many of the people who look for it. Agencies, startups, brands and researchers outside the eligible regions or institutions can't apply, and nobody may use it commercially.
If you qualify, use it: TikTok announced it free of charge for researchers and publishes no price. This page is for everyone else, and for researchers who want to know what a commercial API can and cannot replace.
How we compared
ScrapingBot is our product. Research API facts come from TikTok's own Research API page, its FAQ, the endpoint references for videos, user info, comments and followers, the Research Tools terms and TikTok's 2023 announcement, checked in October 2026. We have no Research API access, so its side is as documented, not measured. ScrapingBot responses are real, from October 27, 2026.
Who can use the Research API
- Where: researchers in the US, the EEA, the UK, Canada, Switzerland, Norway, Iceland, Liechtenstein and Brazil. In Brazil, the research must be about youth safety.
- Who: academic institutions in the US, EEA, UK, Canada or Switzerland, and not-for-profit or independent research institutions in the EU. Ph.D. candidates need an advisor's endorsement letter.
- For what: non-commercial research only. Applicants must be independent of commercial interests; creators, advertisers and commercial users are not eligible.
- How: create a TikTok for Developers account, submit an application with a research proposal, and wait. TikTok says to expect an answer within about 4 weeks. An approved researcher can add up to 9 collaborators, who share the team's quota.
The short version
Pick ScrapingBot if
Pick the Research API if
ScrapingBot vs the TikTok Research API at a glance
| ScrapingBot | TikTok Research API | |
|---|---|---|
| Who can use it | Anyone with an account; commercial use allowed | Approved non-commercial researchers (see above) |
| Getting access | Sign up; 100 free credits, no card | Application with a research proposal; about 4 weeks |
| Price | 1 credit per call; Starter $49.99 for 275,000 credits | No published price; announced free of charge for researchers |
| Volume | As many calls as your credits, within your plan's concurrency | 1,000 requests and 100,000 records a day; follower and following lists 20,000 calls and 2 million records a day |
| Finding videos | Keyword search as TikTok shows it, any date; an account's videos; a sound's videos | Queries on keyword, hashtag, username, region, sound, effect, length, views and comments, within a 30-day window |
| Freshness | Read from TikTok when you call | New videos can take 48 hours to appear; counts up to 10 days to update |
| Media | Playable video URL, cover image and audio URL | No media URLs among its video fields |
| Followers and following | One page of up to 50 accounts, each with its own counts | Pages of up to 100 (username and display name), with a cursor |
| Comments | Up to 50 per page, replies by comment, authors with counts | Up to 100 per page, replies by comment |
| Only here | Sound details, account search; Instagram, Google, Amazon and website scraping | Liked, pinned and reposted videos, playlists, transcripts (voice_to_text), EU TikTok Shop data |
| Rules on the data | ScrapingBot's terms and the law where you work | Refresh at least every 30 days and delete what is gone; send TikTok publications 7 days ahead; don't combine with other data about individuals |
Endpoint by endpoint
Every ScrapingBot TikTok call is a POST to https://scrapingbot.io/api/v1/tiktok naming an endpoint, for 1 credit. This is how the Research API's endpoints map onto them:
| Research API | ScrapingBot endpoint | Notes |
|---|---|---|
| Query Videos | /feed/search, /user/posts, /music/posts | By keyword, account or sound. No date, region or view filters: filter on create_time and the counts yourself. |
| Query User Info | /user/info | Followers, following, likes, video count, bio, verified, private. |
| Query Video Comments | /comment/list, /comment/reply | Paged with a cursor, up to 50 per page. |
| Query User Followers, Following | /user/followers, /user/following | One page of up to 50 accounts, no further pages. A hidden list returns 403, refunded. |
| Liked, Pinned, Reposted Videos | None | |
| Playlist Info, TikTok Shop | None | |
| None | / (a video by URL) | Details plus playable video, cover and audio URLs. |
| None | /music/info, /user/search | A sound's title, author and number of videos; accounts for a keyword. |
Video fields map closely. Counts come as TikTok displays them, so large ones are rounded (1.8M arrives as 1800000):
| Research API field | ScrapingBot field |
|---|---|
id | video_id (id on a single-video lookup) |
video_description | title |
create_time | create_time |
username | author.unique_id |
view_count, like_count | play_count, digg_count |
comment_count, share_count | comment_count, share_count |
favorites_count | collect_count |
video_duration | duration |
music_id | music_info.id |
hashtag_names | text_extra[].hashtag_name |
region_code | region, set on single-video lookups and empty in search results |
voice_to_text, playlist_id | No equivalent |
One question, both ways: a keyword's videos from the last 30 days
With the Research API, "videos about outdoor cooking from the last 30 days" is one request to its video query endpoint, bounded by dates. In the format its reference documents, the body is:
{
"query": {
"and": [{ "operation": "EQ", "field_name": "keyword", "field_values": ["outdoor cooking"] }]
},
"start_date": "20260928",
"end_date": "20261027",
"max_count": 100
}
It goes out with a client access token, and the fields you want are listed in the URL, such as fields=id,video_description,create_time,username,view_count,hashtag_names. Each request returns up to 100 videos and a cursor for the next.
ScrapingBot has no date filter. You page through TikTok's own search, which ranks by relevance across all dates, and keep the recent videos:
from datetime import datetime, timedelta, timezone
import requests
API = "https://scrapingbot.io/api/v1/tiktok"
HEADERS = {"x-api-key": "YOUR_API_KEY"}
def search(keywords, pages=4, region="US"):
"""Videos TikTok's search shows for a keyword, de-duplicated: 1 credit per page."""
videos, params = {}, {"keywords": keywords, "count": 30, "region": region}
for _ in range(pages):
body = requests.post(API, headers=HEADERS, timeout=60,
json={"endpoint": "/feed/search", "params": params}).json()
if not body.get("success"):
raise RuntimeError(body.get("error"))
data = body["data"]
for v in data["videos"]:
videos.setdefault(v["video_id"], v)
if not data.get("hasMore"):
break
params = {**params, "offset": data["cursor"], "search_id": data["searchId"]}
return list(videos.values())
since = datetime.now(timezone.utc) - timedelta(days=30)
found = search("outdoor cooking")
recent = [v for v in found if datetime.fromtimestamp(v["create_time"], timezone.utc) >= since]
print(f"{len(found)} videos, {len(recent)} posted in the last 30 days")
for v in sorted(recent, key=lambda v: v["play_count"], reverse=True)[:5]:
tags = sorted({t["hashtag_name"] for t in v.get("text_extra") or [] if t.get("hashtag_name")})
print(f"{v['play_count']:>10,} @{v['author']['unique_id']:<22} {' '.join('#' + t for t in tags[:3])}")
176 videos, 44 posted in the last 30 days
62,500,000 @outruncook #citytastetest #cooking #easyrecipetiktokcontest
9,200,000 @mountainchef420 #firecooking #mountainchef #outdoorcooking
9,000,000 @outruncook #citytastetest #cooking #easyrecipetiktokcontest
4,300,000 @outdoor_chef7 #cooking #cookingforest #outdoorcooking
3,500,000 @firerun.crew #campfirecooking #campingfood #cookinginnature
That run cost 4 credits, well under a cent on Starter. The four pages came back with 30, 96, 95 and 93 videos (TikTok often returns more than count), 176 of them unique. Only 44 were from the last 30 days and 17 from the last week; the oldest went back to 2022. Each video arrived with its play URL, cover and sound.
The difference matters for research. TikTok's search is what a user sees: ranked by relevance and partial. The Research API's query is a filter over TikTok's index, so it is the right tool for a defensible sample ("every video with this hashtag posted in the UK in May"). For a product, a dashboard or a monitor that wants the popular videos a user would find, along with their media, search is the closer match.
Followers and following
This is the largest gap. The Research API pages through an account's followers 100 at a time, with 2 million records a day to spend. ScrapingBot's /user/followers and /user/following return one page of up to 50 accounts. Asking NASA's followers for 50 returned 50, with total at 2,141,592; there is no cursor to go further.
Each of those accounts carries more than the Research API's username and display name: its own follower and following counts, total likes (total_favorited), video count (aweme_count), bio, region and verified badge. For "who are some of this account's followers, and how big are they", one call is enough. For a follower graph beyond that first page, you need the Research API. (On Instagram, ScrapingBot does page through whole lists: see exporting Instagram followers.)
What it costs
- Research API: no fee for approved projects (TikTok announced it free of charge in 2023 and lists no price), within 1,000 requests a day (100,000 records) plus the follower-list quota.
- ScrapingBot: 1 credit per TikTok call, whatever it returns. A search page of 30 to 96 videos, a profile, a page of 50 comments or 50 followers each cost 1 credit. Starter is $49.99 for 275,000 credits, so 1,000 calls is about 18 cents. Failed calls are refunded, and the 100 free credits are enough to try every endpoint.
The rules that come with Research API data
Approved researchers accept TikTok's Research Tools terms. Among them: refresh the data at least every 30 days and delete what is no longer available, keep it no longer than the research needs, send TikTok a copy of any publication at least 7 days before it appears, and don't combine the data with other information about individual users. Budget for the refresh work if you plan a long study. ScrapingBot data comes with ScrapingBot's terms, and your own obligations under privacy law still apply to what you store.
Where to go from here
- Try the search above in the playground, or follow the full guide to searching TikTok videos by keyword with Python.
- Track one sound instead of a keyword: every video that uses a TikTok sound, or the free TikTok sound tracker.
- Need engagement numbers for a creator? The free TikTok engagement rate calculator, or follower and like counts with Python.
- Comparing commercial TikTok APIs? The best TikTok data APIs in 2026, and the TikTok API page for every endpoint.
Common questions
Who can use the TikTok Research API?
Researchers at academic institutions in the US, EEA, UK, Canada or Switzerland, and at not-for-profit or independent research institutions in the EU, who apply with a research proposal and are approved. In Brazil, access is for youth safety research. Applicants must be independent of commercial interests. Checked October 2026 on TikTok's Research API page.
Can I use the TikTok Research API for a commercial project?
No. TikTok's Research Tools terms prohibit commercial use beyond publishing papers about the approved research, and creators, advertisers and companies are not eligible. A commercial project needs another source, such as a data API like ScrapingBot.
How long does Research API approval take?
TikTok says you can typically expect to hear back within 4 weeks of submitting an application. Ph.D. candidates also need an endorsement letter from their advisor.
What are the TikTok Research API's limits?
1,000 requests a day for up to 100,000 records, 100 records per request, and video queries no wider than 30 days. Follower and following lists have their own quota: 20,000 calls and 2 million records a day. Quotas reset at 12 AM UTC and are shared across an approved team.
Does ScrapingBot have date filters like the Research API?
No. /feed/search returns what TikTok's search shows for a keyword, from any date, so filter on create_time yourself. In our test, 44 of the 176 videos for "outdoor cooking" were from the last 30 days. If you need complete, date-bounded samples and you qualify, the Research API is the better tool.
How do I get TikTok follower lists without the Research API?
ScrapingBot's /user/followers and /user/following return one page of up to 50 accounts, each with its own follower, following, like and video counts, for 1 credit. There is no paging past that page. Accounts that hide their list return 403, refunded.