TikTok Profile Mention Scraper avatar

TikTok Profile Mention Scraper

Pricing

from $18.55 / 1,000 mention posts

Go to Apify Store
TikTok Profile Mention Scraper

TikTok Profile Mention Scraper

Find public TikTok videos and photo posts that tag or mention the profiles you enter. Each row shows how the post mentions the profile, plus the caption, views, likes, author, sound, tagged place, and a saved video file when available.

Pricing

from $18.55 / 1,000 mention posts

Rating

5.0

(1)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

77

Total users

12

Monthly active users

10 days ago

Last modified

Features

Limited permissions

Share

🔎 See who tags your TikTok profiles

For brands, creators, agencies, and social media teams, TikTok Profile Mention Scraper finds public TikTok videos and photo posts by other accounts that mention the profiles you enter. Each dataset row shows how the post mentions the profile, plus the caption, views and other counts, author and sound details, the tagged place, and a saved copy of the video file when TikTok provides one. You get one clear list to review and share, without checking each post by hand.

Use it to:

📦 TikTok profile mention data

Each saved row is one public TikTok post that mentions one requested profile. The row records the profile handle and TikTok account ID, the match type, the post link and type, the caption and its language, the counts, the author, the sound, media details, the tagged place, the country TikTok records for the post, and where the post appeared in TikTok search. Some values can be null, and arrays can be empty, when TikTok does not show them.

🚀 Find TikTok posts that mention a profile

  1. Add one or more TikTok handles, @handles, profile URLs, or a pasted list in TikTok profiles.
  2. Choose Strict: tagged account only or Broad: tagged or caption @handle in Match scope.
  3. For a shorter first run, keep Videos per profile at 10.
  4. Set Total video limit if you want a cap across the run. Leave a limit empty or at 0 to collect all available results until the source is exhausted.
  5. Optionally set Posted on or after or Minimum views to keep only recent or popular posts.
  6. Start the Actor and open the dataset.
  7. Export the rows or connect the dataset to your workflow with the Apify API, schedules, webhooks, or integrations.

The Actor checks each mention against the requested profile's own TikTok account ID, so a lookalike or similar handle does not count. Strict mode saves posts that tag that account. Broad mode also saves posts whose caption types the profile's @handle without a tag. The profile's own posts are left out.

⚙️ Input

Input fields

FieldTypeWhat it does
targetsarray of stringsRequired. Enter TikTok handles, @handles, profile URLs, or a pasted list of values. You can enter 1 to 500 values. Values that are not a TikTok handle or profile URL are skipped with a warning.
matchScopestringstrict (default) saves only posts that tag the profile's own TikTok account. broad also saves posts whose caption types the profile's @handle without a tag.
resultsPerTargetintegerOptional cap on matching posts saved for each profile. The form starts at 10. Leave it empty or set it to 0 to collect all available results until the source is exhausted.
maxResultsintegerOptional cap on posts saved across the whole run. The form starts at 10. Leave it empty or set it to 0 to collect all available results until the source is exhausted.
postedAfterstringOptional. Keeps only posts published on or after this date. Use a date such as 2026-01-31 or a period such as 7 days. Dates use UTC. Leave it empty to keep posts from any date.
minViewsintegerOptional. Keeps only posts with at least this many views. Leave it empty or set it to 0 to keep posts with any view count.

These 10 limits are form prefills, not schema defaults. If you call the Actor through the API and leave them out, the run has no limit.

Default input

This is the public input from a successful current-beta default-input run:

{
"targets": [
"nike"
],
"matchScope": "strict",
"resultsPerTarget": 10,
"maxResults": 10
}

🧾 Output

Output fields

Video posts and photo posts share one row shape. A photo post has video set to null.

