TikTok Influencer Vetting API - Modash Alternative · Apify
TikTok Profile Scraper (Engagement Rate & Brand Deals) avatar

TikTok Profile Scraper (Engagement Rate & Brand Deals)

Pricing

from $16.50 / 1,000 creator reports

Go to Apify Store
TikTok Profile Scraper (Engagement Rate & Brand Deals)

TikTok Profile Scraper (Engagement Rate & Brand Deals)

Scrape TikTok creator profiles plus their recent public videos into one row each: followers, likes, engagement rate, median views, posting cadence, top hashtags and brand-deal share. Same formula for every creator. Not-found accounts are free. No login. $30 per 1,000 creator reports.

Pricing

from $16.50 / 1,000 creator reports

Rating

0.0

(0)

Developer

locaihost data

locaihost data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Features

Limited permissions

Share

Check TikTok creators before you book them. Give it handles or profile URLs and get one row per creator: the public profile, plus engagement rate, median views, posting cadence, top hashtags and brand-deal share worked out from their recent public videos. Export as JSON, CSV or Excel. No login, no cookies.

What people use it for:

  • Checking a creator before a campaign: engagement per view, days since the last post, and the share of recent posts that are sponsored.
  • Comparing a shortlist. Every creator is measured with the same formulas, so the numbers line up.
  • Re-checking a roster each month: followers, cadence and paid-deal share for the creators you already work with.
  • Feeding an influencer platform or an AI agent: a list of handles in, the same columns out for every creator.

Quick start

Paste this into the JSON tab of the input and click Start:

{"handles": ["khaby.lame", "@duolingo", "https://www.tiktok.com/@nba"]}

You get 3 creator reports in about a minute (creators are checked in parallel, so 6 creators take about as long as 3). Handles, @handles, profile URLs and video URLs all work; the same creator listed twice is fetched and charged once.

Output

GroupFields
Statusstatus, statusMessage, reportType, videosStatus, input
Profilehandle, nickname, bio, bioLink, bioLinkUrl, verified, profileUrl, userId, secUid, language, createdAt, avatarUrl + avatarUrlExpiresAt
Account typeisBusinessAccount, businessCategory, isTikTokShopSeller, isOrganization
CountsfollowerCount, followingCount, heartCount (total likes), videoCount, countsExact
Analyticsanalytics.engagementRate, engagementRatePerFollower, medianViews, avgViews, viewsPerFollower, postingCadencePerWeek, daysSinceLastPost, brandDealRate, brandDealVideoIds, topHashtags, lifetimeLikesPerVideo, lifetimeLikesPerFollower, videosAnalyzed, windowStart, windowEnd
Recent videosrecentVideos[]: url, createdAt, description (caption), views, likes, comments, shares, saves, durationSec, hashtags, paidPartnership, isAd, musicTitle, musicAuthor, musicOriginal, isSlideshow, slideshowImageCount

How the analytics are worked out:

FieldWhat it means
engagementRate(likes + comments + shares) ÷ views over the analysed videos, weighted by views. Saves are not counted
engagementRatePerFollowerAverage interactions per video ÷ followers
medianViews, avgViewsTypical views per video. The median isn't skewed by one viral post
viewsPerFollowerMedian views ÷ followers: the share of followers a typical post reaches
postingCadencePerWeekVideos per week from the oldest analysed video to now, never over less than one week
brandDealRateShare of posts with TikTok's "Paid partnership" label, TikTok's ad flag, or a disclosure hashtag such as #ad, #sponsored or #brandpartner
topHashtagsThe hashtags used most, with how many videos use each

Pinned videos are left out of every number: they are a showcase and can be years old.

One real row (run on 2026-10-18, shortened; recentVideos holds the 30 videos behind the numbers):

