{
  "data": {
    "id": "XKRi4i9BtxHgJtE3h",
    "actId": "DEEd7YgSb54ZumfKB",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-09T15:52:13.765Z",
    "finishedAt": "2026-11-09T15:52:42.259Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 28412,
      "runTimeSecs": 28.412,
      "computeUnits": 0.03156888888888889,
      "imageSizeBytes": 3200097280
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"TikTok Verified Mention Tracker input\",\n  \"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.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"usernames\": {\n      \"title\": \"TikTok accounts to track\",\n      \"type\": \"array\",\n      \"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.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"billieeilish\"\n      ]\n    },\n    \"mentionFilter\": {\n      \"title\": \"Which posts to keep\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"taggedOrCaption\",\n        \"tagged\",\n        \"all\"\n      ],\n      \"enumTitles\": [\n        \"Real mentions: tagged or @handle in the caption\",\n        \"Only posts with TikTok's clickable tag\",\n        \"Every search result, labelled\"\n      ],\n      \"default\": \"taggedOrCaption\",\n      \"prefill\": \"all\"\n    },\n    \"excludeOwnPosts\": {\n      \"title\": \"Skip the account's own posts\",\n      \"type\": \"boolean\",\n      \"description\": \"Leave out posts published by the tracked account itself, so you only see what other people say about it.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"datePosted\": {\n      \"title\": \"Posted within\",\n      \"type\": \"string\",\n      \"description\": \"Only look at posts published in this period.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"anyTime\",\n        \"past24Hours\",\n        \"pastWeek\",\n        \"pastMonth\",\n        \"past3Months\",\n        \"past6Months\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Last 24 hours\",\n        \"Last 7 days\",\n        \"Last 30 days\",\n        \"Last 3 months\",\n        \"Last 6 months\"\n      ],\n      \"default\": \"anyTime\"\n    },\n    \"postedAfter\": {\n      \"title\": \"Posted on or after\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"datepicker\",\n      \"dateType\": \"absoluteOrRelative\"\n    },\n    \"sortBy\": {\n      \"title\": \"Order of results\",\n      \"type\": \"string\",\n      \"description\": \"How saved posts are ordered for each account. 'Most liked' and 'Newest first' look at every post found before keeping the top ones.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevance\",\n        \"mostLiked\",\n        \"newest\"\n      ],\n      \"enumTitles\": [\n        \"Most relevant (TikTok's order)\",\n        \"Most liked first\",\n        \"Newest first\"\n      ],\n      \"default\": \"relevance\"\n    },\n    \"minPlayCount\": {\n      \"title\": \"Minimum views\",\n      \"type\": \"integer\",\n      \"description\": \"Skip posts with fewer views than this. Leave empty to keep posts of any size.\",\n      \"minimum\": 0,\n      \"maximum\": 2147483647\n    },\n    \"searchDepth\": {\n      \"title\": \"Search depth\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"standard\",\n        \"deep\"\n      ],\n      \"enumTitles\": [\n        \"Standard (fast)\",\n        \"Deep (more mentions, slower)\"\n      ],\n      \"default\": \"standard\",\n      \"prefill\": \"standard\"\n    },\n    \"searchCountry\": {\n      \"title\": \"Search from country\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"AR\",\n        \"AU\",\n        \"AT\",\n        \"BD\",\n        \"BE\",\n        \"BR\",\n        \"CA\",\n        \"CL\",\n        \"CO\",\n        \"CZ\",\n        \"DK\",\n        \"EG\",\n        \"FI\",\n        \"FR\",\n        \"DE\",\n        \"GR\",\n        \"ID\",\n        \"IE\",\n        \"IL\",\n        \"IT\",\n        \"JP\",\n        \"KE\",\n        \"MY\",\n        \"MX\",\n        \"MA\",\n        \"NL\",\n        \"NZ\",\n        \"NG\",\n        \"NO\",\n        \"PK\",\n        \"PE\",\n        \"PH\",\n        \"PL\",\n        \"PT\",\n        \"RO\",\n        \"SA\",\n        \"SG\",\n        \"ZA\",\n        \"KR\",\n        \"ES\",\n        \"SE\",\n        \"CH\",\n        \"TW\",\n        \"TH\",\n        \"TR\",\n        \"UA\",\n        \"AE\",\n        \"GB\",\n        \"US\",\n        \"VN\"\n      ],\n      \"enumTitles\": [\n        \"Any (fastest)\",\n        \"Argentina\",\n        \"Australia\",\n        \"Austria\",\n        \"Bangladesh\",\n        \"Belgium\",\n        \"Brazil\",\n        \"Canada\",\n        \"Chile\",\n        \"Colombia\",\n        \"Czechia\",\n        \"Denmark\",\n        \"Egypt\",\n        \"Finland\",\n        \"France\",\n        \"Germany\",\n        \"Greece\",\n        \"Indonesia\",\n        \"Ireland\",\n        \"Israel\",\n        \"Italy\",\n        \"Japan\",\n        \"Kenya\",\n        \"Malaysia\",\n        \"Mexico\",\n        \"Morocco\",\n        \"Netherlands\",\n        \"New Zealand\",\n        \"Nigeria\",\n        \"Norway\",\n        \"Pakistan\",\n        \"Peru\",\n        \"Philippines\",\n        \"Poland\",\n        \"Portugal\",\n        \"Romania\",\n        \"Saudi Arabia\",\n        \"Singapore\",\n        \"South Africa\",\n        \"South Korea\",\n        \"Spain\",\n        \"Sweden\",\n        \"Switzerland\",\n        \"Taiwan\",\n        \"Thailand\",\n        \"Turkey\",\n        \"Ukraine\",\n        \"United Arab Emirates\",\n        \"United Kingdom\",\n        \"United States\",\n        \"Vietnam\"\n      ],\n      \"default\": \"any\"\n    },\n    \"followRelatedVideos\": {\n      \"title\": \"Also follow related videos\",\n      \"type\": \"boolean\",\n      \"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.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxResultsPerProfile\": {\n      \"title\": \"Max posts per account\",\n      \"type\": \"integer\",\n      \"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'.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 50,\n      \"prefill\": 3\n    },\n    \"maxItems\": {\n      \"title\": \"Max posts in total\",\n      \"type\": \"integer\",\n      \"description\": \"Optional limit across all accounts in this run. Leave empty for no overall limit.\",\n      \"minimum\": 1,\n      \"maximum\": 10000\n    },\n    \"downloadVideos\": {\n      \"title\": \"Save video files\",\n      \"type\": \"boolean\",\n      \"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.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"addPostCountry\": {\n      \"title\": \"Add the country each post was made in\",\n      \"type\": \"boolean\",\n      \"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.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": [\n    \"usernames\"\n  ]\n}",
    "readme": "# TikTok Verified Mention Tracker\r\n\r\nSee 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.\r\n\r\nUse it for brand monitoring, sponsorship and campaign proof, influencer discovery and competitor watch. No TikTok login, no cookies and no setup are needed.\r\n\r\n## What this actor does\r\n\r\n- **Real mentions, with the reason.** `mentionType` labels every row `tagged`, `captionText` or `searchResult`. Tagged rows carry the exact tag and its position in the caption, so a clickable tag is never confused with a typed `@handle` or a related post.\r\n- **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`).\r\n- **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.\r\n- **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.\r\n- **Empty fields are omitted.** Fields TikTok doesn't provide for a post are left out instead of filled with placeholders.\r\n\r\n## Output per post\r\n\r\nOne 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.\r\n\r\n| Field | Meaning |\r\n|---|---|\r\n| `targetUsername` | The tracked account this post was found for |\r\n| `mentionType` | `tagged`, `captionText` or `searchResult` |\r\n| `isMentionConfirmed` | `true` when `mentionType` is `tagged` |\r\n| `mentionEntry` | The matching tag: `username`, `userId`, `secUid`, `displayText`, `start`/`end` position in the caption |\r\n| `captionMentionsHandle` | The caption contains `@handle` as text |\r\n| `isOwnPost` | Published by the tracked account itself |\r\n| `targetUserId`, `targetSecUid`, `targetDisplayName`, `targetVerified`, `targetFollowerCount` | The tracked account's profile |\r\n| `postId`, `postUrl`, `postType` | Post ID, link and `video` or `slideshow` |\r\n| `caption`, `textLanguage`, `hashtags`, `mentions` | Caption text, language, hashtags and every tagged account |\r\n| `createTime`, `createdAt` | Post time (Unix seconds and ISO 8601 UTC) |\r\n| `playCount`, `likeCount`, `commentCount`, `shareCount`, `collectCount`, `repostCount` | Engagement at collection time |\r\n| `author` | Creator: ID, username, display name, bio, verified, private flag, avatar, followers, following, likes, videos |\r\n| `music` | Sound: ID, title, artist, album, original flag, duration, cover, streaming links |\r\n| `video` | Size, duration, quality, format, cover images and TikTok's video links |\r\n| `images` | Slideshow photos in order, with sizes and links |\r\n| `poi` | Location tag, when the creator added one |\r\n| `locationCreated` | Country the post was made in, e.g. `US` (when `addPostCountry` is on) |\r\n| `isPaidPartnership` | TikTok shows the \"Paid partnership\" label (sponsored creator content) |\r\n| `isAigc`, `aiContentLabel` | TikTok shows an AI label: `creatorLabeled` (\"Creator labeled as AI-generated\") or `aiGeneratedMedia` (\"Contains AI-generated media\") |\r\n| `isAd`, `adLabelVersion` | Ad markers |\r\n| `downloadedVideoUrl` | Permanent video file link (when `downloadVideos` is on) |\r\n| `rank` | Order in which the post was found for this account |\r\n| `foundVia`, `relatedToPostId` | `search` or `relatedVideos`, and for the latter the post it was related to |\r\n| `searchQuery`, `searchUrl` | The TikTok search that found the post, and a link to repeat it |\r\n| `searchCountry` | Country the search ran from (when `searchCountry` is set) |\r\n| `scrapedAt`, `mediaUrlExpiresAt` | Collection time and when TikTok's media links expire |\r\n\r\n### Sample row (shortened)\r\n\r\n```json\r\n{\r\n  \"targetUsername\": \"billieeilish\",\r\n  \"mentionType\": \"tagged\",\r\n  \"isMentionConfirmed\": true,\r\n  \"mentionEntry\": {\"username\": \"billieeilish\", \"userId\": \"6879693940111901701\", \"displayText\": \"@BILLIE EILISH\", \"start\": 144, \"end\": 158},\r\n  \"captionMentionsHandle\": false,\r\n  \"isOwnPost\": false,\r\n  \"targetUserId\": \"6879693940111901701\",\r\n  \"targetDisplayName\": \"BILLIE EILISH\",\r\n  \"targetVerified\": true,\r\n  \"targetFollowerCount\": 74678836,\r\n  \"postId\": \"7673892883543493910\",\r\n  \"postType\": \"video\",\r\n  \"postUrl\": \"https://www.tiktok.com/@fkedits62/video/7673892883543493910\",\r\n  \"createdAt\": \"2026-08-14T14:23:49Z\",\r\n  \"playCount\": 1400000,\r\n  \"likeCount\": 44400,\r\n  \"commentCount\": 559,\r\n  \"author\": {\"username\": \"fkedits62\", \"followerCount\": 26500, \"verified\": false},\r\n  \"searchQuery\": \"@billieeilish\",\r\n  \"scrapedAt\": \"2026-10-19T09:28:51Z\"\r\n}\r\n```\r\n\r\nA 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`.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `usernames` | array | – | **Required.** Accounts to track: `nike`, `@nike` or `https://www.tiktok.com/@nike` |\r\n| `mentionFilter` | select | `taggedOrCaption` | `taggedOrCaption` (real mentions), `tagged` (clickable tag only) or `all` (every search result, labelled) |\r\n| `excludeOwnPosts` | boolean | `true` | Skip posts published by the tracked account |\r\n| `datePosted` | select | `anyTime` | `anyTime`, `past24Hours`, `pastWeek`, `pastMonth`, `past3Months`, `past6Months` |\r\n| `postedAfter` | string | – | Exact cut-off: a date such as `2026-10-01` or an age such as `3 days` |\r\n| `sortBy` | select | `relevance` | `relevance`, `mostLiked` or `newest` |\r\n| `minPlayCount` | integer | – | Skip posts with fewer views |\r\n| `searchDepth` | select | `standard` | `standard` (fast) or `deep` (more mentions, slower; use 2048 MB memory) |\r\n| `searchCountry` | select | `any` | Search as seen from one country (`JP`, `DE`, `BR`, …, about 50 markets) or `any` |\r\n| `followRelatedVideos` | boolean | `false` | Also collect tagged posts from the related videos of each tagged post (needs 4096 MB memory) |\r\n| `maxResultsPerProfile` | integer | `50` | Max saved posts per account (1-500) |\r\n| `maxItems` | integer | – | Max saved posts across all accounts |\r\n| `downloadVideos` | boolean | `false` | Save video files and add `downloadedVideoUrl` |\r\n| `addPostCountry` | boolean | `false` | Add the country each post was made in (`locationCreated`) |\r\n\r\nOlder inputs keep working: the previous `confirmedMentionsOnly` switch is still honoured when it is sent, and profile links work in `usernames`.\r\n\r\n### Example: brand mentions from the last 30 days, most liked first\r\n\r\n```json\r\n{\r\n  \"usernames\": [\"gymshark\", \"@sephora\"],\r\n  \"datePosted\": \"pastMonth\",\r\n  \"sortBy\": \"mostLiked\",\r\n  \"maxResultsPerProfile\": 100\r\n}\r\n```\r\n\r\n### Example: only clickable tags, as much as TikTok shows\r\n\r\n```json\r\n{\r\n  \"usernames\": [\"https://www.tiktok.com/@billieeilish\"],\r\n  \"mentionFilter\": \"tagged\",\r\n  \"searchDepth\": \"deep\",\r\n  \"maxResultsPerProfile\": 500\r\n}\r\n```\r\n\r\n### Example: daily monitoring of new posts with at least 10,000 views\r\n\r\n```json\r\n{\r\n  \"usernames\": [\"nike\", \"adidas\", \"puma\"],\r\n  \"postedAfter\": \"1 day\",\r\n  \"minPlayCount\": 10000,\r\n  \"sortBy\": \"newest\"\r\n}\r\n```\r\n## Use cases\r\n\r\n- **Brand and sponsorship monitoring:** watch who tags a brand handle, flag paid-partnership posts and keep a permanent copy of the video as proof.\r\n- **Influencer discovery:** find creators who repeatedly tag a product or account, ranked by views or likes.\r\n- **Campaign reporting:** export post-level engagement (views, likes, comments, shares, saves, reposts) and captions for dashboards.\r\n- **Competitor watch:** see which creators a competitor's account tags and how often, or monitor several accounts in one run.\r\n- **Market research:** search from a chosen country and compare which creators and posts mention a handle in each market.\r\n\r\n## FAQ\r\n\r\n**Do I need a TikTok account, cookies or a proxy?**\r\nNo. The tracker reads what TikTok shows logged-out visitors and picks its connection automatically.\r\n\r\n**How many mentions can I expect per account?**\r\nTikTok'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.\r\n\r\n**Why are some rows `captionText` instead of `tagged`?**\r\nTikTok 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.\r\n\r\n**Why does the caption show \"@Gymshark\" when the handle is \"gymshark\"?**\r\nTags display the account's name, not always its handle. `mentionEntry.username` always holds the real handle and `displayText` holds what the caption shows.\r\n\r\n**What does \"Also follow related videos\" add?**\r\nTikTok 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.\r\n\r\n**How do I check sponsored posts?**\r\nFilter 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.\r\n\r\n**Do the video links work outside TikTok?**\r\nTikTok'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.\r\n\r\n**Can I search by country or language?**\r\nYes. 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.\r\n\r\n**Can I monitor accounts on a schedule?**\r\nYes. Schedule the task with `postedAfter` set to your interval (for example `1 day`), and deduplicate by `postId` across runs.\r\n\r\n**Is this affiliated with TikTok?**\r\nNo. It is an independent tool that reads public TikTok pages.\r\n\r\n## Known limits\r\n\r\n- **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.\r\n- **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.\r\n- **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`.\r\n- **Comments are not searched.** TikTok offers no way to find comments that mention an account; scanning comments of related posts finds almost none.\r\n- **Counts are a snapshot.** Views, likes and comments are as of `scrapedAt`; schedule runs to build a history.\r\n\r\n## For AI agents and automations\r\n\r\n- Filter on `mentionType` instead of reading captions: `tagged` is TikTok's own tag of the account, `captionText` is a typed `@handle` without a working tag, `searchResult` is only related.\r\n- Use `targetUserId` to join rows to an account. Handles can change; IDs don't.\r\n- Deduplicate across scheduled runs by `postId`. Engagement numbers are a snapshot at `scrapedAt`.\r\n- An empty dataset with a successful run means TikTok had no matching posts. `TARGET_SUMMARY` tells you whether the account exists and how many posts were checked.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "tiktok-profile-mention-scraper",
      "title": "TikTok Verified Mention Tracker",
      "description": "Find public TikTok posts that tag or @mention a brand or creator account. Each post is labelled as a real tag, a typed @handle or a related result and tied to the account's ID, with date, view and sort filters. No login needed.",
      "version": "1.1",
      "readme": "# TikTok Verified Mention Tracker\r\n\r\nSee 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.\r\n\r\nUse it for brand monitoring, sponsorship and campaign proof, influencer discovery and competitor watch. No TikTok login, no cookies and no setup are needed.\r\n\r\n## What this actor does\r\n\r\n- **Real mentions, with the reason.** `mentionType` labels every row `tagged`, `captionText` or `searchResult`. Tagged rows carry the exact tag and its position in the caption, so a clickable tag is never confused with a typed `@handle` or a related post.\r\n- **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`).\r\n- **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.\r\n- **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.\r\n- **Empty fields are omitted.** Fields TikTok doesn't provide for a post are left out instead of filled with placeholders.\r\n\r\n## Output per post\r\n\r\nOne 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.\r\n\r\n| Field | Meaning |\r\n|---|---|\r\n| `targetUsername` | The tracked account this post was found for |\r\n| `mentionType` | `tagged`, `captionText` or `searchResult` |\r\n| `isMentionConfirmed` | `true` when `mentionType` is `tagged` |\r\n| `mentionEntry` | The matching tag: `username`, `userId`, `secUid`, `displayText`, `start`/`end` position in the caption |\r\n| `captionMentionsHandle` | The caption contains `@handle` as text |\r\n| `isOwnPost` | Published by the tracked account itself |\r\n| `targetUserId`, `targetSecUid`, `targetDisplayName`, `targetVerified`, `targetFollowerCount` | The tracked account's profile |\r\n| `postId`, `postUrl`, `postType` | Post ID, link and `video` or `slideshow` |\r\n| `caption`, `textLanguage`, `hashtags`, `mentions` | Caption text, language, hashtags and every tagged account |\r\n| `createTime`, `createdAt` | Post time (Unix seconds and ISO 8601 UTC) |\r\n| `playCount`, `likeCount`, `commentCount`, `shareCount`, `collectCount`, `repostCount` | Engagement at collection time |\r\n| `author` | Creator: ID, username, display name, bio, verified, private flag, avatar, followers, following, likes, videos |\r\n| `music` | Sound: ID, title, artist, album, original flag, duration, cover, streaming links |\r\n| `video` | Size, duration, quality, format, cover images and TikTok's video links |\r\n| `images` | Slideshow photos in order, with sizes and links |\r\n| `poi` | Location tag, when the creator added one |\r\n| `locationCreated` | Country the post was made in, e.g. `US` (when `addPostCountry` is on) |\r\n| `isPaidPartnership` | TikTok shows the \"Paid partnership\" label (sponsored creator content) |\r\n| `isAigc`, `aiContentLabel` | TikTok shows an AI label: `creatorLabeled` (\"Creator labeled as AI-generated\") or `aiGeneratedMedia` (\"Contains AI-generated media\") |\r\n| `isAd`, `adLabelVersion` | Ad markers |\r\n| `downloadedVideoUrl` | Permanent video file link (when `downloadVideos` is on) |\r\n| `rank` | Order in which the post was found for this account |\r\n| `foundVia`, `relatedToPostId` | `search` or `relatedVideos`, and for the latter the post it was related to |\r\n| `searchQuery`, `searchUrl` | The TikTok search that found the post, and a link to repeat it |\r\n| `searchCountry` | Country the search ran from (when `searchCountry` is set) |\r\n| `scrapedAt`, `mediaUrlExpiresAt` | Collection time and when TikTok's media links expire |\r\n\r\n### Sample row (shortened)\r\n\r\n```json\r\n{\r\n  \"targetUsername\": \"billieeilish\",\r\n  \"mentionType\": \"tagged\",\r\n  \"isMentionConfirmed\": true,\r\n  \"mentionEntry\": {\"username\": \"billieeilish\", \"userId\": \"6879693940111901701\", \"displayText\": \"@BILLIE EILISH\", \"start\": 144, \"end\": 158},\r\n  \"captionMentionsHandle\": false,\r\n  \"isOwnPost\": false,\r\n  \"targetUserId\": \"6879693940111901701\",\r\n  \"targetDisplayName\": \"BILLIE EILISH\",\r\n  \"targetVerified\": true,\r\n  \"targetFollowerCount\": 74678836,\r\n  \"postId\": \"7673892883543493910\",\r\n  \"postType\": \"video\",\r\n  \"postUrl\": \"https://www.tiktok.com/@fkedits62/video/7673892883543493910\",\r\n  \"createdAt\": \"2026-08-14T14:23:49Z\",\r\n  \"playCount\": 1400000,\r\n  \"likeCount\": 44400,\r\n  \"commentCount\": 559,\r\n  \"author\": {\"username\": \"fkedits62\", \"followerCount\": 26500, \"verified\": false},\r\n  \"searchQuery\": \"@billieeilish\",\r\n  \"scrapedAt\": \"2026-10-19T09:28:51Z\"\r\n}\r\n```\r\n\r\nA 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`.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `usernames` | array | – | **Required.** Accounts to track: `nike`, `@nike` or `https://www.tiktok.com/@nike` |\r\n| `mentionFilter` | select | `taggedOrCaption` | `taggedOrCaption` (real mentions), `tagged` (clickable tag only) or `all` (every search result, labelled) |\r\n| `excludeOwnPosts` | boolean | `true` | Skip posts published by the tracked account |\r\n| `datePosted` | select | `anyTime` | `anyTime`, `past24Hours`, `pastWeek`, `pastMonth`, `past3Months`, `past6Months` |\r\n| `postedAfter` | string | – | Exact cut-off: a date such as `2026-10-01` or an age such as `3 days` |\r\n| `sortBy` | select | `relevance` | `relevance`, `mostLiked` or `newest` |\r\n| `minPlayCount` | integer | – | Skip posts with fewer views |\r\n| `searchDepth` | select | `standard` | `standard` (fast) or `deep` (more mentions, slower; use 2048 MB memory) |\r\n| `searchCountry` | select | `any` | Search as seen from one country (`JP`, `DE`, `BR`, …, about 50 markets) or `any` |\r\n| `followRelatedVideos` | boolean | `false` | Also collect tagged posts from the related videos of each tagged post (needs 4096 MB memory) |\r\n| `maxResultsPerProfile` | integer | `50` | Max saved posts per account (1-500) |\r\n| `maxItems` | integer | – | Max saved posts across all accounts |\r\n| `downloadVideos` | boolean | `false` | Save video files and add `downloadedVideoUrl` |\r\n| `addPostCountry` | boolean | `false` | Add the country each post was made in (`locationCreated`) |\r\n\r\nOlder inputs keep working: the previous `confirmedMentionsOnly` switch is still honoured when it is sent, and profile links work in `usernames`.\r\n\r\n### Example: brand mentions from the last 30 days, most liked first\r\n\r\n```json\r\n{\r\n  \"usernames\": [\"gymshark\", \"@sephora\"],\r\n  \"datePosted\": \"pastMonth\",\r\n  \"sortBy\": \"mostLiked\",\r\n  \"maxResultsPerProfile\": 100\r\n}\r\n```\r\n\r\n### Example: only clickable tags, as much as TikTok shows\r\n\r\n```json\r\n{\r\n  \"usernames\": [\"https://www.tiktok.com/@billieeilish\"],\r\n  \"mentionFilter\": \"tagged\",\r\n  \"searchDepth\": \"deep\",\r\n  \"maxResultsPerProfile\": 500\r\n}\r\n```\r\n\r\n### Example: daily monitoring of new posts with at least 10,000 views\r\n\r\n```json\r\n{\r\n  \"usernames\": [\"nike\", \"adidas\", \"puma\"],\r\n  \"postedAfter\": \"1 day\",\r\n  \"minPlayCount\": 10000,\r\n  \"sortBy\": \"newest\"\r\n}\r\n```\r\n## Use cases\r\n\r\n- **Brand and sponsorship monitoring:** watch who tags a brand handle, flag paid-partnership posts and keep a permanent copy of the video as proof.\r\n- **Influencer discovery:** find creators who repeatedly tag a product or account, ranked by views or likes.\r\n- **Campaign reporting:** export post-level engagement (views, likes, comments, shares, saves, reposts) and captions for dashboards.\r\n- **Competitor watch:** see which creators a competitor's account tags and how often, or monitor several accounts in one run.\r\n- **Market research:** search from a chosen country and compare which creators and posts mention a handle in each market.\r\n\r\n## FAQ\r\n\r\n**Do I need a TikTok account, cookies or a proxy?**\r\nNo. The tracker reads what TikTok shows logged-out visitors and picks its connection automatically.\r\n\r\n**How many mentions can I expect per account?**\r\nTikTok'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.\r\n\r\n**Why are some rows `captionText` instead of `tagged`?**\r\nTikTok 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.\r\n\r\n**Why does the caption show \"@Gymshark\" when the handle is \"gymshark\"?**\r\nTags display the account's name, not always its handle. `mentionEntry.username` always holds the real handle and `displayText` holds what the caption shows.\r\n\r\n**What does \"Also follow related videos\" add?**\r\nTikTok 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.\r\n\r\n**How do I check sponsored posts?**\r\nFilter 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.\r\n\r\n**Do the video links work outside TikTok?**\r\nTikTok'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.\r\n\r\n**Can I search by country or language?**\r\nYes. 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.\r\n\r\n**Can I monitor accounts on a schedule?**\r\nYes. Schedule the task with `postedAfter` set to your interval (for example `1 day`), and deduplicate by `postId` across runs.\r\n\r\n**Is this affiliated with TikTok?**\r\nNo. It is an independent tool that reads public TikTok pages.\r\n\r\n## Known limits\r\n\r\n- **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.\r\n- **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.\r\n- **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`.\r\n- **Comments are not searched.** TikTok offers no way to find comments that mention an account; scanning comments of related posts finds almost none.\r\n- **Counts are a snapshot.** Views, likes and comments are as of `scrapedAt`; schedule runs to build a history.\r\n\r\n## For AI agents and automations\r\n\r\n- Filter on `mentionType` instead of reading captions: `tagged` is TikTok's own tag of the account, `captionText` is a typed `@handle` without a working tag, `searchResult` is only related.\r\n- Use `targetUserId` to join rows to an account. Handles can change; IDs don't.\r\n- Deduplicate across scheduled runs by `postId`. Engagement numbers are a snapshot at `scrapedAt`.\r\n- An empty dataset with a successful run means TikTok had no matching posts. `TARGET_SUMMARY` tells you whether the account exists and how many posts were checked.\r\n",
      "meta": {
        "templateId": "python-playwright"
      },
      "input": {
        "title": "TikTok Verified Mention Tracker input",
        "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.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "usernames": {
            "title": "TikTok accounts to track",
            "type": "array",
            "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",
            "prefill": [
              "billieeilish"
            ]
          },
          "mentionFilter": {
            "title": "Which posts to keep",
            "type": "string",
            "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"
            ],
            "default": "taggedOrCaption",
            "prefill": "all"
          },
          "excludeOwnPosts": {
            "title": "Skip the account's own posts",
            "type": "boolean",
            "description": "Leave out posts published by the tracked account itself, so you only see what other people say about it.",
            "default": true,
            "prefill": true
          },
          "datePosted": {
            "title": "Posted within",
            "type": "string",
            "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"
            ],
            "default": "anyTime"
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "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",
            "dateType": "absoluteOrRelative"
          },
          "sortBy": {
            "title": "Order of results",
            "type": "string",
            "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"
            ],
            "default": "relevance"
          },
          "minPlayCount": {
            "title": "Minimum views",
            "type": "integer",
            "description": "Skip posts with fewer views than this. Leave empty to keep posts of any size.",
            "minimum": 0,
            "maximum": 2147483647
          },
          "searchDepth": {
            "title": "Search depth",
            "type": "string",
            "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)"
            ],
            "default": "standard",
            "prefill": "standard"
          },
          "searchCountry": {
            "title": "Search from country",
            "type": "string",
            "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"
            ],
            "default": "any"
          },
          "followRelatedVideos": {
            "title": "Also follow related videos",
            "type": "boolean",
            "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.",
            "default": false,
            "prefill": false
          },
          "maxResultsPerProfile": {
            "title": "Max posts per account",
            "type": "integer",
            "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'.",
            "minimum": 1,
            "maximum": 500,
            "default": 50,
            "prefill": 3
          },
          "maxItems": {
            "title": "Max posts in total",
            "type": "integer",
            "description": "Optional limit across all accounts in this run. Leave empty for no overall limit.",
            "minimum": 1,
            "maximum": 10000
          },
          "downloadVideos": {
            "title": "Save video files",
            "type": "boolean",
            "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.",
            "default": false,
            "prefill": false
          },
          "addPostCountry": {
            "title": "Add the country each post was made in",
            "type": "boolean",
            "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.",
            "default": false,
            "prefill": false
          }
        },
        "required": [
          "usernames"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "TikTok Verified Mention Tracker Output",
        "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": {
            "type": "string",
            "title": "Mentions",
            "description": "Dataset with one row per post found for a tracked account, labelled tagged, caption text or search result.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "./Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "TikTok mentions",
          "views": {
            "overview": {
              "title": "Mentions overview",
              "description": "Posts that tag or mention each tracked account, with the reason they matched.",
              "transformation": {
                "fields": [
                  "targetUsername",
                  "mentionType",
                  "postUrl",
                  "caption",
                  "createdAt",
                  "author.username",
                  "author.followerCount",
                  "playCount",
                  "likeCount",
                  "commentCount",
                  "shareCount",
                  "postType"
                ],
                "flatten": [
                  "author"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "targetUsername": {
                    "label": "Tracked account",
                    "format": "text"
                  },
                  "mentionType": {
                    "label": "Mention type",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post",
                    "format": "link"
                  },
                  "caption": {
                    "label": "Caption",
                    "format": "text"
                  },
                  "createdAt": {
                    "label": "Posted",
                    "format": "date"
                  },
                  "author.username": {
                    "label": "Posted by",
                    "format": "text"
                  },
                  "author.followerCount": {
                    "label": "Author followers",
                    "format": "number"
                  },
                  "playCount": {
                    "label": "Views",
                    "format": "number"
                  },
                  "likeCount": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "commentCount": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "shareCount": {
                    "label": "Shares",
                    "format": "number"
                  },
                  "postType": {
                    "label": "Type",
                    "format": "text"
                  }
                }
              }
            }
          },
          "fields": {
            "targetUsername": {
              "type": "string",
              "title": "Tracked account",
              "description": "Handle of the tracked account this post was found for (lowercase, without @)"
            },
            "mentionType": {
              "type": "string",
              "title": "Mention type",
              "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"
              ]
            },
            "isMentionConfirmed": {
              "type": "boolean",
              "title": "Tagged",
              "description": "True when mentionType is 'tagged'"
            },
            "mentionEntry": {
              "type": "object",
              "title": "Matching tag",
              "description": "The tag that points at the tracked account (tagged posts only)",
              "properties": {
                "username": {
                  "type": "string",
                  "title": "Tagged handle"
                },
                "userId": {
                  "type": "string",
                  "title": "Tagged account ID"
                },
                "secUid": {
                  "type": "string",
                  "title": "Tagged account secUid"
                },
                "displayText": {
                  "type": "string",
                  "title": "Text shown in the caption (often the display name, e.g. @Gymshark)"
                },
                "start": {
                  "type": "integer",
                  "title": "Start position in caption (UTF-16 units, as in JavaScript)"
                },
                "end": {
                  "type": "integer",
                  "title": "End position in caption (UTF-16 units)"
                },
                "awemeId": {
                  "type": "string",
                  "title": "Linked post ID (if any)"
                }
              }
            },
            "captionMentionsHandle": {
              "type": "boolean",
              "title": "Caption types @handle",
              "description": "True when the caption contains the text @handle of the tracked account"
            },
            "isOwnPost": {
              "type": "boolean",
              "title": "Posted by the tracked account",
              "description": "True when the tracked account published the post itself"
            },
            "targetUserId": {
              "type": "string",
              "title": "Tracked account ID",
              "description": "TikTok's numeric ID of the tracked account"
            },
            "targetSecUid": {
              "type": "string",
              "title": "Tracked account secUid",
              "description": "TikTok's secure user ID of the tracked account"
            },
            "targetDisplayName": {
              "type": "string",
              "title": "Tracked account name",
              "description": "Display name of the tracked account"
            },
            "targetVerified": {
              "type": "boolean",
              "title": "Tracked account verified",
              "description": "Whether the tracked account has TikTok's verified badge"
            },
            "targetFollowerCount": {
              "type": "integer",
              "title": "Tracked account followers",
              "description": "Follower count of the tracked account at scrape time"
            },
            "rank": {
              "type": "integer",
              "title": "Rank",
              "description": "0-based order in which the post was first found for this account across all searches"
            },
            "postId": {
              "type": "string",
              "title": "Post ID",
              "description": "TikTok's unique post/video ID (string to preserve 64-bit precision)"
            },
            "postUrl": {
              "type": "string",
              "title": "Post URL",
              "description": "Link to the post on TikTok (/video/ for videos, /photo/ for slideshows)"
            },
            "postType": {
              "type": "string",
              "title": "Post Type",
              "description": "'video' or 'slideshow' (photo carousel)"
            },
            "caption": {
              "type": "string",
              "title": "Caption",
              "description": "Post caption/description text including hashtags and mentions"
            },
            "textLanguage": {
              "type": "string",
              "title": "Text Language",
              "description": "Detected language code of the caption text"
            },
            "createTime": {
              "type": "integer",
              "title": "Create Time (Unix)",
              "description": "Unix timestamp (seconds) when the post was created"
            },
            "createdAt": {
              "type": "string",
              "title": "Created At",
              "description": "ISO 8601 UTC datetime when the post was created"
            },
            "playCount": {
              "type": "integer",
              "title": "Play Count",
              "description": "Number of video plays"
            },
            "likeCount": {
              "type": "integer",
              "title": "Like Count",
              "description": "Number of likes/diggs"
            },
            "commentCount": {
              "type": "integer",
              "title": "Comment Count",
              "description": "Number of comments"
            },
            "shareCount": {
              "type": "integer",
              "title": "Share Count",
              "description": "Number of shares"
            },
            "collectCount": {
              "type": "integer",
              "title": "Collect Count",
              "description": "Number of times post was bookmarked/collected"
            },
            "repostCount": {
              "type": "integer",
              "title": "Repost Count",
              "description": "Number of reposts"
            },
            "stitchEnabled": {
              "type": "boolean",
              "title": "Stitch Enabled",
              "description": "Whether the creator allows stitching this video"
            },
            "shareEnabled": {
              "type": "boolean",
              "title": "Share Enabled",
              "description": "Whether sharing is enabled for this post"
            },
            "duetEnabled": {
              "type": "boolean",
              "title": "Duet Enabled",
              "description": "Whether the creator allows duets with this video"
            },
            "commentStatus": {
              "type": "integer",
              "title": "Comment Status",
              "description": "Comment permission setting (0=all, 1=friends, 2=none)"
            },
            "isAd": {
              "type": "boolean",
              "title": "Is Ad",
              "description": "Whether this post is a paid advertisement"
            },
            "privateItem": {
              "type": "boolean",
              "title": "Private Item",
              "description": "Whether the post is set to private"
            },
            "forFriend": {
              "type": "boolean",
              "title": "For Friend",
              "description": "Whether the post is restricted to friends only"
            },
            "originalItem": {
              "type": "boolean",
              "title": "Original Item",
              "description": "Whether this post is an original (non-duet, non-stitch) creation"
            },
            "isAigc": {
              "type": "boolean",
              "title": "Is AI Generated Content",
              "description": "True when TikTok shows an AI-generated label on the post (creator-labeled or detected)"
            },
            "AIGCDescription": {
              "type": "string",
              "title": "AIGC Description",
              "description": "Description for AI-generated content label"
            },
            "isECVideo": {
              "type": "boolean",
              "title": "Is E-Commerce Video",
              "description": "Shopping video flag, when TikTok reports it for the post"
            },
            "adLabelVersion": {
              "type": "integer",
              "title": "Ad Label Version",
              "description": "Ad label version; non-zero when the post is a sponsored ad"
            },
            "mediaUrlExpiresAt": {
              "type": "string",
              "title": "Media URL Expires At",
              "description": "ISO 8601 UTC datetime when signed media URLs (video/cover) expire"
            },
            "author": {
              "type": "object",
              "title": "Author",
              "description": "Author/creator information at time of scraping",
              "properties": {
                "id": {
                  "type": "string",
                  "title": "User ID"
                },
                "secUid": {
                  "type": "string",
                  "title": "Secure UID"
                },
                "username": {
                  "type": "string",
                  "title": "Username"
                },
                "displayName": {
                  "type": "string",
                  "title": "Display Name"
                },
                "bio": {
                  "type": "string",
                  "title": "Bio"
                },
                "verified": {
                  "type": "boolean",
                  "title": "Verified"
                },
                "privateAccount": {
                  "type": "boolean",
                  "title": "Private Account"
                },
                "roomId": {
                  "type": "string",
                  "title": "Live Room ID (non-empty when live)"
                },
                "avatarUrl": {
                  "type": "string",
                  "title": "Avatar URL"
                },
                "followerCount": {
                  "type": "integer",
                  "title": "Followers"
                },
                "followingCount": {
                  "type": "integer",
                  "title": "Following"
                },
                "heartCount": {
                  "type": "integer",
                  "title": "Hearts/Likes"
                },
                "videoCount": {
                  "type": "integer",
                  "title": "Videos"
                }
              }
            },
            "music": {
              "type": "object",
              "title": "Music",
              "description": "Sound/music used in the post",
              "properties": {
                "id": {
                  "type": "string",
                  "title": "Music ID"
                },
                "title": {
                  "type": "string",
                  "title": "Title"
                },
                "authorName": {
                  "type": "string",
                  "title": "Author"
                },
                "original": {
                  "type": "boolean",
                  "title": "Original Sound"
                },
                "duration": {
                  "type": "integer",
                  "title": "Duration (s)"
                },
                "isCopyrighted": {
                  "type": "boolean",
                  "title": "Is Copyrighted"
                },
                "isCommerceMusic": {
                  "type": "boolean",
                  "title": "Is Commerce Music"
                },
                "isUnlimitedMusic": {
                  "type": "boolean",
                  "title": "Is Unlimited Music"
                },
                "isPrivate": {
                  "type": "boolean",
                  "title": "Is Private Sound"
                },
                "shootDuration": {
                  "type": "number",
                  "title": "Shoot Duration (s)"
                },
                "album": {
                  "type": "string",
                  "title": "Album"
                },
                "dspLinks": {
                  "type": "array",
                  "title": "DSP Links (Spotify, Apple Music, etc.)"
                },
                "playUrl": {
                  "type": "string",
                  "title": "Play URL"
                },
                "coverUrl": {
                  "type": "string",
                  "title": "Cover URL"
                }
              }
            },
            "video": {
              "type": "object",
              "title": "Video",
              "description": "Video technical metadata and signed play/cover URLs",
              "properties": {
                "width": {
                  "type": "integer",
                  "title": "Width (px)"
                },
                "height": {
                  "type": "integer",
                  "title": "Height (px)"
                },
                "duration": {
                  "type": "integer",
                  "title": "Duration (s)"
                },
                "ratio": {
                  "type": "string",
                  "title": "Aspect Ratio"
                },
                "definition": {
                  "type": "string",
                  "title": "Definition"
                },
                "bitrate": {
                  "type": "integer",
                  "title": "Bitrate"
                },
                "codecType": {
                  "type": "string",
                  "title": "Codec"
                },
                "format": {
                  "type": "string",
                  "title": "Format"
                },
                "size": {
                  "type": "string",
                  "title": "File Size (bytes)"
                },
                "playUrl": {
                  "type": "string",
                  "title": "Play URL (plays only inside TikTok)"
                },
                "downloadAddr": {
                  "type": "string",
                  "title": "Download URL (plays only inside TikTok)"
                },
                "cover": {
                  "type": "string",
                  "title": "Cover Image URL"
                },
                "originCover": {
                  "type": "string",
                  "title": "Original Cover URL"
                },
                "dynamicCover": {
                  "type": "string",
                  "title": "Dynamic Cover URL"
                },
                "videoQuality": {
                  "type": "string",
                  "title": "Video Quality Label"
                },
                "bitrateInfo": {
                  "type": "array",
                  "title": "Bitrate Info",
                  "description": "All available quality/bitrate variants with play URLs"
                },
                "volumeInfo": {
                  "type": "object",
                  "title": "Volume Info",
                  "description": "Audio loudness and peak level metadata"
                },
                "subtitleInfos": {
                  "type": "array",
                  "title": "Subtitle tracks"
                }
              }
            },
            "images": {
              "type": "array",
              "title": "Slideshow Images",
              "description": "Images for slideshow posts (postType='slideshow')",
              "items": {
                "type": "object",
                "properties": {
                  "ordinal": {
                    "type": "integer",
                    "title": "Index"
                  },
                  "width": {
                    "type": "integer",
                    "title": "Width"
                  },
                  "height": {
                    "type": "integer",
                    "title": "Height"
                  },
                  "urlList": {
                    "type": "array",
                    "title": "Image URLs"
                  }
                }
              }
            },
            "hashtags": {
              "type": "array",
              "title": "Hashtags",
              "description": "Hashtags used in the post caption",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "title": "Hashtag ID"
                  },
                  "name": {
                    "type": "string",
                    "title": "Hashtag Name"
                  },
                  "isCommerce": {
                    "type": "boolean",
                    "title": "Is Commerce"
                  }
                }
              }
            },
            "mentions": {
              "type": "array",
              "title": "All tags in the caption",
              "description": "Every account tagged in the caption",
              "items": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "title": "Handle"
                  },
                  "userId": {
                    "type": "string",
                    "title": "Account ID"
                  },
                  "secUid": {
                    "type": "string",
                    "title": "Account secUid"
                  },
                  "displayText": {
                    "type": "string",
                    "title": "Text shown in the caption"
                  },
                  "start": {
                    "type": "integer",
                    "title": "Start position (UTF-16 units)"
                  },
                  "end": {
                    "type": "integer",
                    "title": "End position (UTF-16 units)"
                  },
                  "awemeId": {
                    "type": "string",
                    "title": "Linked post ID (if any)"
                  }
                }
              }
            },
            "poi": {
              "type": "object",
              "title": "Location tag",
              "description": "TikTok place attached to the post (name, address, city, country, category), when the creator added one"
            },
            "downloadedVideoUrl": {
              "type": "string",
              "title": "Saved video file",
              "description": "Permanent link to the video file saved in this run's storage (only when 'Save video files' is on)"
            },
            "searchQuery": {
              "type": "string",
              "title": "Search that found it",
              "description": "The TikTok search text that first returned this post"
            },
            "searchUrl": {
              "type": "string",
              "title": "Search link",
              "description": "Open the same TikTok search in a browser"
            },
            "scrapedAt": {
              "type": "string",
              "title": "Scraped at",
              "description": "ISO 8601 UTC time of collection"
            },
            "aiContentLabel": {
              "type": "string",
              "title": "AI label",
              "description": "Which AI label TikTok shows: 'creatorLabeled' (Creator labeled as AI-generated) or 'aiGeneratedMedia' (Contains AI-generated media)",
              "enum": [
                "creatorLabeled",
                "aiGeneratedMedia"
              ]
            },
            "isPaidPartnership": {
              "type": "boolean",
              "title": "Paid partnership",
              "description": "True when TikTok shows the 'Paid partnership' label on the post"
            },
            "locationCreated": {
              "type": "string",
              "title": "Post country",
              "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"
            },
            "searchCountry": {
              "type": "string",
              "title": "Searched from",
              "description": "Country the TikTok search ran from (only when 'Search from country' is set)"
            },
            "foundVia": {
              "type": "string",
              "title": "Found via",
              "enum": [
                "search",
                "relatedVideos"
              ],
              "description": "'search' = returned by TikTok search; 'relatedVideos' = found in the related videos of a post that tags the account"
            },
            "relatedToPostId": {
              "type": "string",
              "title": "Related to post",
              "description": "For posts found via related videos: the post whose related list contained it"
            }
          }
        }
      }
    },
    "buildNumber": "1.1.5",
    "imageDigest": "971f442f52b932c9286db1d5493056a77ddb2febd739e15edc96dda8387e51b4",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03156888888888889
    }
  }
}