FieldTypeWhat it does
targetHandlestringNormalized TikTok handle of the requested profile.
targetAccountIdstringTikTok account ID of the requested profile. Use it to confirm the account and join records.
matchTypestringHow the post mentions the profile: explicit_mention (tag of the account), caption_text (the @handle typed in the caption, broad mode only), or explicit_mention_and_caption_text (both).
videoIdstringStable TikTok post ID for joins and checks.
videoUrlstringPublic TikTok page for the post.
postTypestringvideo or photo for a photo slideshow.
captionnullable stringCaption shown with the post.
captionLanguagenullable stringLanguage code TikTok records for the caption, such as en or fr. un means TikTok could not tell.
createdAtnullable stringTime when the post was published.
playCountnullable integerVisible number of views.
likeCountnullable integerVisible number of likes.
commentCountnullable integerVisible number of comments.
shareCountnullable integerVisible number of shares.
saveCountnullable integerVisible number of saves.
authornullable objectPublic details for the account that published the post.
author.idnullable stringStable TikTok author ID.
author.handlenullable stringTikTok handle of the author.
author.displayNamenullable stringDisplay name shown on the author profile.
author.verifiednullable booleanWhether TikTok marks the author as verified.
author.bionullable stringBio text shown on the author profile.
author.avatarUrlnullable stringPublic URL for the author's profile image.
author.followerCountnullable integerVisible number of author followers.
author.followingCountnullable integerVisible number of accounts the author follows.
author.heartCountnullable integerVisible total likes on the author's posts.
author.videoCountnullable integerVisible number of videos posted by the author.
musicnullable objectSound or music used in the post.
music.idnullable stringStable TikTok sound ID.
music.titlenullable stringTitle shown for the sound.
music.authorNamenullable stringName shown for the sound author.
music.originalnullable booleanWhether TikTok marks the sound as an original sound.
music.durationSecondsnullable numberLength of the sound in seconds.
music.playUrlnullable stringLink to a copy of the sound file saved in the run's key-value store, when TikTok provides the sound.
music.coverUrlnullable stringPublic URL for the sound cover image.
videonullable objectMedia details for a video post. null for photo posts and when TikTok gives no media details.
video.widthnullable integerVideo width in pixels.
video.heightnullable integerVideo height in pixels.
video.durationSecondsnullable numberLength of the video in seconds.
video.coverUrlnullable stringPublic URL for the video cover image.
video.definitionnullable stringVideo quality label shown by TikTok.
video.formatnullable stringVideo file format shown by TikTok.
video.mediaUrlnullable stringLink to a copy of the video file saved in the run's key-value store, when TikTok provides one.
mentionsarray of stringsTikTok handles found in the caption or mention data.
hashtagsarray of stringsHashtags found in the caption or tag data.
isAdnullable booleanWhether TikTok marks the post as an advertisement.
locationnullable objectTikTok place the creator tagged on the post, when they added one.
location.idnullable stringTikTok ID of the tagged place.
location.namenullable stringName of the tagged place.
location.addressnullable stringAddress of the tagged place, when TikTok shows one.
countrynullable stringCountry code TikTok records for the post, such as US.
searchPositionintegerPlace of the post in the TikTok search results for the profile. 1 is the first result.
searchUrlstringTikTok search page where the Actor found the post.

Example row from the current beta run

This genuine row came from a successful run of the current beta build. The values are shown as returned.

{
"targetHandle": "nike",
"targetAccountId": "208464585232822272",
"matchType": "explicit_mention",
"videoId": "7488740959535025430",
"videoUrl": "https://www.tiktok.com/@infiniteunboxing/video/7488740959535025430",
"postType": "video",
"caption": "Nike Initiator Shoes #nike #initiator @Nike ",
"captionLanguage": "en",
"createdAt": "2025-04-02T15:39:42.000Z",
"playCount": 21800,
"likeCount": 187,
"commentCount": 3,
"shareCount": 29,
"saveCount": 43,
"author": {
"id": "6795665300123796485",
"handle": "infiniteunboxing",
"displayName": "⋆ I N F I N I T E ⋆",
"verified": false,
"bio": "╔════༻ 👁 ༺════╗ \n I N F I N I T E \n ☠️\n Hell Is Empty,\n All The Devils Are Here",
"avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-no1a-avt-0068c001-no/bb67f25d6e89cbb5a969198ab639f8b6~tplv-tiktokx-cropcenter:100:100.jpeg?dr=10399&refresh_token=fae89462&x-expires=1793829600&x-signature=F4uQL6qEB4BSeMCyyjLWfIZ6ddg%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a",
"followerCount": 2611,
"followingCount": 64,
"heartCount": 75500,
"videoCount": 873
},
"music": {
"id": "6421738769682008833",
"title": "Disco Inferno",
"authorName": "50 Cent",
"original": false,
"durationSeconds": 23,
"playUrl": "https://api.apify.com/v2/key-value-stores/5s1JdTbmw7Wqdguwy/records/music-6421738769682008833?signature=4DHhUOjKC8C0A5BSwrfs",
"coverUrl": "https://p77-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/okABQIAIDTSmqBU4gEfwCEAAUFkYAoBtjxoZeN.jpeg"
},
"video": {
"width": 576,
"height": 1024,
"durationSeconds": 7,
"coverUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-no1a-p-0037-no/o4eA9Bi1joBAIswYaKAoixtCP8SADzICWcEPNz~tplv-tiktokx-origin.image?dr=10395&x-expires=1793829600&x-signature=QigyRPDRttUSSm2cxMo5z29xFkI%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=no1a",
"definition": "540p",
"format": "mp4",
"mediaUrl": "https://api.apify.com/v2/key-value-stores/5s1JdTbmw7Wqdguwy/records/video-7488740959535025430?signature=etGyESMpCf5v2ddpamvl"
},
"mentions": [
"nike"
],
"hashtags": [
"nike",
"initiator"
],
"isAd": false,
"location": {
"id": "21568226315199470",
"name": "Amsterdam",
"address": "Amsterdam, North Holland, Netherlands"
},
"country": "SE",
"searchPosition": 84,
"searchUrl": "https://www.tiktok.com/search?q=nike"
}

