Better Fetch

TikTok Scraper

Extract public TikTok profiles, follower/following lists, explicitly self-declared audience-country samples, videos, indexed search results, transcripts, comments, or replies.

Socialv0.16.4~2 credits/runSource on GitHub

Workspace

Configure

Inputs stay here while results become exportable artifacts.

Start from an example

Public profile, relationship list, profile videos, one video, comments, or discovery operation. Inferred from video_url when omitted.

Query for search_suggestions, search_users, or search_keyword mode.

TikTok comment cursor or relationship min-time cursor from a previous response.

Two-letter region for localized search or search_suggestions mode.

TikTok music id for song and song_videos modes.

Hashtag with or without # for search_hashtag mode.

Optional numeric live room id to verify in live_details mode; the current room is discovered from username/profile_url when omitted.

Requested indexed search ordering; date-posted maps to Google's date sort.

Optional numeric owner id to verify in live_details mode.

Preferred caption language code for video_transcript mode. Defaults to en.

TikTok relationship-list min-time cursor from a previous following or followers response.

TikTok username, with or without the @ prefix. Use username or profile_url.

Public TikTok music URL for song and song_videos modes.

Public TikTok video URL. Required in video mode.

Parent TikTok comment id for comment_replies mode.

Optional Google recency window for search_keyword.

Maximum video cards or comments to return.

Public TikTok profile URL. Use username or profile_url in profile mode.

Maximum sampled public followers for audience_demographics mode.

Sign in and run
~2 base credits/run10 runs/minute

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.

biomodecountownertitletotalusersavatar

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.

querystring

Query for search_suggestions, search_users, or search_keyword mode.

cursorinteger

TikTok comment cursor or relationship min-time cursor from a previous response.

regionstring

Two-letter region for localized search or search_suggestions mode.

clip_idstring

TikTok music id for song and song_videos modes.

hashtagstring

Hashtag with or without # for search_hashtag mode.

room_idstring

Optional 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_idstring

Optional numeric owner id to verify in live_details mode.

languagestring

Preferred caption language code for video_transcript mode. Defaults to en.

min_timeinteger

TikTok relationship-list min-time cursor from a previous following or followers response.

usernamestring

TikTok username, with or without the @ prefix. Use username or profile_url.

music_urlstring

Public TikTok music URL for song and song_videos modes.

video_urlstring (uri)

Public TikTok video URL. Required in video mode.

comment_idstring

Parent 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: 12

Maximum video cards or comments to return.

profile_urlstring (uri)

Public TikTok profile URL. Use username or profile_url in profile mode.

sample_sizeintegerdefault: 50

Maximum sampled public followers for audience_demographics mode.

Output

biostring

Profile bio text

modestringrequired

Resolved operation mode

countinteger

Number of public video cards returned

ownerobject
owner.idstring
owner.usernamestring
owner.display_namestring
titlestring

Search query when relevant

totalinteger

Total comments or relationships when TikTok reports it

usersobject[]

Normalized public TikTok user-search or relationship-list results

avatarstring

Largest visible avatar URL

regionstring

Two-letter region exposed on the creator's public video metadata

statusstring

Normalized live-room status: live, ended, offline, or unknown

videosobject[]

Public TikTok profile video cards

captionstring

Public video caption

is_liveboolean

Whether the public profile exposes an active room

room_idstring

Public live room id when the creator is live

sec_uidstring

TikTok secUid identifier

user_idstring

TikTok user id

bio_linkstring

Visible website or bio link

categorystring

Visible 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.

durationinteger

Song duration in seconds

ended_atstring

ISO room finish time for ended rooms

has_moreboolean

Whether TikTok reports another result page

hashtagsstring[]

Hashtags linked from the public embed

languagestring

Visible profile or suggestion language

music_idstring

TikTok music identifier

usernamestring

TikTok unique username

verifiedboolean

Whether TikTok marks the profile verified

video_idstring

TikTok video id

cover_urlstring

Public live-room cover image

music_urlstring

Linked public music or sound URL

video_urlstring

Canonical public TikTok video URL

author_urlstring

Public creator profile URL

created_atstring

ISO timestamp when TikTok exposes account creation time

embed_htmlstring

TikTok's public embed markup

like_countinteger

Visible total likes/heart count

source_urlstringrequired

Public TikTok page, oEmbed endpoint, or public search-index page fetched

started_atstring

ISO room start time

transcriptstring

Raw public WEBVTT transcript

author_namestring

Visible creator display name

methodologystring

Transparent source and inference limitations

music_titlestring

Linked music or sound title

next_cursorinteger

Next public comment or relationship-list cursor

profile_urlstring

Fetched public TikTok profile URL

sample_sizeinteger

Number of unique public followers sampled

share_countinteger

Current public live share count when exposed

share_titlestring

TikTok share title

status_codeinteger

TikTok's public numeric live-room status

suggestionsobject[]

Public TikTok search suggestions

video_countinteger

Visible video count

display_namestring

Visible display name

music_authorstring

Visible music author

viewer_countinteger

Current public live viewer count when exposed

comment_countinteger

Current public live comment count when exposed

commerce_userboolean

Whether TikTok marks the account as commerce-enabled

thumbnail_urlstring

Signed public video thumbnail URL

follower_countinteger

Visible follower count

music_play_urlstring

Public song preview URL

representativeboolean

Always false for the public self-declared-location sample

following_countinteger

Visible following count

music_cover_urlstring

Public song cover image URL

private_accountboolean

Whether the profile is marked private

subtitle_sourcestring

Resolved public subtitle URL

thumbnail_widthinteger

Thumbnail width in pixels

popular_hashtagsobject[]

Hashtags sampled from TikTok's current public Explore feed, ranked by visible likes in the sample.

thumbnail_heightinteger

Thumbnail height in pixels

is_auto_generatedboolean

True when TikTok labels the subtitle as auto-generated

music_video_countinteger

Visible number of videos using the song

share_descriptionstring

TikTok share description

audience_countriesobject[]

Countries explicitly self-declared in sampled public follower bios, not TikTok private audience analytics

located_sample_sizeinteger

Followers whose bio explicitly names a supported country or contains its flag

unlocated_sample_sizeinteger

Sampled followers with no explicit supported country signal

transcript_not_availableboolean

True 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

Creator research

Collect visible TikTok profile metadata for creator discovery, influencer vetting, social listening, or campaign planning workflows.

Profile monitoring

Track public follower, following, likes, and video counts over time for profiles that matter to a brand, product, or market.

Agent context

Let an agent inspect a public TikTok account and reason over its bio, verification, avatar, public counts, and linked website.

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"}'