TikTok Data Scraper: Creator & Audience Leads
Pricing
from $4.99 / 1,000 results
TikTok Data Scraper: Creator & Audience Leads
Scrape TikTok data including videos, profiles, captions, hashtags, comments, likes, shares, views, music, and engagement metrics. Perfect for trend analysis, influencer research, competitor monitoring, lead generation, and social media analytics.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
TikTok Scraper — Extract Videos, Profiles and Creator Leads as JSON
TikTok Data Scraper: Creator & Audience Leads pulls public TikTok videos, profiles, comments and replies from any hashtag, search term, sound, playlist or profile — then turns the same run into a bulk creator and audience-lead list, automatically enriched with bio, verified status, follower count, and any email, website or social handle it can parse straight out of the bio. Every response is typed, normalized JSON — no HTML, no CSS selectors, no parsing step before you index it or hand it to an agent. After reading this page you'll know exactly which input fields to fill in, what every output record looks like, and where the scraper's real limits are.
🧭 What is TikTok Data Scraper: Creator & Audience Leads?
TikTok Data Scraper: Creator & Audience Leads is an Apify Actor that collects public TikTok data — videos, profiles, comments/replies, hashtag/music/playlist feeds and single-video details — and layers an auto-discovery lead-generation step on top: every unique creator and commenter your run touches is fetched or read from the results and promoted to its own enriched lead record. No TikTok account, login or cookies are required — it runs over a direct HTTPS connection by default and only escalates to a proxy if TikTok's data source pushes back. Every input parameter and output field is exposed through the standard Apify API, so an agent framework can call it as a plain HTTP tool with no custom integration.
- 🎬 Scrape videos from hashtags, search terms, music, playlists, profiles, favourites, or a bare video ID
- 👤 Scrape profile data — bio, follower/following counts, verified status, cross-platform handles
- 💬 Scrape comments and threaded replies on any video
- 🕵️ Auto-discover creator and commenter leads from the results, enriched with contact-adjacent bio data
- 📤 Export as JSON, CSV, Excel or XML directly from the Apify dataset
📊 What data does TikTok Data Scraper: Creator & Audience Leads collect?
The Actor returns four structurally distinct record types in one dataset, distinguished by the section/category envelope fields:
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Videos | title, play/like/comment/share/download/save counts, publish date, HD no-watermark link, sound info | data.title, data.play_count, data.digg_count, data.comment_count, data.share_count, data.hdplay, data.publishedAt, data.music_info |
| Profiles | username, nickname, bio, verified flag, follower/following/heart/video counts, bio link, cross-platform handles | data.uniqueId, data.signature, data.verified, data.stats.followerCount, data.bioLink.link, data.ins_id, data.twitter_id |
| Comments & replies | comment text, like count, reply count, commenter nickname/bio/verified flag/follower count | data.text, data.digg_count, data.reply_total, data.user.signature, data.user.verified, data.user.follower_count |
| Creator & audience leads | verified flag, follower count, bio, extracted email/website, bio link, Instagram/Twitter/YouTube handles, discovery source | data.extractedEmail, data.extractedWebsite, data.bioLink, data.instagramId, data.twitterId, data.discoveredFrom |
Need more TikTok data?
If your workflow needs TikTok Shop product and creator data specifically, or aggregated trending-creator insights by market and hashtag rather than raw video/comment collection, API-Empire also publishes a TikTok Shop Data Scraper (creator & video details) and a TikTok Trending Creator Insights Scraper (with market hashtags) as separate, purpose-built Actors.
⚖️ How does TikTok Data Scraper differ from the official TikTok API?
TikTok's official Display API only returns data for the single TikTok account that has explicitly logged in and authorized your app; TikTok Data Scraper: Creator & Audience Leads returns data for any public creator, hashtag, sound, playlist or video you point it at, with no TikTok login at all.
| Feature | TikTok Display API | TikTok Data Scraper: Creator & Audience Leads |
|---|---|---|
| Access model | OAuth login by the account owner via Login Kit | No TikTok login — reads public pages directly |
| Whose data is returned | Only the authenticated user's own profile and videos | Any public creator, hashtag, sound, playlist or video |
| Search & discovery | No hashtag or search endpoint documented | Hashtag, keyword search, music and playlist discovery built in |
| Comments | Not exposed by the API | Video comments and nested replies, with commenter-lead extraction |
| Lead enrichment | Not applicable — user-permissioned data only | Auto-discovers and enriches creator/commenter leads from results |
| Approval process | App review plus per-user OAuth consent before any data flows | Starts immediately from the Apify Console |
(Display API scope and access model as published on TikTok's own developer documentation, checked 2026-08-04.)
Use the official Display API when you're building a feature that shows a consenting user their own TikTok content inside your app. Use TikTok Data Scraper: Creator & Audience Leads when you need public data about other creators, hashtags or videos at scale — that is precisely what the Display API cannot do.
🎯 Why do developers and teams scrape TikTok?
For marketers and brand teams
Point the Actor at a campaign hashtag or a competitor's sound and turn on 🕵️ Auto-discover creator leads to get a ranked list of every creator already posting in that space, complete with followerCount, verified and any extractedEmail/extractedWebsite parsed from their bio. Filter with onlyVerifiedLeads and minLeadFollowerCount before a single outreach message goes out, instead of hand-collecting handles from the app.
For AI engineers and agent builders
Because every record ships as a stable JSON envelope (section, category, data), you can push video and comment records straight into a vector store for a TikTok-trend RAG index, or wire the Actor as a tool call inside an agent loop that answers "who is talking about <hashtag> and how do I reach them" without writing a single HTML parser.
For researchers and analysts
videosPerHashtag/scrapeAllHashtagVideos combined with data.play_count, data.digg_count and data.publishedAt let you build a time-series view of engagement on a topic across only publicly posted videos — no private accounts, no login-gated data, no engagement estimates.
For developers building data products
The leads dataset view (leadSource, discoveredFrom, sourceVideoId) is designed to feed a CRM import or a scheduled monitoring pipeline directly: run the Actor on a schedule against a set of hashtags or sounds, and pipe new dataset items into your own lead-scoring or notification system via a webhook.
🪜 How to scrape TikTok (step by step)
- Open TikTok Data Scraper: Creator & Audience Leads on its Apify Store listing and click Try for free / Start.
- Provide at least one source —
userUrls,videoUrlsComments,hashtags,musicUrls,playlistIDsorvideoDetailsList. No field is strictly required by the input schema, but the Actor logs a warning and exits if every source list is empty. - Pick which content to collect for each user source via
categories(e.g.videos,search,user_info), and turn ondiscoverCreatorLeadsand/ordiscoverCommenterLeadsif you want the lead-list layer. - Click Start and watch the live log for per-source progress (
📹 videos — N collected …,🎯 Lead discovery: …). - Open the Output tab, switch to the view that matches what you need (Videos, Comments & Replies, Users & Following, or Creator & Audience Leads), and export as JSON, CSV, Excel or XML.
What to do when TikTok changes its structure
The scraper is actively maintained against the underlying data source's response format, and the output envelope (section, category, input, user, userType, data) is designed to stay stable across upstream changes, so downstream integrations built on these field names keep working without a rewrite.
⬇️ Input
All 28 input parameters are optional — fill in only the section(s) you need and leave the rest empty. Read directly from .actor/actor.json:
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
userUrls | No | array | One or more profiles. Accepts a full URL, @handle, plain username or numeric user ID. | ["https://www.tiktok.com/@taylorswift"] |
categories | No | array | Which content to collect per profile above. Enum: videos, favourite_videos, followers, following, search, user_info. Multiple selections supported. Default ["videos"]. Note: followers is not exposed by the underlying data source for any profile — enabling it logs an explicit notice instead of silently returning nothing. | ["videos", "user_info"] |
maxUserResults | No | integer | Maximum items per profile/section. Minimum 1. Ignored when scrapeAllUserResults is on. Default 10. | 100 |
scrapeAllUserResults | No | boolean | Ignore the limit above and collect everything available for each profile. Default false. | false |
videoUrlsComments | No | array | TikTok video URLs or IDs to scrape comments from. | ["https://www.tiktok.com/@user/video/7300000000000000000"] |
commentsPerUrl | No | integer | Maximum comments per video. Minimum 1. Ignored when scrapeAllComments is on. Default 10. | 50 |
scrapeAllComments | No | boolean | Collect every available comment per video (slower, more usage). Default false. | false |
repliesPerComment | No | integer | Maximum replies per comment. Minimum 0. 0 skips replies entirely. Ignored when scrapeAllReplies is on. Default 0. | 10 |
scrapeAllReplies | No | boolean | Collect every available reply for each comment (slower, more usage). Default false. | false |
hashtags | No | array | TikTok hashtag names or URLs to scrape videos from. | ["dance"] |
videosPerHashtag | No | integer | Maximum videos per hashtag. Minimum 1. Ignored when scrapeAllHashtagVideos is on. Default 10. | 100 |
scrapeAllHashtagVideos | No | boolean | Collect every available video for each hashtag (slower, more usage). Default false. | false |
hashtagRegion | No | string | Two-letter country code used for localization (e.g. US, GB, IN). Pattern ^[A-Za-z]{2}$. Default "US". | "GB" |
musicUrls | No | array | TikTok music URLs or IDs to scrape videos from. | ["https://www.tiktok.com/music/original-sound-123456789"] |
videosPerMusic | No | integer | Maximum videos per music track. Minimum 1. Ignored when scrapeAllMusicVideos is on. Default 10. | 50 |
scrapeAllMusicVideos | No | boolean | Collect every available video for each music track (slower, more usage). Default false. | false |
playlistIDs | No | array | TikTok playlist (mix) IDs to scrape videos from. | ["7123456789012345678"] |
videosPerPlaylist | No | integer | Maximum videos per playlist. Minimum 1. Ignored when scrapeAllPlaylistVideos is on. Default 10. | 50 |
scrapeAllPlaylistVideos | No | boolean | Collect every available video for each playlist (slower, more usage). Default false. | false |
videoDetailsList | No | array | TikTok video IDs or URLs to retrieve full details for. | ["7300000000000000000"] |
discoverCreatorLeads | No | boolean | When on, every unique creator whose videos appear in your Hashtag, Search, Music, Playlist, User-videos or User-favourites results is fetched once (profile lookup) and promoted to a creator-lead row with bio, bioLink, verified status, follower count and Instagram/Twitter/YouTube handles. Default false. | true |
discoverCommenterLeads | No | boolean | When on, every unique commenter and replier found while collecting comments is promoted to its own audience-lead row, using data already present on the comment (no extra requests). Default false. | true |
onlyVerifiedLeads | No | boolean | When on, only creator/commenter leads carrying a verified TikTok badge are kept; unverified leads are dropped before saving. Default false. | false |
minLeadFollowerCount | No | integer | Skip creator/commenter leads with fewer followers than this. Minimum 0. TikTok frequently reports 0 for a commenter's own follower count on the comment payload — leave at 0 to keep everyone. Default 0. | 1000 |
maxDiscoveredLeads | No | integer | Stop discovering new creator/commenter leads once this many have been saved in this run. Minimum 0. 0 = unlimited. Default 0. | 500 |
minRequestInterval | No | number | Seconds to wait between consecutive requests. Lower is faster but more likely to be rate-limited. Minimum 0, maximum 10. Default 1.2. | 1.2 |
maxRetries | No | integer | How many times to retry a failed/blocked request before giving up. Minimum 0, maximum 10. Default 3. | 3 |
apiKey | No | string | Optional third-party key that lifts the rate limit for faster collection. Leave empty for the free tier. Default "". | "" |
proxyConfiguration | No | object | By default the scraper runs without a proxy. If TikTok blocks the direct connection, it automatically escalates: datacenter → residential, then sticks with residential. You can also force a proxy here. Default {"useApifyProxy": false}. | {"useApifyProxy": false} |
Example JSON input:
{"userUrls": ["https://www.tiktok.com/@taylorswift"],"categories": ["videos", "user_info"],"maxUserResults": 100,"scrapeAllUserResults": false,"videoUrlsComments": ["https://www.tiktok.com/@user/video/7300000000000000000"],"commentsPerUrl": 50,"scrapeAllComments": false,"repliesPerComment": 10,"scrapeAllReplies": false,"hashtags": ["dance"],"videosPerHashtag": 100,"scrapeAllHashtagVideos": false,"hashtagRegion": "US","musicUrls": [],"videosPerMusic": 10,"scrapeAllMusicVideos": false,"playlistIDs": [],"videosPerPlaylist": 10,"scrapeAllPlaylistVideos": false,"videoDetailsList": [],"discoverCreatorLeads": true,"discoverCommenterLeads": true,"onlyVerifiedLeads": false,"minLeadFollowerCount": 1000,"maxDiscoveredLeads": 500,"minRequestInterval": 1.2,"maxRetries": 3,"apiKey": "","proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: the per-section limit descriptions (maxUserResults, commentsPerUrl, videosPerHashtag, videosPerMusic, videosPerPlaylist) mention "Minimum 40" in their text, but the schema itself only enforces a minimum of 1 — small values like 5 are accepted and run fine. The practical reason to give each section more room anyway is that discoverCreatorLeads/discoverCommenterLeads can only enrich creators and commenters who actually show up in the results you collect, so a very small per-section limit also caps how many leads a run can find.
⬆️ Output
Every record is typed, normalized JSON pushed live to the Actor's default dataset in a consistent envelope — section, category, input, user, userType, data — so the four entity types below sit in one dataset and can still be told apart. Export from the Output tab as JSON, CSV, Excel or XML, or pull it via the Apify API.
Scraped video
{"section": "hashtags","category": "videos","input": "dance","user": "dance","userType": "hashtag","data": {"aweme_id": "7647758735229635871","video_id": "7647758735229635871","region": "US","title": "learning this dance trend","content_desc": "learning this dance trend","cover": "https://p16-sign.tiktokcdn-us.com/cover.jpeg","duration": 24,"play": "https://www.tikwm.com/video/media/play/....mp4","wmplay": "https://www.tikwm.com/video/media/wmplay/....mp4","hdplay": "https://www.tikwm.com/video/media/hdplay/....mp4","size": 3456789,"wm_size": 3987654,"music": "https://www.tikwm.com/video/media/music/....mp3","music_info": { "id": "7647111222333444555", "title": "original sound", "author": "dancecrew" },"play_count": 13686605,"digg_count": 2579867,"comment_count": 34525,"share_count": 18820,"download_count": 9021,"collect_count": 55210,"create_time": 1749132608,"is_ad": false,"author": { "id": "6829872634826752005", "unique_id": "dancecrew", "nickname": "Dance Crew" },"publishedAt": "2026-06-05T14:10:08Z","videoUrl": "https://www.tiktok.com/@dancecrew/video/7647758735229635871","profileUrl": "https://www.tiktok.com/@dancecrew","hashtagUrl": "https://www.tiktok.com/tag/dance","scrapedAt": "2026-08-04T09:12:41Z"}}
Scraped profile
{"section": "users","category": "user_info","input": "https://www.tiktok.com/@taylorswift","user": "taylorswift","userType": "unique_id","data": {"id": "6584390436051502085","unique_id": "taylorswift","uniqueId": "taylorswift","nickname": "Taylor Swift","avatar": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg","signature": "New music out now! Link below","verified": true,"bioLink": { "link": "taylorswift.lnk.to/newalbum" },"ins_id": "taylorswift","twitter_id": "taylorswift13","youtube_channel_id": null,"stats": {"followerCount": 123456789,"followingCount": 1,"heartCount": 987654321,"videoCount": 42},"profileUrl": "https://www.tiktok.com/@taylorswift","scrapedAt": "2026-08-04T09:12:41Z"}}
Scraped comment
{"section": "videos","category": "comments","input": "https://www.tiktok.com/@user/video/7300000000000000000","user": "7300000000000000000","userType": "video_id","data": {"id": "7300000000000111222","text": "this made my whole week","digg_count": 412,"reply_total": 3,"create_time": 1749200000,"publishedAt": "2026-06-06T09:06:40Z","user": {"id": "6900000000000000001","unique_id": "viewer123","nickname": "viewer123","signature": "just here for the videos","verified": false,"follower_count": 0,"region": "US"},"profileUrl": "https://www.tiktok.com/@viewer123","scrapedAt": "2026-08-04T09:12:41Z"}}
Discovered creator or audience lead
{"section": "leads","category": "creator_lead","input": "hashtags:dance","user": "dancecrew","userType": "unique_id","data": {"leadSource": "creator_discovery","id": "6829872634826752005","uniqueId": "dancecrew","nickname": "Dance Crew","signature": "Bookings: hello@dancecrew.com","verified": true,"region": "US","followerCount": 245000,"followingCount": 180,"heartCount": 5100000,"videoCount": 612,"bioLink": "https://linktr.ee/dancecrew","extractedEmail": "hello@dancecrew.com","extractedWebsite": "https://linktr.ee/dancecrew","instagramId": "dancecrew","twitterId": null,"youtubeChannelId": null,"youtubeChannelTitle": null,"avatar": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg","profileUrl": "https://www.tiktok.com/@dancecrew","discoveredFrom": "hashtags:dance","sourceVideoId": null,"scrapedAt": "2026-08-04T09:12:41Z"}}
extractedEmail and extractedWebsite are null, never fabricated, whenever a bio genuinely contains none — and heartCount/videoCount/bioLink are correctly null on commenter leads specifically, because a comment payload never carries those fields (only a full profile lookup does, which is what creator-lead discovery performs and commenter-lead discovery deliberately skips to avoid extra requests).
🆚 How does TikTok Data Scraper compare to other TikTok scrapers?
| Feature | TikTok Data Scraper: Creator & Audience Leads | Generic alternative |
|---|---|---|
| Output format | Typed JSON per entity, one stable envelope | Often raw HTML or inconsistent JSON needing custom parsing |
| Entity coverage | Videos, profiles, comments/replies, hashtag/music/playlist feeds and leads in one Actor | Usually one entity type per tool; several tools needed for the same coverage |
| Lead enrichment | Built-in creator/commenter discovery with bio email/website parsing | Typically a separate lead-enrichment tool |
| Proxy/anti-bot handling | Automatic direct → datacenter → residential escalation, handled internally | Often left to the user to configure |
| Schema stability | One envelope shape across every entity type; null when a field genuinely isn't available | Varies by tool; some backfill placeholder values instead of null |
If you're building an AI agent or RAG pipeline, the output-format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature.
🔢 How many results can you scrape with TikTok Data Scraper: Creator & Audience Leads?
There is no hard cap in the Actor itself: every per-section limit (maxUserResults, commentsPerUrl, videosPerHashtag, videosPerMusic, videosPerPlaylist) defaults to 10 but accepts any positive integer, and each has a scrapeAll* toggle that removes the limit entirely and pages until the data source reports no more results. maxDiscoveredLeads works the same way for the lead-discovery layer — 0 means unlimited, bounded only by how many unique creators/commenters the run actually encounters. Pagination is cursor-based: video/user feeds request 35 items per page and comment/reply feeds request 50 per page internally, walking the source's cursor until it stops returning new items.
⚠️ The one real constraint worth planning around: requests are processed one source at a time inside a run (an internal concurrency limit of 1), spaced by minRequestInterval (default 1.2s, configurable 0–10s). Queuing many hashtags, users or videos in a single run doesn't parallelize them — total run time scales with the number of sources times the items requested per source, not just with your largest single limit.
🔌 Integrate TikTok Data Scraper: Creator & Audience Leads and automate your workflow
TikTok Data Scraper: Creator & Audience Leads works with any language or tool that can send an HTTP request to the Apify API.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("<ACTOR_ID>").call(run_input={"hashtags": ["dance"],"videosPerHashtag": 100,"discoverCreatorLeads": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["section"], item["category"], item.get("data", {}).get("uniqueId"))
Works in Python, Node.js, Go, Ruby, cURL — replace <ACTOR_ID> with the Actor's ID or username/actor-name slug shown on its Apify Store page.
Automation platforms (n8n, Make, LangChain)
In n8n, the official Apify node can run this Actor and pass its dataset items directly into the rest of your workflow. In Make, the Apify app's "Run Actor and Get Dataset Items" module does the same. In LangChain, apify-client-based tools (or the ApifyActorsTool integration) can call this Actor by ID and feed the returned JSON straight into an agent's tool-response loop, with no HTML-parsing step in between.
⚖️ Is it legal to scrape TikTok?
Yes — TikTok Data Scraper: Creator & Audience Leads only collects data that is already publicly visible on TikTok: public profiles, public videos, public comments, and bio text that a creator chose to publish themselves. Because the output includes personal data — usernames, bios, follower counts, and any email or social handle parsed out of a bio — GDPR and CCPA (and equivalent regional laws) govern how you may store, process and use it once collected, not TikTok's Terms of Service alone. You are responsible for having a lawful basis for that use, particularly before running outreach campaigns against discovered leads. Consult legal counsel for commercial use cases involving bulk personal data.
❓ Frequently asked questions
Does TikTok Data Scraper work without a TikTok account?
Yes. No TikTok login, cookies or account is required — the Actor connects directly to public TikTok data over HTTPS and only adds a proxy if the connection is blocked.
How often is the scraped data updated?
Every run performs a live fetch against the data source at the time you start it; nothing is served from a cache, so results reflect the platform at run time.
What happens if a video, hashtag, playlist or user no longer exists?
The Actor logs a warning and skips that source rather than erroring out the whole run — other sources in the same run are unaffected. Two known cases are logged explicitly rather than failing silently: the followers category returns 0 items for every profile because the underlying data source doesn't expose a followers list at all (following works normally), and the videos category can hit a persistent Cloudflare challenge on its primary route, in which case the Actor automatically falls back to a slower direct-to-TikTok.com collection path before giving up.
Can I scrape private TikTok accounts or restricted content?
No. Only publicly accessible profiles, videos and comments are returned — there is no login flow in this Actor that could access private or restricted content.
How is usage billed on this Actor?
Every dataset record — every video, profile, comment, reply, and every discovered creator or commenter lead — is billed once under the Actor's row_result pay-per-event when it's successfully saved to the dataset. There's no separate charge for records that fail to save.
Does TikTok Data Scraper work for AI agent workflows and LLM pipelines?
Yes. It's callable as a plain HTTP endpoint through the Apify API by any agent framework — every response is typed JSON with stable field names, so there's no parsing step before passing results into an LLM context window or a vector store.
How does TikTok Data Scraper handle TikTok's anti-bot system?
It starts on a direct, no-proxy connection and paces requests with a configurable minimum interval (minRequestInterval). If a request is blocked or rejected, it escalates through a datacenter proxy and then a residential proxy, sticking with residential once engaged, and retries individual requests up to maxRetries times. If the primary data source's videos route hits a persistent Cloudflare challenge specifically, it falls back to a stealth-browser session against tiktok.com itself rather than giving up.
How does TikTok Data Scraper compare to other TikTok scrapers?
See the comparison table above — the observable differences are entity coverage (this Actor returns videos, profiles, comments/replies and leads from one run), built-in lead enrichment, and a single stable output envelope across all of them.
Does TikTok Data Scraper return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names — no HTML, no selectors, no parsing. Pass it directly into an LLM context window, index it into a vector store, or route it through an agent tool call.
Can I use TikTok Data Scraper without managing proxies?
Yes. By default it runs with no proxy at all and only escalates to Apify's datacenter and residential proxies automatically when needed. You can also supply your own proxyConfiguration to force a specific setup.
What happens when TikTok changes its structure or blocks the scraper?
The scraper is actively maintained, and the output envelope's field names and types are designed to stay stable on your end even when the underlying collection logic has to change to keep working.
💬 Your feedback
Found a bug or missing a field? We want to know. Open an issue on the Actor's Issues tab in Apify Console — it's the fastest way to reach the maintainers, and it directly shapes what gets fixed and added next.