💳 Pricing

How charges work

This Actor uses pay-per-event pricing. You pay for each post that mentions a requested profile and is saved to the dataset. Video posts and photo posts cost the same. You are not charged for a profile by itself, for posts that do not match, or for a run that saves no posts.

Use Videos per profile, Total video limit, Posted on or after, and Minimum views to keep a run smaller when you need fewer rows to review.

🔌 Integrations

Use it with

  • Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.
  • Call the Actor through the Apify API from an app or script.
  • Schedule runs to check the same profiles over time.
  • Send finished datasets to webhooks, databases, dashboards, spreadsheets, or AI review tools.

❓ FAQ

What does a strict no-match warning mean?

It means no account-confirmed mentions were found for that profile in the searched public results. It does not mean that no public posts exist for the profile. An empty dataset is valid, and nothing is charged when no posts are saved. Broad mode also saves posts whose caption types the profile's @handle.

What does matchType tell me?

It tells you how the post mentions the profile. explicit_mention means the post tags the profile's own TikTok account. caption_text means the caption types the @handle without a tag; only broad mode saves these. explicit_mention_and_caption_text means the post does both.

Are the profile's own posts included?

No. Posts published by the requested profile itself are left out, so you only see mentions by other accounts.

What happens when the same post appears more than once?

Each post is saved once per run. If the same post also mentions another profile you entered, the later match is skipped and the saved row keeps the first profile.

What if I leave a video limit empty?

The Actor collects all available results until the source is exhausted. Set resultsPerTarget or maxResults when you want fewer rows.

What happens if TikTok cannot be reached during a run?

The Actor retries with fresh sessions. If a profile still cannot be finished, the log shows a warning for that profile and the run continues with the other profiles. The run fails only when TikTok could not be reached for any profile. Rows saved before that stay in the dataset, and you pay only for saved posts.

Can I use a handle and a profile URL?

Yes. You can enter nike, @nike, or https://www.tiktok.com/@nike. These values identify the same requested profile target.

Does this scrape comments that mention a profile?

No. It finds public posts returned by TikTok search. It does not collect video comments or replies.

Does this return every historical mention of a TikTok profile?

No. Results reflect what public TikTok search shows during the run. TikTok may return different results by region, time, or source availability.

Do I need a TikTok account or API key?

No. This Actor uses public TikTok data and does not ask for a TikTok login, cookies, or a TikTok API key.

What if I already have TikTok video URLs?

Use TikTok Video Downloader for direct media links, or TikTok Transcript Scraper when you need public captions and transcripts from known videos.

📝 Changelog

v4.1 (02-11-2026)

  • Add searchPosition and searchUrl to each row. They show where the post appeared in TikTok search results for the profile.
  • Reliability improvements.

v4.0 (02-11-2026)

  • Add Posted on or after (postedAfter) and Minimum views (minViews) filters. You can now also set resultsPerTarget and maxResults to 0 for no limit.
  • Find photo posts as well as videos. New postType field shows which kind each row is.
  • Add targetAccountId, captionLanguage, country, and the tagged place in location to each row.
  • video.mediaUrl and music.playUrl now link to copies of the files saved in the run's key-value store.
  • Broad mode now saves only posts that tag the profile or type its @handle in the caption. A search result alone no longer counts, so the search_result value of matchType is gone and explicit_mention_and_caption_text is new. Tags are checked against the profile's own TikTok account ID, and a typed @handle must match exactly, so lookalike handles do not count.
  • Remove matchEvidence, searchUrl, and resultPosition from dataset rows, because matches no longer come from search results. Use matchType to see how a post mentions the profile. searchUrl and resultPosition have no replacement.
  • Remove author.profileUrl from dataset rows. There is no replacement field.
  • Reliability improvements.

v3.0 (08-09-2026)

  • Report incomplete TikTok searches as failed runs while keeping saved rows and their charges.
  • Return null when TikTok does not provide author, music, or video details.
  • Remove targetProfileUrl and collectedAt from dataset rows.

v2.0 (07-09-2026)

  • Add strict account-confirmed matching and an optional broader caption and search mode.
  • Remove the legacy matchedTarget and rawSourceIds fields from dataset rows.
  • Improve result collection when TikTok returns incomplete pages or slow responses.

v1.0

  • Return structured match evidence, creator, music, media, and source details for each matching video.
  • Accept profile handles, profile URLs, and pasted target lists with optional result limits.

v0.1

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré