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

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…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

TikTok Profile, Hashtag, Search, Video & Trending Scraper at a glance

TikTok Profile, Hashtag, Search, Video & Trending Scraper is a ready-to-run Apify actor from abotapi for collecting social media data. Its documented output includes type, source mode, id, url and username, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $3.00 per 1,000 results on the Apify Free plan and from $2.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Social Media, Videos, Automation
Pricing
$3.00 per 1,000 results (Free plan), from $2.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
17 options

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

What TikTok Profile, Hashtag, Search, Video & Trending Scraper can do

  • Five ways in. Profile, hashtag/keyword search, video, trending, and paste-any-link URL mode in one actor, so you do not need separate tools for each job.
  • Profiles. 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. Search mode accepts a plain keyword or a hashtag (start the term with #) and returns matching videos either way.
  • Video stats. Video mode returns full stats for a single video: plays, likes, comments, shares and saves, plus music info, hashtags, duration and cover images.
  • Trending. Trending mode needs no input at all beyond the mode itself; run it as-is to pull the current trending feed.
  • Public data only. Public data only: the actor never logs in, so it can only read what is publicly visible; private accounts and their videos return no data.

Choose what to collect

These inputs let you configure TikTok Profile, Hashtag, Search, Video & Trending Scraper. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredprofile: usernames or profile URLs -> profile info + their videos. search: hashtags or keywords -> matching videos. video: direct video URLs -> full video stats. url: paste TikTok links of any supported shape (routed automatically). trending: current trending feed, no input needed.

Choices: profile, search, video, trending, url

startUrlsarrayProfile (/@user) and video (/@user/video/id) links are confirmed; hashtag (/tag/x), search (/search?q=), /explore and vm./vt. short links are accepted and routed to the matching lane. Only used when mode = url. Left untouched, it scrapes one example profile and one example video.
usernamesarrayOne or more TikTok usernames (with or without @) or full profile URLs. Only used when mode = profile.
queriesarrayOne or more search terms. Start a term with # to search that hashtag (e.g. "#fyp"); anything else is treated as a keyword search. Only used when mode = search.
videoUrlsarrayOne or more direct TikTok video URLs (https://www.tiktok.com/@user/video/1234567890). Only used when mode = video.
maxItemsintegerprofile mode: max videos per username. search mode: max videos per hashtag/keyword. video mode: max videos from the URL list. trending mode: max videos from the feed. 0 = unlimited (walks until the feed itself ends).
oldestPostDatestringKeep only videos posted on or after this date. Use YYYY-MM-DD, an ISO timestamp, or a relative value such as "30 days". Empty = no limit.
Show 10 more inputs
More input fields
InputWhat it controls
newestPostDatestringKeep only videos posted on or before this date. Use YYYY-MM-DD, an ISO timestamp, or a relative value such as "7 days". Empty = no limit.
mostDiggsintegerKeep only videos with at most this many likes. Empty = no limit.
leastDiggsintegerKeep only videos with at least this many likes. Empty = no limit.
resumeFromRunIdstringPaste the ID of an earlier run (or its dataset) to skip records it already collected. Leave empty for a fresh run.
incrementalModebooleanRemember what previous runs of the same targets returned and tag each row with changeType (NEW, UPDATED, UNCHANGED, REAPPEARED), changedFields, firstSeenAt and lastSeenAt. Unchanged rows are not pushed (and not charged) unless 'Emit unchanged' is on. Off = output is identical to a normal run. Removed or deleted items are not reported, because TikTok feeds have no end-of-feed marker. Link fields TikTok re-signs on every fetch (coverUrl, dynamicCoverUrl, originCoverUrl, authorAvatarUrl, avatarUrl, musicUrl, musicCoverMediumUrl, subtitleLinks, slideshowImageLinks) and scrapedAt are ignored when deciding whether a row changed.
emitUnchangedbooleanAlso push rows whose content did not change, tagged UNCHANGED. Off by default.
ignoreFieldsForChangesarrayField names to leave out when deciding whether a row changed, e.g. playCount, diggCount, followerCount for counters that move constantly. Applies to the previous baseline too.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify → Settings → API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

recordTypeType (text)
sourceModeSource mode (text)
idID (text)
urlURL (link)
uniqueIdUsername (text)
nicknameNickname (text)
descVideo description (text)
authorUsernameAuthor (text)
playCountPlays (number)
diggCountLikes (number)
commentCountComments (number)
shareCountShares (number)
Show 24 more fields
collectCountSaves (number)
followerCountFollowers (number)
followingCountFollowing (number)
heartCountTotal likes (number)
videoCountVideo count (number)
verifiedVerified (boolean)
createTimeIsoCreated at (date)
scrapedAtScraped at (date)
secUidsecUid (text)
signatureBio (text)
avatarUrlAvatar (image)
privateAccountPrivate (boolean)
regionRegion (text)
bioLinkBio link (link)
authorNicknameAuthor nickname (text)
durationDuration (s) (number)
musicTitleMusic title (text)
musicAuthorMusic author (text)
hashtagsHashtags (array)
coverUrlCover (image)
changeTypeChange (text)
changedFieldsChanged fields (array)
firstSeenAtFirst seen (date)
lastSeenAtLast seen (date)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordType": "video",
  "sourceMode": "search",
  "id": "7000000000000000000",
  "url": "https://www.tiktok.com/@samplecreator/video/7000000000000000000",
  "desc": "Sample video caption #sample",
  "createTime": 1767225600,
  "createTimeIso": "2026-01-01T00:00:00.000Z",
  "authorUsername": "samplecreator",
  "authorNickname": "Sample Creator",
  "authorSecUid": "MS4wSample0000000000000000000000000000000000000000000",
  "authorAvatarUrl": "https://p16-sign-va.tiktokcdn.com/sample-avatar.jpeg",
  "duration": 18,
  "width": 1080,
  "height": 1920,
  "playCount": 500000,
  "diggCount": 42000,
  "commentCount": 1200,
  "shareCount": 1200,
  "collectCount": 3300,
  "musicId": "7000000000000000001",
  "musicTitle": "Sample Sound",
  "musicAuthor": "Sample Artist",
  "musicUrl": "https://sf16-ies-music.tiktokcdn.com/sample-music.mp3",
  "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"
}

Ways to use this data

  • Social listening and brand monitoring: track a hashtag or keyword and pull matching videos as they post.
  • Creator and competitor research: collect a profile's stats and video history to benchmark growth and content.
  • Trend and sound discovery: scan the trending feed or a hashtag to see what is gaining traction right now.
  • Dataset building for analytics or ML: collect video metadata (captions, stats, hashtags, music) at scale for research.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does TikTok Profile, Hashtag, Search, Video & Trending Scraper return?

The documented output for TikTok Profile, Hashtag, Search, Video & Trending Scraper includes type, source mode, id, url, username, nickname, video description and author. Availability of each field depends on the source page and the selected mode.

How much does TikTok Profile, Hashtag, Search, Video & Trending Scraper cost?

It costs $3.00 per 1,000 results on the Apify Free plan and from $2.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I run this on a schedule to catch new videos?

Yes, schedule it from the Schedules tab. Turn on Incremental mode to tag each row NEW, UPDATED (with changedFields), UNCHANGED or REAPPEARED against the previous run of the same targets (firstSeenAt / lastSeenAt are added too). Unchanged rows are not pushed and so are not billed unless you enable Emit unchanged. Link fields that TikTok re-signs on every fetch (coverUrl, dynamicCoverUrl, originCoverUrl, authorAvatarUrl, avatarUrl, musicUrl, musicCoverMediumUrl, subtitleLinks, slideshowImageLinks) and scrapedAt are ignored when deciding whether a row changed, so a changed cover image alone does not make a row UPDATED. Engagement counters change constantly, so list the ones you do not care about in Ignore fields when detecting changes. Videos that disappear are not reported, because TikTok feeds have no end marker. With it off, output is exactly as before. To continue an interrupted run, paste its run ID into Resume from run or dataset ID.

Why does video mode say it could not find a video?

Video mode needs the full link, https://www.tiktok.com/@username/video/1234567890. Short share links (vm.tiktok.com, vt.tiktok.com) are not resolved; open one in a browser first and copy the full address it redirects to.

Why did my run fail instead of returning an empty dataset?

A run fails only when it collected 0 records and at least one target could not be read at all, or loaded without carrying any usable data; the status message says which. A keyword or hashtag that genuinely matches nothing still ends as a successful, honestly empty run. If some targets were read and others were not, the run stays green with a warning: the dataset is just incomplete for the targets that failed. For trending mode specifically, a run that fails outright most often means the feed's underlying request shape changed; please report it so the mapping can be refreshed.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client like any other actor. Sending results to connected apps through the connector field is not active in the current build; use the Integrations tab instead.

Ready to collect with TikTok Profile, Hashtag, Search, Video & Trending Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.