TikTok Verified Mention Tracker
Find TikTok posts that tag a specific creator or brand handle, with each result checked against TikTok's own mention markup so you can tell a real @mention from a caption that merely contains the name.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
usernames | array | required | Brand or creator accounts whose mentions you want. Type a handle (nike), a handle with @ (@nike) or paste a profile link (https://www.tiktok.com/@nike). One account per line; duplicates are merged. |
mentionFilter | string | optional | Every saved post carries a mentionType label: 'tagged' (the caption contains TikTok's clickable tag of the account), 'captionText' (the caption types @handle without a working tag) or 'searchResult' (TikTok search returned it for the handle, but the caption doesn't name the account). By default you get real mentions: tagged posts plus @handle captions. |
excludeOwnPosts | boolean | optional | Leave out posts published by the tracked account itself, so you only see what other people say about it. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
usernames | array | required | Brand or creator accounts whose mentions you want. Type a handle (nike), a handle with @ (@nike) or paste a profile link (https://www.tiktok.com/@nike). One account per line; duplicates are merged. |
mentionFilter | string | optional | Every saved post carries a mentionType label: 'tagged' (the caption contains TikTok's clickable tag of the account), 'captionText' (the caption types @handle without a working tag) or 'searchResult' (TikTok search returned it for the handle, but the caption doesn't name the account). By default you get real mentions: tagged posts plus @handle captions. |
excludeOwnPosts | boolean | optional | Leave out posts published by the tracked account itself, so you only see what other people say about it. |
datePosted | string | optional | Only look at posts published in this period. |
postedAfter | string | optional | Exact cut-off date. Use a date (2026-10-01) or a relative age such as '3 days' or '2 weeks'. Works together with 'Posted within'; the stricter of the two applies. |
sortBy | string | optional | How saved posts are ordered for each account. 'Most liked' and 'Newest first' look at every post found before keeping the top ones. |
minPlayCount | integer | optional | Skip posts with fewer views than this. Leave empty to keep posts of any size. |
searchDepth | string | optional | 'Standard' runs one search per account and reads every page TikTok returns. 'Deep' adds searches by plain handle, display name and #handle, a most-liked pass, several date ranges and the Photo tab, then merges them without duplicates. Deep finds noticeably more mentions but takes a few minutes per account. Set the run memory to at least 2048 MB for deep search. |
searchCountry | string | optional | TikTok shows different posts in different countries. Pick a country to see the mentions people there get in their search results (for example Japan for Japanese posts). 'Any' uses the fastest connection. Runs with a country are slower. |
followRelatedVideos | boolean | optional | After searching, open TikTok's related videos for every post that tags the account and keep related posts that also mention it (repeating a few hops). Often finds many extra tagged posts, mostly from creators who tag the account regularly. Slower, and needs at least 4096 MB of run memory. |
maxResultsPerProfile | integer | optional | Stop after this many saved posts for each account. TikTok search usually yields tens to a few hundred posts per account, so very high values simply mean 'everything found'. |
maxItems | integer | optional | Optional limit across all accounts in this run. Leave empty for no overall limit. |
downloadVideos | boolean | optional | Download each saved video into this run's key-value store and add a permanent link to it (downloadedVideoUrl). TikTok's own video links only play inside TikTok, so turn this on when you need playable files. It makes runs slower and uses storage. |
addPostCountry | boolean | optional | Look up the country TikTok records for every saved post (locationCreated, e.g. US, BR, JP). Useful for market breakdowns of who mentions you. Adds a few seconds per post. |
Download the published input schema
View complete JSON
{
"description": "List the TikTok accounts you want to monitor. The tracker finds public posts that tag or @mention each account, labels why every post matched, and lets you narrow results by date, views and order.",
"properties": {
"addPostCountry": {
"default": false,
"description": "Look up the country TikTok records for every saved post (locationCreated, e.g. US, BR, JP). Useful for market breakdowns of who mentions you. Adds a few seconds per post.",
"prefill": false,
"title": "Add the country each post was made in",
"type": "boolean"
},
"datePosted": {
"default": "anyTime",
"description": "Only look at posts published in this period.",
"editor": "select",
"enum": [
"anyTime",
"past24Hours",
"pastWeek",
"pastMonth",
"past3Months",
"past6Months"
],
"enumTitles": [
"Any time",
"Last 24 hours",
"Last 7 days",
"Last 30 days",
"Last 3 months",
"Last 6 months"
],
"title": "Posted within",
"type": "string"
},
"downloadVideos": {
"default": false,
"description": "Download each saved video into this run's key-value store and add a permanent link to it (downloadedVideoUrl). TikTok's own video links only play inside TikTok, so turn this on when you need playable files. It makes runs slower and uses storage.",
"prefill": false,
"title": "Save video files",
"type": "boolean"
},
"excludeOwnPosts": {
"default": true,
"description": "Leave out posts published by the tracked account itself, so you only see what other people say about it.",
"prefill": true,
"title": "Skip the account's own posts",
"type": "boolean"
},
"followRelatedVideos": {
"default": false,
"description": "After searching, open TikTok's related videos for every post that tags the account and keep related posts that also mention it (repeating a few hops). Often finds many extra tagged posts, mostly from creators who tag the account regularly. Slower, and needs at least 4096 MB of run memory.",
"prefill": false,
"title": "Also follow related videos",
"type": "boolean"
},
"maxItems": {
"description": "Optional limit across all accounts in this run. Leave empty for no overall limit.",
"minimum": 1,
"title": "Max posts in total",
"type": "integer"
},
"maxResultsPerProfile": {
"default": 50,
"description": "Stop after this many saved posts for each account. TikTok search usually yields tens to a few hundred posts per account, so very high values simply mean 'everything found'.",
"maximum": 500,
"minimum": 1,
"prefill": 3,
"title": "Max posts per account",
"type": "integer"
},
"mentionFilter": {
"default": "taggedOrCaption",
"description": "Every saved post carries a mentionType label: 'tagged' (the caption contains TikTok's clickable tag of the account), 'captionText' (the caption types @handle without a working tag) or 'searchResult' (TikTok search returned it for the handle, but the caption doesn't name the account). By default you get real mentions: tagged posts plus @handle captions.",
"editor": "select",
"enum": [
"taggedOrCaption",
"tagged",
"all"
],
"enumTitles": [
"Real mentions: tagged or @handle in the caption",
"Only posts with TikTok's clickable tag",
"Every search result, labelled"
],
"title": "Which posts to keep",
"type": "string"
},
"minPlayCount": {
"description": "Skip posts with fewer views than this. Leave empty to keep posts of any size.",
"minimum": 0,
"title": "Minimum views",
"type": "integer"
},
"postedAfter": {
"dateType": "absoluteOrRelative",
"description": "Exact cut-off date. Use a date (2026-10-01) or a relative age such as '3 days' or '2 weeks'. Works together with 'Posted within'; the stricter of the two applies.",
"editor": "datepicker",
"title": "Posted on or after",
"type": "string"
},
"searchCountry": {
"default": "any",
"description": "TikTok shows different posts in different countries. Pick a country to see the mentions people there get in their search results (for example Japan for Japanese posts). 'Any' uses the fastest connection. Runs with a country are slower.",
"editor": "select",
"enum": [
"any",
"AR",
"AU",
"AT",
"BD",
"BE",
"BR",
"CA",
"CL",
"CO",
"CZ",
"DK",
"EG",
"FI",
"FR",
"DE",
"GR",
"ID",
"IE",
"IL",
"IT",
"JP",
"KE",
"MY",
"MX",
"MA",
"NL",
"NZ",
"NG",
"NO",
"PK",
"PE",
"PH",
"PL",
"PT",
"RO",
"SA",
"SG",
"ZA",
"KR",
"ES",
"SE",
"CH",
"TW",
"TH",
"TR",
"UA",
"AE",
"GB",
"US",
"VN"
],
"enumTitles": [
"Any (fastest)",
"Argentina",
"Australia",
"Austria",
"Bangladesh",
"Belgium",
"Brazil",
"Canada",
"Chile",
"Colombia",
"Czechia",
"Denmark",
"Egypt",
"Finland",
"France",
"Germany",
"Greece",
"Indonesia",
"Ireland",
"Israel",
"Italy",
"Japan",
"Kenya",
"Malaysia",
"Mexico",
"Morocco",
"Netherlands",
"New Zealand",
"Nigeria",
"Norway",
"Pakistan",
"Peru",
"Philippines",
"Poland",
"Portugal",
"Romania",
"Saudi Arabia",
"Singapore",
"South Africa",
"South Korea",
"Spain",
"Sweden",
"Switzerland",
"Taiwan",
"Thailand",
"Turkey",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"Vietnam"
],
"title": "Search from country",
"type": "string"
},
"searchDepth": {
"default": "standard",
"description": "'Standard' runs one search per account and reads every page TikTok returns. 'Deep' adds searches by plain handle, display name and #handle, a most-liked pass, several date ranges and the Photo tab, then merges them without duplicates. Deep finds noticeably more mentions but takes a few minutes per account. Set the run memory to at least 2048 MB for deep search.",
"editor": "select",
"enum": [
"standard",
"deep"
],
"enumTitles": [
"Standard (fast)",
"Deep (more mentions, slower)"
],
"prefill": "standard",
"title": "Search depth",
"type": "string"
},
"sortBy": {
"default": "relevance",
"description": "How saved posts are ordered for each account. 'Most liked' and 'Newest first' look at every post found before keeping the top ones.",
"editor": "select",
"enum": [
"relevance",
"mostLiked",
"newest"
],
"enumTitles": [
"Most relevant (TikTok's order)",
"Most liked first",
"Newest first"
],
"title": "Order of results",
"type": "string"
},
"usernames": {
"description": "Brand or creator accounts whose mentions you want. Type a handle (nike), a handle with @ (@nike) or paste a profile link (https://www.tiktok.com/@nike). One account per line; duplicates are merged.",
"editor": "stringList",
"example": [
"nike",
"@gymshark",
"https://www.tiktok.com/@sephora"
],
"prefill": [
"billieeilish"
],
"title": "TikTok accounts to track",
"type": "array"
}
},
"required": [
"usernames"
],
"schemaVersion": 1,
"title": "TikTok Verified Mention Tracker input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
data | string | optional | Dataset with one row per post found for a tracked account, labelled tagged, caption text or search result. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "TikTok posts that tag or @mention the tracked accounts: mention type, matching tag, caption, post date, views, likes, comments, shares, author profile, sound, video or slideshow details.",
"properties": {
"data": {
"description": "Dataset with one row per post found for a tracked account, labelled tagged, caption text or search result.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Mentions",
"type": "string"
}
},
"title": "TikTok Verified Mention Tracker Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"fields": {
"AIGCDescription": {
"description": "Description for AI-generated content label",
"title": "AIGC Description",
"type": "string"
},
"adLabelVersion": {
"description": "Ad label version; non-zero when the post is a sponsored ad",
"title": "Ad Label Version",
"type": "integer"
},
"aiContentLabel": {
"description": "Which AI label TikTok shows: 'creatorLabeled' (Creator labeled as AI-generated) or 'aiGeneratedMedia' (Contains AI-generated media)",
"enum": [
"creatorLabeled",
"aiGeneratedMedia"
],
"title": "AI label",
"type": "string"
},
"author": {
"description": "Author/creator information at time of scraping",
"properties": {
"avatarUrl": {
"title": "Avatar URL",
"type": "string"
},
"bio": {
"title": "Bio",
"type": "string"
},
"displayName": {
"title": "Display Name",
"type": "string"
},
"followerCount": {
"title": "Followers",
"type": "integer"
},
"followingCount": {
"title": "Following",
"type": "integer"
},
"heartCount": {
"title": "Hearts/Likes",
"type": "integer"
},
"id": {
"title": "User ID",
"type": "string"
},
"privateAccount": {
"title": "Private Account",
"type": "boolean"
},
"roomId": {
"title": "Live Room ID (non-empty when live)",
"type": "string"
},
"secUid": {
"title": "Secure UID",
"type": "string"
},
"username": {
"title": "Username",
"type": "string"
},
"verified": {
"title": "Verified",
"type": "boolean"
},
"videoCount": {
"title": "Videos",
"type": "integer"
}
},
"title": "Author",
"type": "object"
},
"caption": {
"description": "Post caption/description text including hashtags and mentions",
"title": "Caption",
"type": "string"
},
"captionMentionsHandle": {
"description": "True when the caption contains the text @handle of the tracked account",
"title": "Caption types @handle",
"type": "boolean"
},
"collectCount": {
"description": "Number of times post was bookmarked/collected",
"title": "Collect Count",
"type": "integer"
},
"commentCount": {
"description": "Number of comments",
"title": "Comment Count",
"type": "integer"
},
"commentStatus": {
"description": "Comment permission setting (0=all, 1=friends, 2=none)",
"title": "Comment Status",
"type": "integer"
},
"createTime": {
"description": "Unix timestamp (seconds) when the post was created",
"title": "Create Time (Unix)",
"type": "integer"
},
"createdAt": {
"description": "ISO 8601 UTC datetime when the post was created",
"title": "Created At",
"type": "string"
},
"downloadedVideoUrl": {
"description": "Permanent link to the video file saved in this run's storage (only when 'Save video files' is on)",
"title": "Saved video file",
"type": "string"
},
"duetEnabled": {
"description": "Whether the creator allows duets with this video",
"title": "Duet Enabled",
"type": "boolean"
},
"forFriend": {
"description": "Whether the post is restricted to friends only",
"title": "For Friend",
"type": "boolean"
},
"foundVia": {
"description": "'search' = returned by TikTok search; 'relatedVideos' = found in the related videos of a post that tags the account",
"enum": [
"search",
"relatedVideos"
],
"title": "Found via",
"type": "string"
},
"hashtags": {
"description": "Hashtags used in the post caption",
"items": {
"properties": {
"id": {
"title": "Hashtag ID",
"type": "string"
},
"isCommerce": {
"title": "Is Commerce",
"type": "boolean"
},
"name": {
"title": "Hashtag Name",
"type": "string"
}
},
"type": "object"
},
"title": "Hashtags",
"type": "array"
},
"images": {
"description": "Images for slideshow posts (postType='slideshow')",
"items": {
"properties": {
"height": {
"title": "Height",
"type": "integer"
},
"ordinal": {
"title": "Index",
"type": "integer"
},
"urlList": {
"title": "Image URLs",
"type": "array"
},
"width": {
"title": "Width",
"type": "integer"
}
},
"type": "object"
},
"title": "Slideshow Images",
"type": "array"
},
"isAd": {
"description": "Whether this post is a paid advertisement",
"title": "Is Ad",
"type": "boolean"
},
"isAigc": {
"description": "True when TikTok shows an AI-generated label on the post (creator-labeled or detected)",
"title": "Is AI Generated Content",
"type": "boolean"
},
"isECVideo": {
"description": "Shopping video flag, when TikTok reports it for the post",
"title": "Is E-Commerce Video",
"type": "boolean"
},
"isMentionConfirmed": {
"description": "True when mentionType is 'tagged'",
"title": "Tagged",
"type": "boolean"
},
"isOwnPost": {
"description": "True when the tracked account published the post itself",
"title": "Posted by the tracked account",
"type": "boolean"
},
"isPaidPartnership": {
"description": "True when TikTok shows the 'Paid partnership' label on the post",
"title": "Paid partnership",
"type": "boolean"
},
"likeCount": {
"description": "Number of likes/diggs",
"title": "Like Count",
"type": "integer"
},
"locationCreated": {
"description": "ISO country code where the post was created (e.g. 'US', 'BR'); only when 'Add the country each post was made in' is on",
"title": "Post country",
"type": "string"
},
"mediaUrlExpiresAt": {
"description": "ISO 8601 UTC datetime when signed media URLs (video/cover) expire",
"title": "Media URL Expires At",
"type": "string"
},
"mentionEntry": {
"description": "The tag that points at the tracked account (tagged posts only)",
"properties": {
"awemeId": {
"title": "Linked post ID (if any)",
"type": "string"
},
"displayText": {
"title": "Text shown in the caption (often the display name, e.g. @Gymshark)",
"type": "string"
},
"end": {
"title": "End position in caption (UTF-16 units)",
"type": "integer"
},
"secUid": {
"title": "Tagged account secUid",
"type": "string"
},
"start": {
"title": "Start position in caption (UTF-16 units, as in JavaScript)",
"type": "integer"
},
"userId": {
"title": "Tagged account ID",
"type": "string"
},
"username": {
"title": "Tagged handle",
"type": "string"
}
},
"title": "Matching tag",
"type": "object"
},
"mentionType": {
"description": "Why the post matched: 'tagged' (caption contains TikTok's clickable tag of the account), 'captionText' (caption types @handle without a working tag) or 'searchResult' (returned by TikTok search for the handle, account not named in the caption)",
"enum": [
"tagged",
"captionText",
"searchResult"
],
"title": "Mention type",
"type": "string"
},
"mentions": {
"description": "Every account tagged in the caption",
"items": {
"properties": {
"awemeId": {
"title": "Linked post ID (if any)",
"type": "string"
},
"displayText": {
"title": "Text shown in the caption",
"type": "string"
},
"end": {
"title": "End position (UTF-16 units)",
"type": "integer"
},
"secUid": {
"title": "Account secUid",
"type": "string"
},
"start": {
"title": "Start position (UTF-16 units)",
"type": "integer"
},
"userId": {
"title": "Account ID",
"type": "string"
},
"username": {
"title": "Handle",
"type": "string"
}
},
"type": "object"
},
"title": "All tags in the caption",
"type": "array"
},
"music": {
"description": "Sound/music used in the post",
"properties": {
"album": {
"title": "Album",
"type": "string"
},
"authorName": {
"title": "Author",
"type": "string"
},
"coverUrl": {
"title": "Cover URL",
"type": "string"
},
"dspLinks": {
"title": "DSP Links (Spotify, Apple Music, etc.)",
"type": "array"
},
"duration": {
"title": "Duration (s)",
"type": "integer"
},
"id": {
"title": "Music ID",
"type": "string"
},
"isCommerceMusic": {
"title": "Is Commerce Music",
"type": "boolean"
},
"isCopyrighted": {
"title": "Is Copyrighted",
"type": "boolean"
},
"isPrivate": {
"title": "Is Private Sound",
"type": "boolean"
},
"isUnlimitedMusic": {
"title": "Is Unlimited Music",
"type": "boolean"
},
"original": {
"title": "Original Sound",
"type": "boolean"
},
"playUrl": {
"title": "Play URL",
"type": "string"
},
"shootDuration": {
"title": "Shoot Duration (s)",
"type": "number"
},
"title": {
"title": "Title",
"type": "string"
}
},
"title": "Music",
"type": "object"
},
"originalItem": {
"description": "Whether this post is an original (non-duet, non-stitch) creation",
"title": "Original Item",
"type": "boolean"
},
"playCount": {
"description": "Number of video plays",
"title": "Play Count",
"type": "integer"
},
"poi": {
"description": "TikTok place attached to the post (name, address, city, country, category), when the creator added one",
"title": "Location tag",
"type": "object"
},
"postId": {
"description": "TikTok's unique post/video ID (string to preserve 64-bit precision)",
"title": "Post ID",
"type": "string"
},
"postType": {
"description": "'video' or 'slideshow' (photo carousel)",
"title": "Post Type",
"type": "string"
},
"postUrl": {
"description": "Link to the post on TikTok (/video/ for videos, /photo/ for slideshows)",
"title": "Post URL",
"type": "string"
},
"privateItem": {
"description": "Whether the post is set to private",
"title": "Private Item",
"type": "boolean"
},
"rank": {
"description": "0-based order in which the post was first found for this account across all searches",
"title": "Rank",
"type": "integer"
},
"relatedToPostId": {
"description": "For posts found via related videos: the post whose related list contained it",
"title": "Related to post",
"type": "string"
},
"repostCount": {
"description": "Number of reposts",
"title": "Repost Count",
"type": "integer"
},
"scrapedAt": {
"description": "ISO 8601 UTC time of collection",
"title": "Scraped at",
"type": "string"
},
"searchCountry": {
"description": "Country the TikTok search ran from (only when 'Search from country' is set)",
"title": "Searched from",
"type": "string"
},
"searchQuery": {
"description": "The TikTok search text that first returned this post",
"title": "Search that found it",
"type": "string"
},
"searchUrl": {
"description": "Open the same TikTok search in a browser",
"title": "Search link",
"type": "string"
},
"shareCount": {
"description": "Number of shares",
"title": "Share Count",
"type": "integer"
},
"shareEnabled": {
"description": "Whether sharing is enabled for this post",
"title": "Share Enabled",
"type": "boolean"
},
"stitchEnabled": {
"description": "Whether the creator allows stitching this video",
"title": "Stitch Enabled",
"type": "boolean"
},
"targetDisplayName": {
"description": "Display name of the tracked account",
"title": "Tracked account name",
"type": "string"
},
"targetFollowerCount": {
"description": "Follower count of the tracked account at scrape time",
"title": "Tracked account followers",
"type": "integer"
},
"targetSecUid": {
"description": "TikTok's secure user ID of the tracked account",
"title": "Tracked account secUid",
"type": "string"
},
"targetUserId": {
"description": "TikTok's numeric ID of the tracked account",
"title": "Tracked account ID",
"type": "string"
},
"targetUsername": {
"description": "Handle of the tracked account this post was found for (lowercase, without @)",
"title": "Tracked account",
"type": "string"
},
"targetVerified": {
"description": "Whether the tracked account has TikTok's verified badge",
"title": "Tracked account verified",
"type": "boolean"
},
"textLanguage": {
"description": "Detected language code of the caption text",
"title": "Text Language",
"type": "string"
},
"video": {
"description": "Video technical metadata and signed play/cover URLs",
"properties": {
"bitrate": {
"title": "Bitrate",
"type": "integer"
},
"bitrateInfo": {
"description": "All available quality/bitrate variants with play URLs",
"title": "Bitrate Info",
"type": "array"
},
"codecType": {
"title": "Codec",
"type": "string"
},
"cover": {
"title": "Cover Image URL",
"type": "string"
},
"definition": {
"title": "Definition",
"type": "string"
},
"downloadAddr": {
"title": "Download URL (plays only inside TikTok)",
"type": "string"
},
"duration": {
"title": "Duration (s)",
"type": "integer"
},
"dynamicCover": {
"title": "Dynamic Cover URL",
"type": "string"
},
"format": {
"title": "Format",
"type": "string"
},
"height": {
"title": "Height (px)",
"type": "integer"
},
"originCover": {
"title": "Original Cover URL",
"type": "string"
},
"playUrl": {
"title": "Play URL (plays only inside TikTok)",
"type": "string"
},
"ratio": {
"title": "Aspect Ratio",
"type": "string"
},
"size": {
"title": "File Size (bytes)",
"type": "string"
},
"subtitleInfos": {
"title": "Subtitle tracks",
"type": "array"
},
"videoQuality": {
"title": "Video Quality Label",
"type": "string"
},
"volumeInfo": {
"description": "Audio loudness and peak level metadata",
"title": "Volume Info",
"type": "object"
},
"width": {
"title": "Width (px)",
"type": "integer"
}
},
"title": "Video",
"type": "object"
}
},
"title": "TikTok mentions",
"views": {
"overview": {
"description": "Posts that tag or mention each tracked account, with the reason they matched.",
"display": {
"component": "table",
"properties": {
"author.followerCount": {
"format": "number",
"label": "Author followers"
},
"author.username": {
"format": "text",
"label": "Posted by"
},
"caption": {
"format": "text",
"label": "Caption"
},
"commentCount": {
"format": "number",
"label": "Comments"
},
"createdAt": {
"format": "date",
"label": "Posted"
},
"likeCount": {
"format": "number",
"label": "Likes"
},
"mentionType": {
"format": "text",
"label": "Mention type"
},
"playCount": {
"format": "number",
"label": "Views"
},
"postType": {
"format": "text",
"label": "Type"
},
"postUrl": {
"format": "link",
"label": "Post"
},
"shareCount": {
"format": "number",
"label": "Shares"
},
"targetUsername": {
"format": "text",
"label": "Tracked account"
}
}
},
"title": "Mentions overview",
"transformation": {
"fields": [
"targetUsername",
"mentionType",
"postUrl",
"caption",
"createdAt",
"author.username",
"author.followerCount",
"playCount",
"likeCount",
"commentCount",
"shareCount",
"postType"
],
"flatten": [
"author"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
TikTok Verified Mention Tracker
See who is talking about a TikTok brand or creator account. Give the tracker one or more handles and it collects public TikTok posts that tag the account or type its @handle in the caption. Every row says why it matched, so a real clickable tag never gets confused with a caption that just happens to contain the name.
Use it for brand monitoring, sponsorship and campaign proof, influencer discovery and competitor watch. No TikTok login, no cookies and no setup are needed.
What this actor does
- Real mentions, with the reason.
mentionTypelabels every rowtagged,captionTextorsearchResult. Tagged rows carry the exact tag and its position in the caption, so a clickable tag is never confused with a typed@handleor a related post. - Proof tied to the account. Each row carries the tracked account's TikTok ID, display name, verified badge and follower count, so a renamed or look-alike handle can't slip in. The account's own posts are skipped (
isOwnPost). - Controls for real monitoring. Date windows from 24 hours to 6 months or an exact cut-off, relevance/most-liked/newest order, minimum views, about 50 country views, and a deep multi-search mode (handle, name, display name, #handle, most-liked pass, photo posts) that merges results without duplicates. Give deep runs 2048 MB of memory.
- Full post and profile detail. Caption, hashtags, every tagged account, post date, views/likes/comments/shares/saves/reposts, author profile, sound, video or slideshow media, location and ad, paid-partnership and AI labels. Optional permanent video files and related-video discovery.
- Empty fields are omitted. Fields TikTok doesn't provide for a post are left out instead of filled with placeholders.
Output per post
One row per post, per tracked account. Fields TikTok doesn't provide for a post are left out of that row rather than filled with placeholders.
| Field | Meaning |
|---|---|
targetUsername |
The tracked account this post was found for |
mentionType |
tagged, captionText or searchResult |
isMentionConfirmed |
true when mentionType is tagged |
mentionEntry |
The matching tag: username, userId, secUid, displayText, start/end position in the caption |
captionMentionsHandle |
The caption contains @handle as text |
isOwnPost |
Published by the tracked account itself |
targetUserId, targetSecUid, targetDisplayName, targetVerified, targetFollowerCount |
The tracked account's profile |
postId, postUrl, postType |
Post ID, link and video or slideshow |
caption, textLanguage, hashtags, mentions |
Caption text, language, hashtags and every tagged account |
createTime, createdAt |
Post time (Unix seconds and ISO 8601 UTC) |
playCount, likeCount, commentCount, shareCount, collectCount, repostCount |
Engagement at collection time |
author |
Creator: ID, username, display name, bio, verified, private flag, avatar, followers, following, likes, videos |
music |
Sound: ID, title, artist, album, original flag, duration, cover, streaming links |
video |
Size, duration, quality, format, cover images and TikTok's video links |
images |
Slideshow photos in order, with sizes and links |
poi |
Location tag, when the creator added one |
locationCreated |
Country the post was made in, e.g. US (when addPostCountry is on) |
isPaidPartnership |
TikTok shows the "Paid partnership" label (sponsored creator content) |
isAigc, aiContentLabel |
TikTok shows an AI label: creatorLabeled ("Creator labeled as AI-generated") or aiGeneratedMedia ("Contains AI-generated media") |
isAd, adLabelVersion |
Ad markers |
downloadedVideoUrl |
Permanent video file link (when downloadVideos is on) |
rank |
Order in which the post was found for this account |
foundVia, relatedToPostId |
search or relatedVideos, and for the latter the post it was related to |
searchQuery, searchUrl |
The TikTok search that found the post, and a link to repeat it |
searchCountry |
Country the search ran from (when searchCountry is set) |
scrapedAt, mediaUrlExpiresAt |
Collection time and when TikTok's media links expire |
Sample row (shortened)
{
"targetUsername": "billieeilish",
"mentionType": "tagged",
"isMentionConfirmed": true,
"mentionEntry": {"username": "billieeilish", "userId": "6879693940111901701", "displayText": "@BILLIE EILISH", "start": 144, "end": 158},
"captionMentionsHandle": false,
"isOwnPost": false,
"targetUserId": "6879693940111901701",
"targetDisplayName": "BILLIE EILISH",
"targetVerified": true,
"targetFollowerCount": 74678836,
"postId": "7673892883543493910",
"postType": "video",
"postUrl": "https://www.tiktok.com/@fkedits62/video/7673892883543493910",
"createdAt": "2026-08-14T14:23:49Z",
"playCount": 1400000,
"likeCount": 44400,
"commentCount": 559,
"author": {"username": "fkedits62", "followerCount": 26500, "verified": false},
"searchQuery": "@billieeilish",
"scrapedAt": "2026-10-19T09:28:51Z"
}
A per-account run summary (account found or not, posts checked, rows saved by mention type, and why the search stopped) is saved in the run's key-value store as TARGET_SUMMARY.
Input
| Field | Type | Default | Description |
|---|---|---|---|
usernames |
array | – | Required. Accounts to track: nike, @nike or https://www.tiktok.com/@nike |
mentionFilter |
select | taggedOrCaption |
taggedOrCaption (real mentions), tagged (clickable tag only) or all (every search result, labelled) |
excludeOwnPosts |
boolean | true |
Skip posts published by the tracked account |
datePosted |
select | anyTime |
anyTime, past24Hours, pastWeek, pastMonth, past3Months, past6Months |
postedAfter |
string | – | Exact cut-off: a date such as 2026-10-01 or an age such as 3 days |
sortBy |
select | relevance |
relevance, mostLiked or newest |
minPlayCount |
integer | – | Skip posts with fewer views |
searchDepth |
select | standard |
standard (fast) or deep (more mentions, slower; use 2048 MB memory) |
searchCountry |
select | any |
Search as seen from one country (JP, DE, BR, …, about 50 markets) or any |
followRelatedVideos |
boolean | false |
Also collect tagged posts from the related videos of each tagged post (needs 4096 MB memory) |
maxResultsPerProfile |
integer | 50 |
Max saved posts per account (1-500) |
maxItems |
integer | – | Max saved posts across all accounts |
downloadVideos |
boolean | false |
Save video files and add downloadedVideoUrl |
addPostCountry |
boolean | false |
Add the country each post was made in (locationCreated) |
Older inputs keep working: the previous confirmedMentionsOnly switch is still honoured when it is sent, and profile links work in usernames.
Example: brand mentions from the last 30 days, most liked first
{
"usernames": ["gymshark", "@sephora"],
"datePosted": "pastMonth",
"sortBy": "mostLiked",
"maxResultsPerProfile": 100
}
Example: only clickable tags, as much as TikTok shows
{
"usernames": ["https://www.tiktok.com/@billieeilish"],
"mentionFilter": "tagged",
"searchDepth": "deep",
"maxResultsPerProfile": 500
}
Example: daily monitoring of new posts with at least 10,000 views
{
"usernames": ["nike", "adidas", "puma"],
"postedAfter": "1 day",
"minPlayCount": 10000,
"sortBy": "newest"
}
Use cases
- Brand and sponsorship monitoring: watch who tags a brand handle, flag paid-partnership posts and keep a permanent copy of the video as proof.
- Influencer discovery: find creators who repeatedly tag a product or account, ranked by views or likes.
- Campaign reporting: export post-level engagement (views, likes, comments, shares, saves, reposts) and captions for dashboards.
- Competitor watch: see which creators a competitor's account tags and how often, or monitor several accounts in one run.
- Market research: search from a chosen country and compare which creators and posts mention a handle in each market.
FAQ
Do I need a TikTok account, cookies or a proxy? No. The tracker reads what TikTok shows logged-out visitors and picks its connection automatically.
How many mentions can I expect per account? TikTok's search returns tens to a few hundred posts per account. Popular brands usually get dozens of tagged posts; small accounts may get a handful or none. Deep search typically finds 30-60% more posts than standard. The 500 limit is a cap, not a promise.
Why are some rows captionText instead of tagged?
TikTok only creates a clickable tag when the creator picks the account from the suggestion list while writing. Typing @nike by hand leaves plain text, so the post is a mention but not a tag.
Why does the caption show "@Gymshark" when the handle is "gymshark"?
Tags display the account's name, not always its handle. mentionEntry.username always holds the real handle and displayText holds what the caption shows.
What does "Also follow related videos" add?
TikTok search returns only a share of the posts that tag an account. With this option on, the tracker opens the related videos of every tagged post and keeps the ones that also mention the account, a few hops deep. In our tests it roughly doubled the tagged posts found for accounts that already had some, mostly from creators who tag the account regularly. Those rows have foundVia: "relatedVideos". It makes runs slower and needs at least 4096 MB of memory (set it under the run options); with less memory the step is skipped and the run says so.
How do I check sponsored posts?
Filter on isPaidPartnership: it is true exactly when TikTok shows the "Paid partnership" label on the post. Combine it with mentionType: "tagged" to list paid posts that tag your brand.
Do the video links work outside TikTok?
TikTok's own media links that point at video or sound files (video.playUrl, video.downloadAddr, music.playUrl and the quality variants in video.bitrateInfo) are signed, expire (see mediaUrlExpiresAt) and usually only play inside TikTok. Turn on "Save video files" to get a permanent, playable copy in downloadedVideoUrl. Cover images, avatars, sound covers and slideshow photos open anywhere.
Can I search by country or language?
Yes. Set "Search from country" to see the posts TikTok shows people in that market, for example Japan or Brazil. Runs with a country take longer. To see where each post was actually made, also turn on "Add the country each post was made in" (locationCreated); textLanguage gives the caption language.
Can I monitor accounts on a schedule?
Yes. Schedule the task with postedAfter set to your interval (for example 1 day), and deduplicate by postId across runs.
Is this affiliated with TikTok? No. It is an independent tool that reads public TikTok pages.
Known limits
- TikTok decides how deep a search goes. Each search stops when TikTok has nothing more to show, usually after tens to a couple of hundred posts. Deep search combines several searches to go further.
- Most search results are related posts, not tags. Only a small share of what TikTok returns for a handle actually tags it. That is why rows are labelled with
mentionType, why the default keeps only real mentions, and why "Also follow related videos" exists. Accounts that no search result tags get nothing extra from it. - Results depend on time and region. TikTok personalises search, so two runs can return slightly different posts. Pick a "Search from country" to look at one market, and for monitoring schedule runs and deduplicate by
postId. - Comments are not searched. TikTok offers no way to find comments that mention an account; scanning comments of related posts finds almost none.
- Counts are a snapshot. Views, likes and comments are as of
scrapedAt; schedule runs to build a history.
For AI agents and automations
- Filter on
mentionTypeinstead of reading captions:taggedis TikTok's own tag of the account,captionTextis a typed@handlewithout a working tag,searchResultis only related. - Use
targetUserIdto join rows to an account. Handles can change; IDs don't. - Deduplicate across scheduled runs by
postId. Engagement numbers are a snapshot atscrapedAt. - An empty dataset with a successful run means TikTok had no matching posts.
TARGET_SUMMARYtells you whether the account exists and how many posts were checked.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build XPPVccGgUqsYp0fEv. Documentation is regenerated from the default published build; private drafts are not included.