TikTok Profile Scraper
Pricing
$2.00 / 1,000 profile analyzeds
TikTok Profile Scraper
Scrape TikTok profiles by analyzing followers, following, or direct lists. Extract 20+ data points including engagement, language, and performance metrics. Powerful filters help you find influencers and analyze competitors.
Pricing
$2.00 / 1,000 profile analyzeds
Rating
0.0
(0)
Developer
Andrey Afanasenko
Maintained by CommunityActor stats
3
Bookmarked
140
Total users
19
Monthly active users
19 days ago
Last modified
Categories
Share
Discover, enrich, and filter TikTok creators at scale β three modes (followers/following expansion, specific-list enrichment, engaged-audience discovery from commenters) and 13 filters. $0.002 per profile with one single primary event so cost is predictable.
TikTok's official Research API requires institutional approval and limits the data you can pull. This actor reads any public TikTok profile and returns 20+ enrichment columns per row, including bio, business category, language, engagement rate, and email parsed from the bio.
π― What it does
You give the actor one or more TikTok account handles plus a mode, and it returns one row per discovered profile, fully enriched.
| Mode | Input | What it returns |
|---|---|---|
| 1. Followers / Following | 1β3 target accounts | All followers and/or following of each target, enriched. |
| 2. Specific list | A list of TikTok usernames you already have | Each username enriched (no follower scraping β straight enrichment). |
| 3. Engaged Audience | 1β3 target accounts | Unique commenters from each target's recent posts, enriched. Surfaces real, active people in the audience β high-intent leads. |
For every profile that comes back you get:
- Identity β Account URL, Full Name, Profile Picture, Verified flag.
- Audience β Followers Count, Following Count, Likes Count, Videos Count.
- Engagement β Median Views (recent), Most Viewed Video Plays, Avg. Shares (Recent), ER (incl. shares) (%) β formatted to two decimals.
- Recency β Last Post Date as ISO timestamp.
- Bio + classification β Biography, Profile Language (ISO 639-1), Category (TikTok business taxonomy).
- Optional contacts β Email parsed from bio, Website (bio link).
- Optional post sample β captions of the N most-recent or most-popular videos.
Then the actor applies your filters (followers band, engagement floor, language, category, verification, last-post recency, keyword match) so only profiles matching your target persona end up in the dataset.
π¦ Output sample
Every analyzed profile is pushed to the dataset as one item. Here's a real row:
{"Account": "https://tiktok.com/@therock","Profile Picture": "https://p16-sign.tiktokcdn-us.com/β¦/profile.jpeg","Full Name": "Dwayne Johnson","Followers Count": 78400000,"Following Count": 657,"Likes Count": 467000000,"Videos Count": 612,"Median Views": 4200000,"Most Viewed Video Plays": 38000000,"Avg. Shares (Recent)": 12500,"ER (incl. shares) (%)": "1.85","Last Post Date": "2026-04-01T14:00:00.000Z","Biography": "π¬ Actor & Producer | The Smashing Machine β in theaters now","Profile Language": "en","Verified": "Yes","Category": "Public Figure","Email": "press@example.com","Website": "https://www.example.com"}
Profiles with no posts return "No Content" for engagement-derived columns (Median Views, ER, Last Post Date, Profile Language, Avg. Shares, Most Viewed Video Plays). Missing optional values such as Email return "N/A" rather than null, so every base column is always present and downstream code can rely on a stable shape.
β‘ Quick start
- Paste this input into the Input tab in the Apify Console.
- Click Run β the first run takes 30β60 seconds.
- Open the Output tab β preview the dataset, export as JSON / CSV / Excel.
{"operationMode": "analyzeSpecificAccounts","specificUsernamesList": ["therock", "khaby.lame", "bella.poarch"],"maxCountList": 5,"extractEmail": true}
That's 3 well-known creators capped at 5 profiles β about $0.01.
π§ When to use it
- Influencer outreach β discover creators in a niche by category + language + follower band, then export emails for outreach.
- Lead generation from commenters (Mode 3) β surfaces real people actively engaging with a brand or competitor β high-intent warm leads.
- Competitor benchmarking (Mode 2) β paste a known list of competitor accounts and benchmark engagement, posting cadence, and audience size in one run.
- Audience expansion (Mode 1) β from one target account, expand into followers and follow-graphs to build a top-of-funnel list.
- Verified-only campaigns β
mustBeVerified: trueplus a follower minimum gives a celebrity / brand shortlist for sponsorship deals.
π Input
The input form is grouped into four sections:
| Section | Purpose |
|---|---|
| π― Mode 1 / 2 / 3 | Pick a mode and provide its target inputs (target accounts or username list). |
| βοΈ Data Extraction Options | Which enrichments to emit (email, website, post captions). |
| π¬ Advanced Filtering (Optional) | 11 filters that drop non-matching profiles before they're billed. |
| βΆοΈ Run & Storage Options | Resume from checkpoint, budget cap. |
Highlights:
operationModeβanalyzeFollowersFollowing,analyzeSpecificAccounts, oranalyzeEngagedAudience.maxCount/maxCountList/maxEngagedProfilesβ hard cost ceiling per mode (each profile = one $0.002 event).maxBudgetUsdβ alternative cost ceiling expressed in USD. The run stops when the budget is about to be exceeded.minFollowers/maxFollowersβ most-used filter (e.g. 1,000β10,000 for nano-influencers).minEngagementRatioβ typical B2B floor: 1β3 %. Highly engaged niches see 5β10 %.profileLanguagesβ restrict to one of 29 detected languages.postExtractionModeβrecentorpopularto fetch up to 20 caption strings asPost 1..Post N.
π° How much will scraping TikTok cost?
Pay-per-event with one single primary event:
| Event | Price | Triggered |
|---|---|---|
| Profile Analyzed | $0.002 | Once per profile that's successfully retrieved (live or from cache) and analyzed, regardless of whether it passes your filters. |
Per-profile billing β your per-mode cap translates directly to maximum spend.
| Cap | Plan | Approx cost |
|---|---|---|
| 5 | Free | $0.01 |
| 100 | Free | $0.20 (free-plan ceiling) |
| 500 | Paid | $1.00 |
| 1,000 | Paid | $2.00 |
| 10,000 | Paid | $20.00 |
Cap costs hard with Apify's "Maximum cost per run" Run option in the right panel. Tighter filters mean more profiles are retrieved before you find matches β be conservative with the per-mode cap when stacking many filters.
π Free vs paid plan
| Free plan | Paid plan | |
|---|---|---|
| Profiles per run | up to 100 | unlimited |
| Target accounts (Mode 1 & 3) | up to 3 | unlimited |
| Default budget cap | $5 | $1,000 (configurable) |
| All filters (followers, language, ER, category, β¦) | β | β |
| Resume from checkpoint | β | β |
| Single PPE event ($0.002 / profile) | counts toward free-tier credit | yes |
π§ͺ Filter recipes
Nano-influencer outreach (B2C beauty / fitness):
{"operationMode": "analyzeFollowersFollowing","targetUsernames": ["sephora"],"analyzeFollowers": true,"maxCount": 500,"minFollowers": 1000,"maxFollowers": 10000,"minEngagementRatio": 3,"lastPostDays": 30,"extractEmail": true,"filterForInfluencers": true}
Active English-speaking creators (Mode 2 enrichment of a known list):
{"operationMode": "analyzeSpecificAccounts","specificUsernamesList": ["β¦your 50 usernamesβ¦"],"maxCountList": 50,"profileLanguages": "English","lastPostDays": 14,"minMedianViews": 10000,"extractEmail": true}
B2B partnership shortlist via engaged commenters (Mode 3):
{"operationMode": "analyzeEngagedAudience","engagedAudienceTargetUsernames": ["competitor-handle"],"maxEngagedProfiles": 200,"filterForInfluencers": true,"accountType": "business","minEngagementRatio": 2,"extractEmail": true}
π Resume / checkpoint
Long runs can be interrupted (timeout, manual stop, abort). The actor writes a checkpoint to its key-value store after every batch and persists the per-account list to a checkpoint dataset. To resume, run the actor again with clearSavedData unchecked β already-processed profiles are not re-fetched and not re-billed.
π‘ Live status & storage records
While the run is in progress, the actor exposes:
| Storage key | What it holds |
|---|---|
RUN_SUMMARY | Aggregate run statistics β counts, plan, pricing, timings, success rate. |
TOTAL_ACCOUNTS_TO_PROCESS | Total candidate count β written once after discovery, before enrichment. Useful for ETA dashboards. |
checkpoint-kvs-tiktok-limited | Last batch index, spend so far, budget-exhausted flag. |
checkpoint-dataset-tiktok-limited | One row per processed username β used for resume. |
These are stable, machine-readable surfaces β pull them via the Apify API for dashboards or post-processing.
π€ Programmatic API
REST β start a run:
curl -X POST "https://api.apify.com/v2/acts/afanasenko~tiktok-profile-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"operationMode":"analyzeSpecificAccounts","specificUsernamesList":["therock","khaby.lame"],"maxCountList":2,"extractEmail":true}'
MCP / agentic clients (Claude Desktop, Cursor, ChatGPT, LangGraph, OpenAI Agents SDK, β¦):
The actor is exposed as a tool through Apify's MCP server at mcp.apify.com. Once your MCP-enabled client is connected to your Apify token, an LLM can search, inspect input + output schemas, and run the actor with natural-language instructions like "find 50 verified TikTok fitness creators with 10β50k followers and an engagement rate above 3 %".
π‘ Tips & Best Practices
Getting maximum results
- Start with Mode 2 to validate filter shape β paste 5 known accounts, check the output, then switch to Mode 1 or Mode 3 for discovery.
- Mode 3 (engaged audience) gives higher-intent leads than Mode 1's full follower list β commenters have already engaged with the target's content.
- Layer filters in order of impact: follower band β engagement floor β language β category. Each filter narrows the candidate pool before paid events fire.
Cost optimization
- At $0.002 per profile, this is the cheapest of all our actors β use a higher per-mode cap (500β1,000) for richer data without breaking the bank.
- Use Apify's Maximum cost per run Run option for a hard ceiling on top of
maxBudgetUsd. - Disable optional extractions when you don't need them:
extractEmail: false,extractWebsiteUrl: false,postExtractionMode: "none"β leaner output, same per-profile cost.
Performance
- Throughput is roughly 200β400 profiles/min depending on enrichments. A 100-profile run finishes in ~30 seconds; a 1,000-profile run in 4β6 minutes.
- Resume is automatic via
clearSavedData: falseβ use it instead of restarting from scratch on interrupted runs. - Mode 3 (engaged audience) is the slowest mode because it reads recent posts of each target before collecting commenters.
Data quality
Profile Languagereturns "N/A" when bio + posts are too short for reliable detection β common on dormant accounts."No Content"rows indicate the profile has no public videos. Account, Followers Count, Biography, Verified, and Category are still populated.- Trust verified accounts (
Verified: "Yes") over follower count alone β TikTok's verification gate filters most bot accounts.
β FAQ
Is it legal to scrape TikTok? Scraping public data is legal in most jurisdictions β see Β§ Is it legal to scrape TikTok? below. The actor only reads what's already public on the profile page; private user data is never touched.
Can I get banned for using this actor? No. The actor is the one making requests, not your account. Apify proxies rotate IPs upstream so individual users aren't fingerprinted.
How is engagement rate calculated?
((avg likes + avg comments + avg shares) / followers) * 100 over the user's ~35 most recent videos. The recent-window average is more representative than lifetime totals β engagement on TikTok decays steeply with account age.
What does "No Content" mean in my output? The profile has no public videos, so view-, share- and engagement-derived metrics can't be computed. The Account, Followers Count, Biography, Verified, and Category columns are still populated.
Why is Profile Language showing "N/A"?
Bio and post text combined were too short or too ambiguous (only emojis or hashtags) for reliable language detection. Active accounts with regular captions are detected reliably across 29 languages.
Can I resume an interrupted run?
Yes β uncheck Start a Fresh Run (set clearSavedData: false). The next run continues from the last successfully processed batch, and processed profiles are not re-billed.
Is the data live?
Every profile retrieved triggers a live request β there's no cross-run cache shared between users. Within a single resume sequence (clearSavedData: false), already-processed profiles are reused from the run's own checkpoint.
How many usernames can I pass to Mode 2? Free plan caps at 100 profiles per run total. Paid plan: unlimited. Mode 2 is the most efficient choice when you already have a list β no follower-scraping overhead.
Why am I being charged per profile, not per run? Pay-per-event lets you control spend tightly. Each profile retrieved triggers one $0.002 event; profiles that fail to retrieve (private, deleted, region-blocked) are not billed.
What happens if a target account is private? It's skipped during the discovery phase. You're not charged for the failed retrieval, and the username is recorded in the run summary so you can re-check later.
Why "N/A" instead of null for missing values?
Every output key is always present so Google Sheets, Airtable, and CSV consumers don't have to special-case missing fields. If you need null, it's a one-line transform in your post-processing.
How fast is it? Roughly 200β400 profiles per minute. A 100-profile run finishes in ~30 seconds; a 1,000-profile run in 4β6 minutes.
π Related actors
| Actor | Description |
|---|---|
| tiktok-profile-scraper | This actor β TikTok creator discovery and enrichment, 3 modes. |
| instagram-profile-scraper | Instagram profiles β 5-mode all-in-one (followers, list, expansion, keyword, location). |
| instagram-followers-scraper | Instagram followers / following only β single mode. |
| youtube-channel-scraper | YouTube channel discovery and enrichment for partnership outreach. |
| zillow-property-agent-data-scraper | Real-estate listings + agent contacts (Zillow). |
π Support & feedback
Found something useful, broken, or worth improving? Three ways to help and stay in the loop:
- β Leave a review on the Apify Store β if this actor saved you time, a quick review helps other users find it and helps the author prioritize.
- π Bookmark the actor β open Apify Console β click the β Save icon on the actor page so it shows up in your sidebar for the next run.
- π Open an issue on the actor's Apify Store page β bug reports, feature requests, and edge cases all welcome via the Issues tab.
βοΈ Is it legal to scrape TikTok?
Scraping publicly available data β including public TikTok profiles β is legal in the United States and most other jurisdictions. The seminal case is hiQ Labs v. LinkedIn (9th Cir. 2019, reaffirmed 2022), which held that scraping public web data does not violate the Computer Fraud and Abuse Act. See Apify's overview of web-scraping legality for a deeper read.
That said, three responsibilities sit with you:
- TikTok's Terms of Service β review and use the data in line with what they permit.
- Personal data laws (GDPR / CCPA / CAN-SPAM / similar) β public profiles still contain personal data; make sure you have a legitimate basis to process it, and respect contact preferences in any outreach (clear unsubscribe path, double opt-in for emails).
- Downstream use β TikTok's data is volatile (categories, ER, language detection drift); verify critical fields against the live profile before acting on them. The author makes no representation about accuracy or fitness for a specific purpose.
If unsure about a specific use case, consult legal counsel.