TikTok Profile Scraper avatar

TikTok Profile Scraper

Pricing

$2.00 / 1,000 profile analyzeds

Go to Apify Store
TikTok Profile Scraper

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

Andrey Afanasenko

Maintained by Community

Actor stats

3

Bookmarked

125

Total users

14

Monthly active users

a day ago

Last modified

Share

Apify Actor

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=true plus 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:

SectionPurpose
🎯 Mode 1 / 2 / 3Pick a mode and provide its target inputs (target accounts or username list).
βš™οΈ Data Extraction OptionsWhich 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 OptionsResume from checkpoint, budget cap.

Highlights of the most useful fields (full reference in the input form):

  • operationMode β€” analyzeFollowersFollowing, analyzeSpecificAccounts, or analyzeEngagedAudience. 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 on recent or popular to fetch up to 20 caption strings as Post 1..Post N. Required for keywordLocation=posts or =anywhere.

πŸ’° Pricing

The actor uses Apify's Pay Per Event model with one single primary event:

EventPriceTriggered
Profile Analyzed$0.002Once 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 toPlanApprox cost
5Free$0.01 (well under free-plan ceiling)
100Free$0.20 (free-plan ceiling)
500Paid$1.00
1 000Paid$2.00
10 000Paid$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 planPaid plan
Profiles per runup to 100unlimited
Target accounts (Mode 1 & 3)up to 3unlimited
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 credityes

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 keyTypeWhat it holds
RUN_SUMMARYJSONAggregate run statistics β€” counts, plan, pricing, timings, success rate. Available after the run finishes.
TOTAL_ACCOUNTS_TO_PROCESSintegerTotal candidate count β€” written once after the discovery phase, before enrichment starts. Useful for ETA dashboards.
checkpoint-kvs-tiktok-limitedJSONLast batch index, spend so far, budget-exhausted flag. Read by the actor itself when resuming; safe to inspect.
checkpoint-dataset-tiktok-limiteddatasetOne 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 modesInstagram Profile Scraper
Instagram followers / following at scale (single account)Instagram Followers & Following Extractor
Instagram lookalike / suggested-profile discoveryInstagram Related Profiles Scraper
Real estate listings + agent contacts (Zillow)Zillow Property & Agent Data Scraper
YouTube channels for partnership outreachYouTube 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.