TikTok Scraper: Videos, Profiles, Hashtags & Music Data avatar

TikTok Scraper: Videos, Profiles, Hashtags & Music Data

Pricing

Pay per usage

Go to Apify Store
TikTok Scraper: Videos, Profiles, Hashtags & Music Data

TikTok Scraper: Videos, Profiles, Hashtags & Music Data

Scrape TikTok by hashtag, profile, search query, or direct video URL. Returns plays, likes, shares, saves, comments, follower counts, hearts, music title, and captions. Optional video file and subtitle downloads. JSON output. Pay per video.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Kennedy Mutisya

Kennedy Mutisya

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

TikTok Scraper: Videos, Profiles, Hashtags & Music Data to JSON

Scrape TikTok without an API key. Pull plays, likes, shares, saves, follower counts, hearts, captions, hashtags, and music from any TikTok video, creator profile, hashtag, or search. One JSON row per item. Pay only for what you keep.

Ranks for: TikTok scraper, TikTok API alternative, TikTok API free, scrape TikTok videos, TikTok data export, TikTok profile scraper, TikTok follower count API, TikTok hashtag tracker, TikTok trend monitor, TikTok video downloader, TikTok music search, TikTok creator stats, TikTok to CSV, TikTok to JSON.


How it works

flowchart LR
A[Video URL<br/>Profile<br/>Hashtag<br/>Search] --> B[Open in<br/>headless Chromium]
B --> C[Scroll feed,<br/>collect video URLs]
C --> D[Open each video]
D --> E[Parse embedded<br/>JSON state]
E --> F[Push row<br/>to dataset]
F --> G[(JSON, CSV,<br/>Excel, API)]

Feed the actor a hashtag, a handle, a search query, or a direct video URL. The actor walks the page, extracts the embedded rehydration state, and returns one clean row per video and per profile.


What works today

InputStatusWhat you get
videoUrlsReliableFull stats, author, music, hashtags, download URL.
profilesReliableProfile row (followers, hearts, bio) plus recent videos.
hashtagsLimitedTikTok restricts anonymous hashtag browsing. Expect few or no results without a session.
searchQueriesLimitedTikTok redirects anonymous search to the For You feed. Limited results without a session.

Best practice: scrape a list of profiles first, collect the returned video URLs, then run the actor again with videoUrls for full stats. Diagram below.


flowchart LR
A[List of creators] --> B[Run with<br/>profiles input]
B --> C[Profile rows +<br/>recent video URLs]
C --> D[Run again with<br/>videoUrls input]
D --> E[Rich per video<br/>stats and music]

Two runs. First pulls recent URLs per creator. Second returns the full stat sheet per video. Cheap, reliable, scales to thousands of creators.


Quick start

Creator stats and recent videos:

{
"profiles": ["gordonramsayofficial", "khaby.lame"],
"resultsPerPage": 30
}

Single video deep dive:

{
"videoUrls": [
"https://www.tiktok.com/@gordonramsayofficial/video/7341108653442829601"
],
"scrapeComments": true,
"maxCommentsPerVideo": 100
}

Bulk video stat refresh (campaign measurement):

{
"videoUrls": [
"https://www.tiktok.com/@creator_a/video/7000000000000000001",
"https://www.tiktok.com/@creator_b/video/7000000000000000002"
],
"dedupe": false
}

Sample output

Per video row:

{
"type": "video",
"id": "7341108653442829601",
"url": "https://www.tiktok.com/@gordonramsayofficial/video/7341108653442829601",
"text": "Its curry in a hurry from #NextLevelKitchen !",
"createTime": "2024-02-29T19:31:02.000Z",
"duration": 87,
"cover": "https://p19-common-sign-useastred.tiktokcdn-eu.com/...",
"authorUsername": "gordonramsayofficial",
"authorNickname": "Gordon Ramsay",
"authorVerified": true,
"authorFollowers": 40900000,
"authorHearts": 727100000,
"authorVideoCount": 686,
"plays": 26900000,
"likes": 1900000,
"comments": 14400,
"shares": 101200,
"saves": 474125,
"hashtags": ["nextlevelkitchen"],
"musicId": "7341108705247382305",
"musicTitle": "original sound",
"musicAuthor": "Gordon Ramsay",
"musicOriginal": true,
"downloadAddr": "https://v16-webapp-prime.tiktok.com/video/...mp4"
}

Per profile row:

{
"type": "profile",
"id": "6747935906352907269",
"username": "gordonramsayofficial",
"nickname": "Gordon Ramsay",
"verified": true,
"signature": "I cook sometimes too.....",
"followers": 40900000,
"following": 571,
"hearts": 727100000,
"videoCount": 686
}

What you get back

flowchart LR
V[Video row] --> V1[Stats<br/>plays, likes,<br/>comments, shares,<br/>saves]
V --> V2[Author<br/>username, nickname,<br/>followers, hearts,<br/>verified]
V --> V3[Music<br/>id, title,<br/>author, original]
V --> V4[Content<br/>caption, hashtags,<br/>cover, duration]
V --> V5[Downloads<br/>video MP4 URL,<br/>subtitles]

Every row is self contained. No joins required.


Who uses this

RoleUse case
Brand marketerMeasure branded hashtag reach and UGC volume.
Talent agencyRank creators by followers, engagement, and video cadence.
Trend researcherSurface rising videos for a topic, sound, or niche.
Music labelTrack sound usage and top remix creators.
Social listening teamFeed TikTok signals into sentiment and share of voice models.
Ad buyerValidate creator reach and average plays before paying for a sponsorship.
Affiliate marketerFind high intent videos in a product category for outreach.

Input reference

FieldTypePurpose
videoUrlsstring[]Direct video URLs. Most reliable source.
profilesstring[]Usernames or profile URLs.
hashtagsstring[]Hashtag names, with or without #.
searchQueriesstring[]Keyword searches.
resultsPerPageintegerCap per source. Default 100.
profileScrapeSectionsenumvideos, reposts, liked, favorites.
searchSectionenumtop, videos, users, live.
downloadVideosbooleanSave MP4s and include a download URL per row.
downloadSubtitlesbooleanExtract auto captions. Paid add on.
subtitleLanguagesstring[]Preferred language codes, first match wins.
scrapeCommentsbooleanCollect top comments per video. Paid add on.
maxCommentsPerVideointegerCap on comments per video.
countryCodestringTwo letter ISO code. Changes geo ranking. Paid add on.
dedupebooleanSkip IDs already pushed in previous runs.
maxVideosTotalintegerHard cap across all sources. Default 500.
proxyConfigurationobjectApify proxy. Residential recommended.

API example

Call the actor from any backend. Swap in your Apify user and token.

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USER~tiktok-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profiles": ["gordonramsayofficial"],
"resultsPerPage": 30
}'

Poll the run, read the dataset. Or use the Apify client SDK in Node, Python, or PHP.


TikTok scraper alternatives compared

Official TikTok Research APICustom scraperThis actor
AccessGated, academic emailSelf hosted maintenanceAnyone with an Apify account
Setup timeWeeks of approvalDays of coding60 seconds
Video statsYesYes if you code itYes out of the box
Creator statsLimitedYes if you code itYes out of the box
Music dataNoYes if you code itYes out of the box
Video MP4 downloadNoYes if you code itYes, toggle on
Proxy and anti blockYour problemYour problemHandled
PricingN/AProxy + server billPay per video row

Pricing

First 10 videos per run are free so you can test the output before paying. After that you pay per video row. Profile rows, music fields, and hashtag arrays ride along at no extra cost. Subtitles, comments, and country filter are paid add ons billed per row when enabled.


FAQ

Is there a free TikTok API? TikTok's own Research API is gated to approved academics. This actor gives anyone public TikTok data with a pay per use model, no API key required.

How do I scrape TikTok without an API key? Pick a profile or a direct video URL, drop it in the input, hit Start. The actor handles headless Chromium, fingerprint rotation, and residential proxy for you.

Can I download TikTok videos as MP4? Yes. Turn on downloadVideos. Each row includes a downloadAddr link to the source MP4.

How accurate are TikTok follower counts? The counts come straight from TikTok's rendered profile response, same numbers a visitor sees in the web app. Accurate at the moment of the scrape.

Does it return TikTok comments? Yes. Enable scrapeComments and set maxCommentsPerVideo. The actor opens the comment drawer on each video and pulls the top comments.

Can I get TikTok video transcripts or subtitles? Yes. Enable downloadSubtitles and list preferred languages. The actor returns the caption track URL and language code when TikTok has auto captions available.

Does it work for private accounts? No. Only public profiles, hashtags, and videos.

Why do hashtag runs sometimes return zero videos? TikTok restricts anonymous hashtag browsing. Use profiles or videoUrls for reliable output. See the recommended workflow above.

Can I run this on a schedule? Yes. Use the Apify scheduler to run the actor hourly, daily, or weekly. Turn dedupe off if you want a fresh snapshot each run for trend tracking.

Does it work in any country? Set countryCode to the two letter ISO code. The actor matches the proxy locale and returns results as they appear to viewers in that country.

Is scraping TikTok allowed? This actor reads public HTML that any web visitor can see. Respect TikTok's terms and rate limit sensibly. Do not store or redistribute content you do not have the right to use.


  • Reddit Brand Monitor & Lead Finder for subreddit mentions and high intent leads
  • Google Maps Scraper for local business data and reviews
  • TripAdvisor Review Intelligence for hotel and restaurant review monitoring
  • Yelp Review Intelligence for local service reviews
  • Amazon Review Intelligence for product review tracking
  • Zillow Home Price Scraper for real estate listings and price history