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
Actor stats
3
Bookmarked
125
Total users
14
Monthly active users
a day ago
Last modified
Categories
Share
Discover, enrich and filter TikTok profiles at scale. Three operation modes β followers/following expansion, specific-list enrichment, engaged-audience discovery from commenters. 13 filters across followers, language, engagement rate, business category, verification, and posting recency. Pay-per-event: $0.002 per profile analyzed.
π― What it does
You give the actor one or more TikTok account handles and a mode, and it returns one row per discovered profile, fully enriched. The three modes cover the most common discovery shapes:
- Mode 1 β Followers/Following. Pick 1β3 target accounts; the actor pulls their followers and/or following lists, then enriches every candidate with profile metrics, language, contacts, and engagement.
- Mode 2 β Specific List. Paste a list of TikTok usernames you already have; the actor enriches each one. No follower scraping β straight enrichment.
- Mode 3 β Engaged Audience. Pick 1β3 target accounts; the actor reads recent posts of each, collects unique commenters, drops empty accounts, and enriches the rest. Surfaces real, active people in the target's audience β high-intent leads, micro-influencers, niche participants.
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 as Post 1, Post 2, β¦ Post N.
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.
β‘ Quick start
A minimal input that works on the free plan (5 profiles, no extra setup) using Mode 2:
{"operationMode": "analyzeSpecificAccounts","specificUsernamesList": ["therock", "khaby.lame", "bella.poarch", "zachking", "charlidamelio"],"maxCountList": 5,"extractEmail": true,"extractWebsiteUrl": true}
Run it once, open the Storage β Dataset tab, and you'll see five profiles each with a full row of metrics. From there, switch to Mode 1 or Mode 3 to discover new profiles, and layer filters in the input form to narrow to your target.
π¦ What you get β output sample
Every analyzed profile is pushed to the dataset as one item. Here's a real row (truncated for readability):
{"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 the string "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.
The full per-field schema (types, descriptions, examples) is published in .actor/dataset_schema.json β that's also what AI agents see when they call the actor through Apify's MCP server.
π§ When to use it
- Influencer outreach. Discover creators in a niche by category + language + follower band, then export emails for outreach campaigns.
- Lead generation from commenters. Mode 3 surfaces real people actively engaging with a brand or competitor β high-intent warm leads.
- Competitor research. Paste a known list of competitor accounts (Mode 2) and benchmark engagement, posting cadence, audience size in one run.
- Audience expansion. From one target account (Mode 1), expand into followers and follow-graphs to build a top-of-funnel list.
- B2B partnerships. Filter by
accountType=business+ engagement floor + business category to shortlist brand-fit creators. - Local-market discovery. Filter by
profileLanguages+ bio keywords to find region-specific creators (e.g. French food bloggers, Hindi tech reviewers). - Verified-only campaigns.
mustBeVerified=trueplus a follower minimum gives a celebrity / brand shortlist. - Engagement quality audits. Sort dataset rows by
ER (incl. shares) (%)after the run to triage high- vs low-engagement creators in your list.
π 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). Off = skip the column β cleaner output. |
| π¬ Advanced Filtering (Optional) | 11 filters that drop non-matching profiles before they're billed. |
| βΆοΈ Run & Storage Options | Resume from checkpoint, budget cap. |
Highlights of the most useful fields (full reference in the input form):
operationModeβanalyzeFollowersFollowing,analyzeSpecificAccounts, oranalyzeEngagedAudience. Determines which target inputs are used.maxCount/maxCountList/maxEngagedProfilesβ hard cost ceiling per mode, in profiles. Each profile = one $0.002 event.maxBudgetUsdβ alternative cost ceiling expressed in USD. The run stops gracefully when the budget is about to be exceeded.minFollowers/maxFollowersβ most-used filter, set as a band (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β turn onrecentorpopularto fetch up to 20 caption strings asPost 1..Post N. Required forkeywordLocation=postsor=anywhere.
π° Pricing
The actor uses Apify's Pay Per Event model 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. |
You're billed per profile, not per API call. The cost ceilings (maxCount / maxCountList / maxEngagedProfiles) translate directly to your maximum spend.
Pricing math
| You set the cap to | Plan | Approx cost |
|---|---|---|
| 5 | Free | $0.01 (well under free-plan ceiling) |
| 100 | Free | $0.20 (free-plan ceiling) |
| 500 | Paid | $1.00 |
| 1 000 | Paid | $2.00 |
| 10 000 | Paid | $20.00 |
Tighter filters mean more profiles are retrieved and analyzed before you find matches, so be conservative with the per-mode cap if you stack 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 |
Upgrade to a paid plan to remove the per-run profile cap and run multi-target campaigns at scale.
π§ͺ Filter recipes
Common stacks that work well together:
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,"extractWebsiteUrl": true}
B2B partnership shortlist via engaged commenters (Mode 3)
{"operationMode": "analyzeEngagedAudience","engagedAudienceTargetUsernames": ["competitor-handle"],"maxEngagedProfiles": 200,"filterForInfluencers": true,"accountType": "business","minEngagementRatio": 2,"extractEmail": true,"extractWebsiteUrl": 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.
To start over from scratch (different target list, different filters), leave clearSavedData checked (the default).
π‘ Live status & storage records
While the run is in progress, the actor exposes:
| Storage key | Type | What it holds |
|---|---|---|
RUN_SUMMARY | JSON | Aggregate run statistics β counts, plan, pricing, timings, success rate. Available after the run finishes. |
TOTAL_ACCOUNTS_TO_PROCESS | integer | Total candidate count β written once after the discovery phase, before enrichment starts. Useful for ETA dashboards. |
checkpoint-kvs-tiktok-limited | JSON | Last batch index, spend so far, budget-exhausted flag. Read by the actor itself when resuming; safe to inspect. |
checkpoint-dataset-tiktok-limited | dataset | One row per processed username. Used for resume; also the source of truth for "what's already been done in this run". |
These are stable, machine-readable surfaces β pull them via the Apify API for dashboards or post-processing.
π€ Programmatic / API use
Run the actor from your own code or AI agent:
REST API (start a run, poll for completion):
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, ChatGPT, Cursor, LangGraph, OpenAI Agents SDK, Mastra, β¦):
The actor is automatically 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 %".
β FAQ
Q: How is engagement rate calculated?
A: ((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.
Q: What does "No Content" mean in my output? A: 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.
Q: Why is Profile Language showing "N/A"?
A: Bio and post text combined were too short or too ambiguous (only emojis or hashtags) for reliable language detection. We return "N/A" rather than guess wrong. Active accounts with regular captions are detected reliably across 29 languages.
Q: Can I resume an interrupted run?
A: 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.
Q: Is the data live?
A: 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.
Q: How many usernames can I pass to Mode 2? A: 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.
Q: Why am I being charged per profile, not per run? A: Pay-per-event lets you control spend tightly. Each profile that's successfully retrieved triggers one $0.002 event; profiles that fail to retrieve (private, deleted, region-blocked) are not billed.
Q: What happens if a target account is private? A: 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.
Q: Can I download follower lists without enrichment?
A: Not directly β every candidate is fetched and enriched. If you only need raw username lists, set the per-mode cap low and disable optional extractions (extractEmail=false, extractWebsiteUrl=false, postExtractionMode="none"); you still pay per profile but the output is leaner.
π Other Apify actors (same author)
If your project spans multiple platforms, these scrapers from the same author are tuned for different sources:
| You want to scrape⦠| Use this actor |
|---|---|
| Instagram profiles, deep enrichment, multiple discovery modes | Instagram Profile Scraper |
| Instagram followers / following at scale (single account) | Instagram Followers & Following Extractor |
| Instagram lookalike / suggested-profile discovery | Instagram Related Profiles Scraper |
| Real estate listings + agent contacts (Zillow) | Zillow Property & Agent Data Scraper |
| YouTube channels for partnership outreach | YouTube Channel Scraper |
π Support & feedback
- Open an issue on the actor's Issues tab in Apify Console β fastest way to get a fix shipped.
- Feature requests in the same tab; we read every one.
- Ratings & reviews on the Apify Store page help other users find the actor.
βοΈ Disclaimer
This actor scrapes publicly available profile data from TikTok. It does not bypass authentication, scrape private profiles, or interact with content on your behalf. Use it in compliance with TikTok's Terms of Service and applicable privacy laws (GDPR, CCPA) β for outreach lists, ensure you have a legitimate interest and a clear unsubscribe path. The contact information returned (emails, websites) is what the profile owner has chosen to make public on TikTok.