{
"handle": "duolingo",
"status": "ok",
"reportType": "creator-report",
"profileUrl": "https://www.tiktok.com/@duolingo",
"nickname": "Duolingo",
"bioLinkUrl": "https://duolingo.com/",
"verified": true,
"isOrganization": true,
"isBusinessAccount": true,
"businessCategory": "Shopping & Retail",
"followerCount": 18266486,
"heartCount": 505437895,
"videoCount": 1203,
"countsExact": true,
"videosStatus": "included",
"analytics": {
"videosAnalyzed": 30,
"engagementRate": 0.170582,
"medianViews": 618950,
"viewsPerFollower": 0.033884,
"postingCadencePerWeek": 5.62,
"daysSinceLastPost": 4.5,
"brandDealRate": 0,
"topHashtags": [{"tag": "le_sserafim", "videos": 4}, {"tag": "duolingo", "videos": 1}]
},
"recentVideos": [{"url": "https://www.tiktok.com/@duolingo/video/7696211706317409550", "createdAt": "2026-10-13T17:52:19.000Z", "views": 2200000, "likes": 444600, "comments": 7012, "shares": 81000, "saves": 49960, "durationSec": 12, "paidPartnership": false}]
}

Every creator you list gets a row, and status says what happened:

statusMeaningCharged
okProfile read (reportType says whether as a creator report or a profile)Yes
not-foundNo account uses this handle (or it was renamed)No
privatePrivate account. The row carries nothing else about itNo
unavailableBanned, restricted or deactivatedNo
blockedTikTok blocked the request, even after switching proxy. Try again laterNo
errorThe page couldn't be readNo

Per video, musicTitle and musicAuthor name the sound, musicOriginal is true for a sound a TikTok user uploaded ("original sound") and false for (mostly) a track from TikTok's licensed music library, and isSlideshow marks a photo post, with slideshowImageCount images. Whether a video tags a TikTok Shop product isn't returned: the public video list we read didn't show it.

The dataset has three views (Creators, Recent videos, and One row per video for outputShape: "videos") and exports to JSON, CSV, Excel or HTML. The run's SUMMARY record counts creators by status.

One row per video, date window and order

Three optional settings. Leave them out and every row is exactly as described above.

  • outputShape: "videos" gives one row per analysed video instead of one per creator, with the creator's handle, nickname, followerCount, heartCount, videoCount, verified, isOrganization, isBusinessAccount, businessCategory, isTikTokShopSeller and bioLinkUrl copied into each row, so it loads straight into a spreadsheet. Video fields: position (1 = first in the list), videoId, videoUrl, postedAt, description, views, likes, comments, shares, saves, durationSec, hashtags, paidPartnership, isAd, isBrandDeal (counted in the creator's brand-deal share), and the music and slideshow fields. A creator without public videos still gets one profile row (charged as a profile), and a not-found or private creator one free row. The creator-level analytics stay in the default shape.
  • videosNewerThan analyses and lists only videos posted after a date ("2026-10-01", midnight UTC) or within a period ("30 days", "2 weeks", "3 months"). The analytics then cover that window, and postingCadencePerWeek is videos per week over it. It filters the newest videos read (up to maxVideosPerCreator), so set that high enough for the window. A creator with no video in the window comes back as a profile, and the row says why. A value that isn't a date or a period stops the run before anything is read or charged.
  • videosSort: "popular" lists the most viewed of the videos read, most viewed first, instead of the newest. "Videos read" means the newest pages of the profile (inside any date window), not the creator's all-time top videos. The analytics always use the newest videos, so two creators stay comparable whatever the order.
{ "handles": ["khaby.lame", "@duolingo"], "outputShape": "videos", "videosNewerThan": "30 days", "videosSort": "popular" }

Pricing

You pay per creator returned. There is no charge for Apify platform usage on top, and the residential proxy TikTok's video list needs is included.

RowFree and StarterScaleBusiness
Creator report (profile + analytics + recent videos)$30 per 1,000$22.50 per 1,000$16.50 per 1,000
Creator profile (profile only)$3 per 1,000$2.25 per 1,000$1.65 per 1,000

Plus $0.00005 per run start. Apify's free $5 monthly credit covers about 160 creator reports (or about 1,600 profile-only rows). Free-plan runs return up to 25 creators per run (only charged creators count); any paid Apify plan removes the cap.

With outputShape: "videos", each video row is charged as a video event at the price on the Pricing tab, instead of one creator report; creators without videos are charged as profiles as above.

A row is charged as a profile, not a report, when you turn includeVideos off or when TikTok doesn't show that creator's videos (videosStatus says why). Example: 200 creators, of which 185 come back as reports, 10 as profiles and 5 not found, cost 185 × $0.03 + 10 × $0.003 = $5.58 at the Starter price.

