TikTok Scraper - Profiles, Videos & Hashtags avatar

TikTok Scraper - Profiles, Videos & Hashtags

Pricing

Pay per event

Go to Apify Store
TikTok Scraper - Profiles, Videos & Hashtags

TikTok Scraper - Profiles, Videos & Hashtags

Read public TikTok accounts and their videos, look up single videos by link or id, and get reach figures for hashtags. Per video: views, likes, comments, shares, caption, hashtags, sound and posting date.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Three things in one Actor, and you pick by what you fill in.

Accounts. Paste handles or profile links and get the account's followers, likes and video count, then one row per video with views, likes, comments, shares, caption, hashtags, sound and posting date.

Single videos. Paste video links or bare video ids to read just those.

Hashtags. Paste tags to get how many videos carry them and how many views those have between them.

No API key, no login, no browser.

A TikTok link copied from a video embedded on another site comes with a tail of tracking:

https://www.tiktok.com/@that.sara.with.no.h?referer_url=www.ladbible.com%2F
&refer=embed&embed_source=121374463%2C121468991%2C121439635…
&referer_video_id=7682928988821490974

That works as it is. So does @handle, a bare handle, and a link to a single video. Everything after the account name is dropped, so the same account pasted four different ways is read once, not four times.

What you get per video

  • play_count, like_count, comment_count, share_count, collect_count
  • description (the caption) and hashtags pulled out of it separately
  • created_at as a UTC timestamp, and duration_seconds
  • music_title, music_author and music_id — which sound the post used
  • cover_url, width, height, is_ad
  • handle, nickname, account_id and follower_count on every row

That last point matters more than it looks. Running twenty accounts gives you one table you can group and sort directly, instead of rows that have to be joined back to an account list first.

Paste a video link and only that video is read. The handle in the link is ignored, because /@x/video/<id> serves the same page as the real one: the id is what resolves. So a link with a stale handle still works, and the same video pasted twice is read once.

A single-video row carries everything an account's video row does, plus the author's follower count at the moment of the run, which is what makes a one-off link worth reading on its own.

Hashtags: reach figures, and only reach figures

Paste #olemiss, olemiss or a /tag/ link and you get the hashtag's id, how many videos carry it and how many views they have between them. Measured live: #olemiss, 240,700 videos, 3.44 billion views; #hottytoddy, 45,241 videos, 499 million views.

What you do not get is the tag's video list. TikTok does not serve it: the endpoint that would list them answers with zero items, to every client tried. Rather than return an empty video list that reads as an empty hashtag, the run returns the counts and reports hashtagVideosAvailable: false.

If you want videos for a topic, the way that works is to read the accounts that post about it and filter their captions on the tag, which the hashtags field on every video row supports directly.

What you get per account

Followers, following, total likes and video count, plus the bio, verified flag, whether the account is private, and the avatar. These are reported in the run summary for every account read, and the identity fields ride along on each video row.

Set Maximum videos per account to 0 to read only the accounts and skip videos entirely. That is the cheap way to track follower counts over time.

Two counts that will not always match, on purpose

An account's profile states how many videos it has. The feed hands over what it is willing to serve, and those are not always the same number: restricted, region-limited and recently removed posts are counted but not served.

Rather than smooth that over, the run summary reports all of it:

  • videosClaimedByProfiles — what the profiles say they hold
  • videosReturned — what actually came back
  • maxVideosPerAccount and cappedByMaxVideos — so you can tell your own limit apart from a restriction
  • accountsThatServedNoVideos — accounts that claim videos and served none

Asking for 40 videos from an account holding 47 is not a restriction, and without the cap in the summary those two cases look identical.

Empty is never assumed

The video feed is the kind of endpoint that answers awkward requests with a success and nothing in it. This Actor treats a body with nothing in it as a failure to be retried and reported, never as an account with no videos. A genuinely empty account is reported as exactly that, separately.

The same applies to individual numbers: a missing view count comes back empty rather than as 0, because zero views is a real and different thing from a count that was not published.

Filters and scale

  • TikTok accounts — handles or links, one per line
  • Maximum videos per account — the feed returns 35 per request, so this rounds up to whole requests and is the ceiling on both time and cost
  • Maximum accounts — applied after duplicates are removed

Two accounts and 73 videos took under thirteen seconds in testing. Videos come back newest first and paging is handled inside the run.

What people use this for

Creator research. Follower count next to per-video engagement is what separates an account with reach from an account with an audience. The gap between plays and likes across an account's recent posts says more than any follower number.

Campaign tracking. Run the accounts in a campaign on a schedule and keep the rows. Because created_at and every count are on each row, growth per post over time falls out of the table without extra work.

Sound and hashtag trends. music_id and hashtags across many accounts show what is spreading and how fast, which is the input to deciding what to post.

Competitive monitoring. The same shape of data for your accounts and somebody else's, in one table, with the account on every row.

What this does not cover

Videos are read from the account's own feed, so this returns what an account posted, not what it was tagged in, and not its liked or saved posts. Comments are counted but not fetched: a post with 146 comments gives you the number, not the 146 texts.

There is no keyword search, and that is not a gap in this Actor. TikTok's search endpoint answers with Please login your account first, so nobody reads it without an account. Accounts, videos and hashtags are what is available without one.

Sounds are identified rather than downloaded. music_id is stable across posts, which is what makes it useful for tracking a sound's spread, but the audio itself is not part of the output.

Notes

Only public accounts can be read. A private account is reported with its profile details and no videos, which is the honest answer rather than an empty result.

Counts are live and move constantly on popular posts; a run is a snapshot, which is why the posting date is on every row.

An account that does not exist is reported by name, so a run of fifty tells you exactly which handle was wrong rather than silently returning fewer rows.