TikTok Profile, Hashtag, Search, Video & Trending Scraper avatar

TikTok Profile, Hashtag, Search, Video & Trending Scraper

Pricing

from $1.80 / 1,000 results

Go to Apify Store
TikTok Profile, Hashtag, Search, Video & Trending Scraper

TikTok Profile, Hashtag, Search, Video & Trending Scraper

Scrape TikTok without login. Extract profiles, bios, follower stats and videos; search by hashtag or keyword; scrape individual videos with full engagement stats and comments; or collect posts from the current trending feed.

Pricing

from $1.80 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

4

Monthly active users

4 days ago

Last modified

Share

Pull structured data from TikTok without logging in. Give it usernames to get profile info plus their videos, hashtags or keywords to get matching videos, direct video links to get full stats plus comments, or run it with no input at all to get the current trending feed. Clean JSON out, four independent modes, one actor.

Why this scraper

  • Four modes in one actor: profile, hashtag/keyword search, video plus comments, and trending, so you do not need separate tools for each job.
  • Profile mode returns the full public profile (bio, avatar, follower/following/heart/video counts, verified flag) plus a paginated list of that account's videos.
  • Search mode accepts a plain keyword or a hashtag (start the term with #) and returns matching videos either way.
  • Video mode returns full video stats (plays, likes, comments, shares, saves), music info, hashtags used, duration and cover images, plus paginated comments (text, author, likes, reply count, timestamp).
  • Trending mode needs no input at all: run it as-is to pull the current trending feed.
  • No video, thumbnail, avatar or music file downloads; this actor returns metadata and cover image URLs only, keeping runs fast and cheap.
  • Simple output limit: one "Max results" number per mode (videos for profile/search/trending, comments for video mode); leave it at 0 to walk until the feed itself ends.

Data you get

Sample shape: values are illustrative placeholders, not from a live profile, video or comment.

Profile record

FieldExample
recordType"profile"
uniqueId"samplecreator"
nickname"Sample Creator"
signature"Sample bio text goes here"
avatarUrl"https://p16-sign-va.tiktokcdn.com/sample-avatar.jpeg"
followerCount125000
followingCount340
heartCount2400000
videoCount210
verifiedfalse
privateAccountfalse
region"US"
bioLink"https://example.com"
url"https://www.tiktok.com/@samplecreator"
scrapedAt"2026-01-01T00:00:00.000Z"

Video record

FieldExample
recordType"video"
id"7000000000000000000"
url"https://www.tiktok.com/@samplecreator/video/7000000000000000000"
desc"Sample video caption #sample"
authorUsername"samplecreator"
authorNickname"Sample Creator"
duration18
width1080
height1920
playCount500000
diggCount42000
commentCount610
shareCount1200
collectCount3300
musicTitle"Sample Sound"
musicAuthor"Sample Artist"
hashtags["sample", "fyp"]
coverUrl"https://p16-sign-va.tiktokcdn.com/sample-cover.jpeg"
createTimeIso"2026-01-01T00:00:00.000Z"
sourceMode"search"

Comment record

FieldExample
recordType"comment"
commentId"7100000000000000000"
videoId"7000000000000000000"
text"Sample comment text"
authorUsername"samplecommenter"
authorNickname"Sample Commenter"
diggCount24
replyCommentTotal2
createTimeIso"2026-01-01T00:00:00.000Z"

How to use

Profile mode:

{
"mode": "profile",
"usernames": ["samplecreator", "@anothercreator"],
"maxItems": 20
}

Hashtag or keyword search:

{
"mode": "search",
"queries": ["#fyp", "cooking tutorial"],
"maxItems": 20
}

Video plus comments:

{
"mode": "video",
"videoUrls": ["https://www.tiktok.com/@samplecreator/video/7000000000000000000"],
"fetchComments": true,
"maxItems": 20
}

Trending feed, no input needed beyond the mode:

{
"mode": "trending",
"maxItems": 20
}

Input parameters

ParameterTypeDefaultDescription
modestring"profile"profile, search, video or trending
usernamesarray of strings[]Usernames or profile URLs; profile mode only
queriesarray of strings[]Hashtags (start with #) or keywords; search mode only
videoUrlsarray of strings[]Direct video URLs; video mode only
fetchCommentsbooleantrueFetch comments for each video; video mode only
maxItemsinteger20Videos per username/query/trending run, or comments per video. 0 = unlimited
proxyobjectApify ResidentialProxy configuration
mcpConnectorsarray[]Optional MCP connectors to also send results to (see below)
notionParentPageUrlstring-Notion parent page id/url, only used with the Notion connector
maxNotifyListingsinteger50Cap on items sent to each connector per run

Output example

{
"recordType": "video",
"sourceMode": "profile",
"id": "7000000000000000000",
"url": "https://www.tiktok.com/@samplecreator/video/7000000000000000000",
"desc": "Sample video caption #sample",
"createTime": 1700000000,
"createTimeIso": "2026-01-01T00:00:00.000Z",
"authorUsername": "samplecreator",
"authorNickname": "Sample Creator",
"authorSecUid": "MS4wSample0000000000000000000000000000000000000000000",
"duration": 18,
"width": 1080,
"height": 1920,
"playCount": 500000,
"diggCount": 42000,
"commentCount": 610,
"shareCount": 1200,
"collectCount": 3300,
"musicId": "7000000000000000001",
"musicTitle": "Sample Sound",
"musicAuthor": "Sample Artist",
"hashtags": ["sample", "fyp"],
"coverUrl": "https://p16-sign-va.tiktokcdn.com/sample-cover.jpeg",
"dynamicCoverUrl": "https://p16-sign-va.tiktokcdn.com/sample-dyncover.jpeg",
"originCoverUrl": "https://p16-sign-va.tiktokcdn.com/sample-origcover.jpeg",
"region": "US",
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the input. Notion gets a rich page per item; other connectors get a best-effort write or a digest message. The connector receives a condensed, human-readable summary per item (title plus key fields), not the full JSON; the complete record always stays in the dataset. Leave the field empty to skip this entirely, it never changes the dataset output.

How a run reports its result

An empty dataset is never reported as a plain success, so a scheduled run cannot fail quietly.

  • Failed run (the run turns red). No records were collected and at least one target could not be read, or loaded without carrying any usable data. The status message says which of the two happened and how many targets it affected.
  • Partial run (the run stays green, with a warning status message). Some records were collected but at least one target was missed, so the dataset is incomplete for that input.
  • Empty result (the run stays green). Every target was reached and simply matched nothing, for example a keyword search with no results. The status message says so explicitly.
  • Clean run (the run stays green). Every target was reached and returned data.

A target is retried several times before it counts as missed.

Known limitations

  • Short share links (vm.tiktok.com, vt.tiktok.com) are not resolved in video mode; paste the full @username/video/id link.
  • The trending feed endpoint may change its exact parameters over time; if a run returns 0 trending items, please report it so the mapping can be refreshed.
  • Only public profiles, videos and comments are returned. Private accounts and disabled comment sections return no data for that field.