What's free: not-found, private, unavailable, blocked and unreadable creators, repeats of a creator already in the list, entries that aren't a TikTok handle, creators skipped by onlyNew, videos left out by videosNewerThan, and creators not started before the run's time limit or your spending limit. To cap a run's spend, set Maximum cost per run in the run options: the run stops cleanly and says how many creators were left.

Limits

  • Logged-out view only. The Actor sees what any visitor without an account sees. TikTok hides some posts from logged-out visitors, so a creator's video list can be incomplete and the analytics cover the public posts only.
  • Counts are what TikTok shows publicly. Profile counts are exact when TikTok sends exact numbers (countsExact: true). Per-video views, likes, comments and shares come rounded by TikTok above 10,000 (for example 2,200,000); saves are exact. Videos posted in the last few hours are still collecting views.
  • Up to 60 videos per creator (maxVideosPerCreator, 30 by default). 30 covers about a month for a creator who posts daily.
  • No audience demographics, follower lists, comments or contact details. Those need a login or belong to other people.
  • The paid-deal share only counts disclosed deals. Undisclosed ones can't be detected. On brand accounts TikTok's ad flag marks the brand's own promoted posts, so it isn't counted there.
  • Short links (vm.tiktok.com/…) aren't supported. Open them and paste the profile URL.
  • Speed: creators run up to 6 at a time at the default 4 GB memory (fewer at lower memory). A creator report usually takes 20 to 60 seconds, depending on how quickly TikTok hands over the video list. Near the run's time limit the Actor stops starting new creators and ends cleanly with what it has.
  • TikTok can change its site at any time. When it does, rows say so and nothing is charged for them.

Privacy. Public creator data only. The Actor never logs in, never uses cookies or accounts, and never asks you for one. Email addresses and phone numbers are removed from bios, names and captions before anything is stored, and a bio link that is a phone or email (WhatsApp, mailto:) is dropped. Private accounts get no data at all.

Only new since last run, and schedules

Turn on onlyNew in a saved task and the Actor skips creators that task has already returned and charged, so a growing list only vets (and charges for) the new names. Skipped creators cost nothing. It's off by default, so a normal run always returns everyone. To re-check a roster on a timetable, set up a schedule under Schedules in Apify Console.

Integrations: API, n8n, Make and AI agents

API. Run it and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/locaihost~tiktok-creators/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"handles": ["khaby.lame", "@duolingo"]}'

Apify's API clients for Python and JavaScript work the same way.

n8n, Make, Zapier, Google Sheets, Slack, webhooks. Apify's built-in integrations send each run's dataset wherever you need it.

AI agents (MCP). Add this Actor to Claude, Cursor or any MCP client with https://mcp.apify.com/?tools=locaihost/tiktok-creators, then ask something like "Which of these 10 creators has the highest engagement rate and the fewest sponsored posts?"

FAQ

How much does it cost to scrape TikTok creator profiles?

On the Free and Starter plans, $30 per 1,000 creator reports ($22.50 on Scale, $16.50 on Business) and $3 per 1,000 profiles ($2.25 on Scale, $1.65 on Business). Not-found and private accounts are free. Apify's free $5 monthly credit covers about 160 creator reports.

Can I use it through the API or from Python?

Yes. Use the run-sync-get-dataset-items call above, or Apify's Python and JavaScript clients. Every run's data is also available as JSON, CSV or Excel from its dataset.

Can I use it from an AI agent?

Yes. Through the Apify MCP server (https://mcp.apify.com/?tools=locaihost/tiktok-creators) any MCP client can call it with a list of handles and read the rows back.

The Actor reads only what TikTok shows to anyone who is not logged in: public profiles and public videos. It never logs in, skips private accounts and never collects follower lists, commenters, email addresses or phone numbers. TikTok's own terms restrict automated access, so check that your use fits them and the data-protection rules that apply to you. You are responsible for how you use the results.

Why are some fields empty?

private, not-found and other non-ok rows carry only the status and the reason. When TikTok doesn't show a creator's videos, the row has the profile but no analytics or recentVideos, and videosStatus says why. bioLink and businessCategory are empty when the creator hasn't set them.

How is the engagement rate calculated?

Likes, comments and shares summed over the analysed videos, divided by their total views. A video with ten times the views carries ten times the weight, and pinned videos are left out.

More from locaihost data

Did it help?

If this saved you time, a quick rating on the Store helps other people find it.

Support

Something not working, or a field you need? Open an issue on the Issues tab: we answer issues within 24 hours.