TikTok Scraper
Extract public TikTok profiles, follower/following lists, explicitly self-declared audience-country samples, videos, indexed search results, transcripts, comments, or replies.
Workspace
Configure
Inputs stay here while results become exportable artifacts.
Start from an example
Results
Preview, inspect, copy, or export the complete output.
Your result will become an artifact
Run the tool to inspect structured rows, raw JSON, execution details, and downloadable JSON, CSV, and Markdown files.
Overview
TikTok Scraper gives agents a dependable first step for public TikTok research. Provide a username or public profile URL and the tool renders TikTok through Better Fetch, reads the public page hydration payload, and returns normalized profile metadata without using private cookies, account credentials, or the official TikTok API.
Last validated: Jul 15, 2026
Input
mode"profile" | "profile_region" | "profile_videos" | "following" | "followers" | "audience_demographics" | "video" | "video_transcript" | "video_comments" | "comment_replies" | "search_suggestions" | "search_users" | "search_hashtag" | "search_keyword" | "search_top" | "user_live" | "live_details" | "song" | "song_videos" | "popular_creators" | "popular_hashtags" | "trending_feed"Public profile, relationship list, profile videos, one video, comments, or discovery operation. Inferred from video_url when omitted.
querystringQuery for search_suggestions, search_users, or search_keyword mode.
cursorintegerTikTok comment cursor or relationship min-time cursor from a previous response.
regionstringTwo-letter region for localized search or search_suggestions mode.
clip_idstringTikTok music id for song and song_videos modes.
hashtagstringHashtag with or without # for search_hashtag mode.
room_idstringOptional numeric live room id to verify in live_details mode; the current room is discovered from username/profile_url when omitted.
sort_by"relevance" | "most-liked" | "date-posted"Requested indexed search ordering; date-posted maps to Google's date sort.
user_idstringOptional numeric owner id to verify in live_details mode.
languagestringPreferred caption language code for video_transcript mode. Defaults to en.
min_timeintegerTikTok relationship-list min-time cursor from a previous following or followers response.
usernamestringTikTok username, with or without the @ prefix. Use username or profile_url.
music_urlstringPublic TikTok music URL for song and song_videos modes.
video_urlstring (uri)Public TikTok video URL. Required in video mode.
comment_idstringParent TikTok comment id for comment_replies mode.
date_posted"yesterday" | "this-week" | "this-month" | "last-3-months" | "last-6-months" | "all-time"Optional Google recency window for search_keyword.
max_resultsintegerdefault: 12Maximum video cards or comments to return.
profile_urlstring (uri)Public TikTok profile URL. Use username or profile_url in profile mode.
sample_sizeintegerdefault: 50Maximum sampled public followers for audience_demographics mode.
Output
biostringProfile bio text
modestringrequiredResolved operation mode
countintegerNumber of public video cards returned
ownerobjectowner.idstringowner.usernamestringowner.display_namestringtitlestringSearch query when relevant
totalintegerTotal comments or relationships when TikTok reports it
usersobject[]Normalized public TikTok user-search or relationship-list results
avatarstringLargest visible avatar URL
regionstringTwo-letter region exposed on the creator's public video metadata
statusstringNormalized live-room status: live, ended, offline, or unknown
videosobject[]Public TikTok profile video cards
captionstringPublic video caption
is_livebooleanWhether the public profile exposes an active room
room_idstringPublic live room id when the creator is live
sec_uidstringTikTok secUid identifier
user_idstringTikTok user id
bio_linkstringVisible website or bio link
categorystringVisible commerce/account category when present
commentsobject[]Normalized public TikTok comments or replies
creatorsobject[]Creators sampled from TikTok's current public Explore feed, ranked by visible likes in the sample.
durationintegerSong duration in seconds
ended_atstringISO room finish time for ended rooms
has_morebooleanWhether TikTok reports another result page
hashtagsstring[]Hashtags linked from the public embed
languagestringVisible profile or suggestion language
music_idstringTikTok music identifier
usernamestringTikTok unique username
verifiedbooleanWhether TikTok marks the profile verified
video_idstringTikTok video id
cover_urlstringPublic live-room cover image
music_urlstringLinked public music or sound URL
video_urlstringCanonical public TikTok video URL
author_urlstringPublic creator profile URL
created_atstringISO timestamp when TikTok exposes account creation time
embed_htmlstringTikTok's public embed markup
like_countintegerVisible total likes/heart count
source_urlstringrequiredPublic TikTok page, oEmbed endpoint, or public search-index page fetched
started_atstringISO room start time
transcriptstringRaw public WEBVTT transcript
author_namestringVisible creator display name
methodologystringTransparent source and inference limitations
music_titlestringLinked music or sound title
next_cursorintegerNext public comment or relationship-list cursor
profile_urlstringFetched public TikTok profile URL
sample_sizeintegerNumber of unique public followers sampled
share_countintegerCurrent public live share count when exposed
share_titlestringTikTok share title
status_codeintegerTikTok's public numeric live-room status
suggestionsobject[]Public TikTok search suggestions
video_countintegerVisible video count
display_namestringVisible display name
music_authorstringVisible music author
viewer_countintegerCurrent public live viewer count when exposed
comment_countintegerCurrent public live comment count when exposed
commerce_userbooleanWhether TikTok marks the account as commerce-enabled
thumbnail_urlstringSigned public video thumbnail URL
follower_countintegerVisible follower count
music_play_urlstringPublic song preview URL
representativebooleanAlways false for the public self-declared-location sample
following_countintegerVisible following count
music_cover_urlstringPublic song cover image URL
private_accountbooleanWhether the profile is marked private
subtitle_sourcestringResolved public subtitle URL
thumbnail_widthintegerThumbnail width in pixels
popular_hashtagsobject[]Hashtags sampled from TikTok's current public Explore feed, ranked by visible likes in the sample.
thumbnail_heightintegerThumbnail height in pixels
is_auto_generatedbooleanTrue when TikTok labels the subtitle as auto-generated
music_video_countintegerVisible number of videos using the song
share_descriptionstringTikTok share description
audience_countriesobject[]Countries explicitly self-declared in sampled public follower bios, not TikTok private audience analytics
located_sample_sizeintegerFollowers whose bio explicitly names a supported country or contains its flag
unlocated_sample_sizeintegerSampled followers with no explicit supported country signal
transcript_not_availablebooleanTrue when TikTok exposes no caption track for the requested video
Examples
openai-profile
{
"username": "openai"
}profile-region
{
"mode": "profile_region",
"username": "stoolpresidente"
}profile-videos
{
"mode": "profile_videos",
"username": "stoolpresidente",
"max_results": 6
}following
{
"mode": "following",
"username": "openai",
"max_results": 10
}followers
{
"mode": "followers",
"username": "openai",
"max_results": 10
}audience-demographics-public-sample
{
"mode": "audience_demographics",
"username": "openai",
"sample_size": 50
}video-comments
{
"mode": "video_comments",
"video_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
"max_results": 5
}comment-replies
{
"mode": "comment_replies",
"video_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
"comment_id": "6718336105873702917",
"max_results": 5
}search-suggestions
{
"mode": "search_suggestions",
"query": "openai",
"region": "US"
}search-users
{
"mode": "search_users",
"query": "openai",
"max_results": 10
}search-hashtag
{
"mode": "search_hashtag",
"hashtag": "funnydogs",
"max_results": 5
}search-keyword
{
"mode": "search_keyword",
"query": "funny dogs",
"max_results": 5
}top-search
{
"mode": "search_top",
"query": "funny dogs",
"max_results": 5
}user-live-status
{
"mode": "user_live",
"username": "thejustalex"
}live-room-details
{
"mode": "live_details",
"username": "weathernewslive"
}public-video
{
"mode": "video",
"video_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173"
}video-transcript
{
"mode": "video_transcript",
"language": "en",
"video_url": "https://www.tiktok.com/@stoolpresidente/video/7499229683859426602"
}song-details
{
"mode": "song",
"clip_id": "6689804660171082501"
}song-videos
{
"mode": "song_videos",
"clip_id": "6689804660171082501",
"max_results": 6
}trending-feed
{
"mode": "trending_feed",
"max_results": 6
}popular-creators
{
"mode": "popular_creators",
"max_results": 6
}popular-hashtags
{
"mode": "popular_hashtags",
"max_results": 10
}Use cases
FAQ
Does TikTok Scraper need a TikTok account?
No. It reads public profile pages visible to Better Fetch and does not use private TikTok cookies, passwords, API tokens, or logged-in sessions.
Can it search TikTok videos by keyword or hashtag?
Yes. Keyword and hashtag modes return real public TikTok video URLs from public search indexes. Coverage is best-effort and the tool never fabricates results when TikTok or an index withholds them.
Why are some fields omitted for certain profiles?
The tool only returns fields present in TikTok's public page payload. Private, blocked, removed, or region-limited profile data is not guessed.
Use it anywhere
MCP (Claude, ChatGPT, Codex)
# After connecting https://betterfetch.co/api/mcp, ask your AI to:
1. Call search_tools for "TikTok Scraper"
2. Call run_tool with:
name: "tiktok_scraper"
input: {"username":"openai"}REST
curl -sS -X POST "https://betterfetch.co/api/tools/tiktok_scraper/run" \
-H "Authorization: Bearer bf_your_key_here" \
-H "Content-Type: application/json" \
-d '{"input": {"username":"openai"}}'Run locally
git clone https://github.com/better-fetch/tools/tree/main/tools/tiktok-scraper && cd tiktok-scraper && npm i
BETTER_FETCH_API_KEY=bf_your_key_here npx bf-tool run --input '{"username":"openai"}'