tiktok-research

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

TikTok Research Skill

TikTok研究技能

Use this skill for TikTok metadata research:
  • keyword and hashtag sampling
  • competitor or creator sampling
  • creator account discovery
  • profile enrichment
  • comments and audience language
  • trend and benchmark discovery
  • dataset summaries
Follow shared routing and guidance rules in:
  • postplus-shared
    release-shell rules
  • postplus-shared
    research preferences
Read these references before implementation:
  • ${CLAUDE_SKILL_DIR}/references/actor-selection.md
  • ${CLAUDE_SKILL_DIR}/references/normalized-schema.md
  • ${CLAUDE_SKILL_DIR}/references/tool-contracts.md
Do not treat generic "TikTok research" requests as plain web search unless the user clearly wants external articles, policy, or news.
使用本技能进行TikTok元数据研究:
  • 关键词和话题标签采样
  • 竞品或创作者采样
  • 创作者账号挖掘
  • 资料信息补充
  • 评论与受众语言分析
  • 趋势与基准数据挖掘
  • 数据集摘要
遵循以下共享的路由和指导规则:
  • postplus-shared
    发布外壳规则
  • postplus-shared
    研究偏好
在实施前阅读以下参考文档:
  • ${CLAUDE_SKILL_DIR}/references/actor-selection.md
  • ${CLAUDE_SKILL_DIR}/references/normalized-schema.md
  • ${CLAUDE_SKILL_DIR}/references/tool-contracts.md
除非用户明确需要外部文章、政策或新闻,否则不要将通用的“TikTok研究”请求视为普通网页搜索。

Cost Discipline

成本管控

When using free-tier collection credits, prefer:
  • serial runs, not parallel runs
  • 5-12 results per hashtag or query
  • 3-5 seed hashtags per batch
  • 3-5 strongest search queries per batch
  • comments only after a promising batch is identified
Do not brute-force full-market collection first. Sample, inspect, refine, then expand.
Current bounded-first-pass rule:
  • treat brief
    limit
    as the target shortlist or candidate goal, not as the per-query scrape size
  • let
    build_tiktok_actor_input.mjs
    keep first-pass
    resultsPerPage
    /
    maxProfilesPerQuery
    bounded unless you explicitly need a broader second pass
  • for
    tiktok-scraper
    , default to
    searchSection: "/video"
    for content-first creator discovery unless you intentionally want account-search behavior
  • keep comment collection, media downloads, subtitles, follower/following expansion, and similar extras off in the first pass unless the current step truly needs them
使用免费层级的采集额度时,优先选择:
  • 串行运行,而非并行运行
  • 每个话题标签或查询返回5-12条结果
  • 每批次使用3-5个种子话题标签
  • 每批次使用3-5个最有效的搜索查询
  • 仅在确定有前景的批次后再收集评论
不要一开始就强行进行全市场采集。先采样、检查、优化,再扩展范围。
当前的首轮受限规则:
  • 将简短的
    limit
    视为目标候选名单或筛选目标,而非每个查询的抓取规模
  • 除非明确需要更广泛的二次抓取,否则让
    build_tiktok_actor_input.mjs
    保持首轮的
    resultsPerPage
    /
    maxProfilesPerQuery
    受限
  • 对于
    tiktok-scraper
    ,默认设置
    searchSection: "/video"
    以优先基于内容发现创作者,除非有意进行账号搜索
  • 首轮抓取时关闭评论收集、媒体下载、字幕提取、粉丝/关注者拓展及类似额外功能,除非当前步骤确实需要

Key Files

关键文件

  • ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/rank_tiktok_accounts.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/expand_tiktok_creator_graph.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_dataset.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/collect_top_video_comments.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_comments.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/generate_tiktok_report.mjs
  • ${CLAUDE_SKILL_DIR}/templates/
    — sample hashtag, search, and competitor input files
  • ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/rank_tiktok_accounts.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/expand_tiktok_creator_graph.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_dataset.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/collect_top_video_comments.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_comments.mjs
  • ${CLAUDE_SKILL_DIR}/scripts/generate_tiktok_report.mjs
  • ${CLAUDE_SKILL_DIR}/templates/
    — 示例话题标签、搜索和竞品输入文件

Prerequisites

前置条件

In the product-shell runtime, follow
postplus-shared
release-shell rules.
TikTok-specific runtime notes:
  • when this skill references its own scripts, references, or templates, use absolute paths anchored at
    ${CLAUDE_SKILL_DIR}
    ; do not rely on bare
    scripts/...
    ,
    references/...
    ,
    templates/...
    , or
    skills/20-research/tiktok-research/...
    paths that depend on the current working directory
  • when extracting creator handles from a normalized video dataset, use
    .items[].authorUsername
  • if hosted capability is unavailable, unauthorized, or returns a stable network error, stop immediately instead of switching to ad hoc shell glue
Node 18+ is required. This workspace already has Node available.
在产品外壳运行时,遵循
postplus-shared
发布外壳规则。
TikTok特定运行时注意事项:
  • 当本技能引用自身脚本、参考文档或模板时,使用以
    ${CLAUDE_SKILL_DIR}
    为锚点的绝对路径;不要依赖依赖当前工作目录的裸路径,如
    scripts/...
    references/...
    templates/...
    skills/20-research/tiktok-research/...
  • 从标准化视频数据集中提取创作者账号时,使用
    .items[].authorUsername
    字段
  • 如果托管功能不可用、未授权或返回稳定的网络错误,请立即停止操作,不要切换到临时的外壳粘合方案
需要Node 18+版本。本工作区已提供Node环境。

Default Actors

默认工具

  • creator discovery by matched videos:
    tiktok-scraper
  • keyword account-search supplement:
    tiktok-user-search-scraper
  • profile enrichment:
    tiktok-profile-scraper
  • keyword / hashtag video discovery:
    tiktok-scraper
  • direct video enrichment:
    tiktok-video-scraper
  • hashtag-only sampling:
    tiktok-hashtag-scraper
  • comment collection default:
    tiktok-comments-scraper
  • low-cost search expansion fallback:
    tiktok-scraper
  • low-cost exploratory query fallback:
    tiktok-scraper-api
  • TikTok Shop creator discovery:
    tiktok-shop-creators
Treat these as defaults, not hard requirements.
Release-shell note:
  • tiktok-profile-scraper
    (secondary provider) remains shelved for current product-shell runs. Do not route to it until billing adds and verifies a provider cost rule.
  • 通过匹配视频发现创作者:
    tiktok-scraper
  • 关键词账号搜索补充:
    tiktok-user-search-scraper
  • 资料信息补充:
    tiktok-profile-scraper
  • 关键词/话题标签视频发现:
    tiktok-scraper
  • 直接视频信息补充:
    tiktok-video-scraper
  • 仅话题标签采样:
    tiktok-hashtag-scraper
  • 默认评论收集:
    tiktok-comments-scraper
  • 低成本搜索扩展备选:
    tiktok-scraper
  • 低成本探索性查询备选:
    tiktok-scraper-api
  • TikTok Shop创作者发现:
    tiktok-shop-creators
将这些视为默认选项,而非硬性要求。
发布外壳注意事项:
  • tiktok-profile-scraper
    (次要提供商)在当前产品外壳运行中暂不启用。在计费系统添加并验证提供商成本规则前,不要路由到该工具。

Routing Rules

路由规则

Start from the user's real collection surface, not from one favorite actor.
  • creator search with follower-band or content-fit constraints ->
    tiktok-scraper
    first
  • creator search as account-search supplement ->
    tiktok-user-search-scraper
  • profile enrichment ->
    tiktok-profile-scraper
  • bulk profile enrichment stays on
    tiktok-profile-scraper
  • topic/search video discovery ->
    tiktok-scraper
  • hashtag-only sampling ->
    tiktok-hashtag-scraper
  • known video URL enrichment ->
    tiktok-video-scraper
  • focused comments ->
    tiktok-comments-scraper
  • larger or cheaper comment runs ->
    tiktok-comments-scraper
  • region-aware low-cost discovery ->
    tiktok-scraper
  • shop creator analytics ->
    tiktok-shop-creators
Do not use TikTok Shop actors for generic creator discovery. Do not use Creative Center ad actors as if they were organic creator data. If the user wants paid ad intelligence, route to
tiktok-ad-research
. If the user specifically wants TikTok music or sound discovery, route to:
  • trending music by region -> use the music-discovery path within
    tiktok-research
  • videos under a specific music/sound ->
    tiktok-music-sound-collector
    when released
  • local download and audio extraction ->
    tiktok-music-archive-downloader
For multi-step TikTok music workflows, read
postplus-shared
TikTok music workflow.
从用户实际的采集需求出发,而非偏好某一个工具。
  • 带有粉丝量级或内容匹配约束的创作者搜索 -> 优先使用
    tiktok-scraper
  • 作为账号搜索补充的创作者搜索 -> 使用
    tiktok-user-search-scraper
  • 资料信息补充 -> 使用
    tiktok-profile-scraper
  • 批量资料信息补充 -> 持续使用
    tiktok-profile-scraper
  • 主题/搜索视频发现 -> 使用
    tiktok-scraper
  • 仅话题标签采样 -> 使用
    tiktok-hashtag-scraper
  • 已知视频URL信息补充 -> 使用
    tiktok-video-scraper
  • 定向评论收集 -> 使用
    tiktok-comments-scraper
  • 大规模或低成本评论收集 -> 使用
    tiktok-comments-scraper
  • 区域感知的低成本发现 -> 使用
    tiktok-scraper
  • 店铺创作者分析 -> 使用
    tiktok-shop-creators
不要将TikTok Shop工具用于通用创作者发现。 不要将创意中心广告工具当作自然创作者数据使用。 如果用户需要付费广告情报,路由到
tiktok-ad-research
。 如果用户明确想要TikTok音乐或音效发现,路由到:
  • 区域热门音乐 -> 使用
    tiktok-research
    内的音乐发现路径
  • 特定音乐/音效下的视频 -> 待
    tiktok-music-sound-collector
    发布后使用
  • 本地下载与音频提取 -> 使用
    tiktok-music-archive-downloader
对于多步骤TikTok音乐工作流,请阅读
postplus-shared
的TikTok音乐工作流文档。

Creator Discovery V2 Rule

创作者发现V2规则

For TikTok creator discovery, do not default to plain user search when the brief includes:
  • follower bands like
    5k-10k
  • recent activity
  • local language or geo fit
  • audience fit inferred from what creators actually post
Prefer this order:
  1. collect matched videos
  2. extract authors
  3. expand around strong seed videos if recall is weak
  4. enrich profiles
  5. rank with profile plus content evidence
Use
tiktok-user-search-scraper
as a supplement, not the default first pass, unless the user explicitly wants account-search recall.
对于TikTok创作者发现,当需求包含以下内容时,不要默认使用普通用户搜索:
  • 粉丝量级区间如
    5k-10k
  • 近期活跃度
  • 本地语言或地域匹配
  • 从创作者实际发布内容推断的受众匹配
优先遵循以下顺序:
  1. 收集匹配的视频
  2. 提取作者信息
  3. 如果召回率低,围绕优质种子视频拓展
  4. 补充资料信息
  5. 结合资料和内容证据进行排名
tiktok-user-search-scraper
作为补充工具,而非默认的首轮方案,除非用户明确需要账号搜索召回结果。

Input Compilation

输入编译

When the request is expressed as a research goal instead of actor JSON:
  1. write a small brief JSON with fields such as
    task
    ,
    queries
    ,
    hashtags
    ,
    usernames
    ,
    urls
    ,
    limit
    ,
    country
  2. run
    ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs
  3. inspect the compiled actor input before the collection run if the request is high-cost or ambiguous
This keeps the workflow stable even when actor input shapes differ.
Bounded brief rule:
  1. keep the first pass small by default:
    • 3-5 strongest queries
    • 2-4 seed hashtags
    • limit
      set to the candidate or shortlist goal, not the per-query scrape size
  2. only add explicit actor-size overrides such as
    resultsPerPage
    ,
    maxProfilesPerQuery
    ,
    commentsPerPost
    , or
    scrapeRelatedVideos
    when the current step truly needs them
  3. if the first pass is too thin, expand in a second pass instead of starting broad
当请求以研究目标而非工具JSON形式表达时:
  1. 编写一个简短的JSON摘要,包含
    task
    queries
    hashtags
    usernames
    urls
    limit
    country
    等字段
  2. 运行
    ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs
  3. 如果请求成本高或存在歧义,在采集运行前检查编译后的工具输入
即使工具输入格式不同,这也能保持工作流稳定。
受限摘要规则:
  1. 默认保持首轮规模较小:
    • 3-5个最有效的查询
    • 2-4个种子话题标签
    • limit
      设置为候选名单或筛选目标,而非每个查询的抓取规模
  2. 仅在当前步骤确实需要时,添加明确的工具规模覆盖参数,如
    resultsPerPage
    maxProfilesPerQuery
    commentsPerPost
    scrapeRelatedVideos
  3. 如果首轮结果过于单薄,在第二轮扩展范围,而非一开始就大规模抓取

Product-shell temp-file flow

产品外壳临时文件流程

Inside the product-shell runtime, prefer this order:
  1. when possible, skip the temporary brief file and call
    build_tiktok_actor_input.mjs
    directly with repeated flags such as:
    • --query
    • --hashtag
    • --username
    • --url
    • --limit
    • --country
    • --actor
    • --output
  2. write the actor input JSON into the current work folder's
    .postplus/
    directory
  3. keep raw datasets and other intermediate files in
    .postplus/
  4. keep only final user-facing deliverables outside
    .postplus/
Direct-output rule:
  1. ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs --output <actor-input.json>
    creates that actor-input file itself
  2. do not
    Read
    or
    Write
    the actor-input output path before running that script
  3. do not pre-read the actor-input output path just because it does not exist yet
  4. let the script create the file, then consume that same file path in the next step
Fallback only when the direct flag path is genuinely awkward:
  1. write the brief JSON into the current work folder's
    .postplus/
    directory with the
    Write
    tool
  2. run
    build_tiktok_actor_input.mjs
    against that
    .postplus/*.json
    brief
在产品外壳运行时,优先遵循以下顺序:
  1. 尽可能跳过临时摘要文件,直接使用重复标志调用
    build_tiktok_actor_input.mjs
    ,如:
    • --query
    • --hashtag
    • --username
    • --url
    • --limit
    • --country
    • --actor
    • --output
  2. 将工具输入JSON写入当前工作文件夹的
    .postplus/
    目录
  3. 将原始数据集和其他中间文件保存在
    .postplus/
  4. 仅将最终面向用户的交付物放在
    .postplus/
    之外
直接输出规则:
  1. ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs --output <actor-input.json>
    会直接创建该工具输入文件
  2. 在运行该脚本前,不要读取或写入工具输入输出路径
  3. 不要仅仅因为工具输入输出路径尚未存在就预先读取它
  4. 让脚本创建文件,然后在下一步使用相同的文件路径
仅当直接标志路径确实操作不便时才使用备选方案:
  1. 使用Write工具将摘要JSON写入当前工作文件夹的
    .postplus/
    目录
  2. 针对该
    .postplus/*.json
    摘要运行
    build_tiktok_actor_input.mjs

First move for clear KOL discovery

KOL发现明确需求的第一步

For a clear request like:
  • 帮我在 TikTok 上找 20 个适合卖护肤仪的 KOL,优先微中腰部账号,给我一个可继续筛选的 shortlist。
default to this first move:
  1. skip the temporary brief JSON
  2. run
    ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs
    with
    --query
    ,
    --limit
    ,
    --actor
    , and
    --output
  3. place the output under the current work folder's
    .postplus/
  4. then run
    ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs
    against that output file
Do not start by reading or writing a new
.postplus/*.json
file when the direct actor-input path already fits.
对于明确的请求,例如:
  • 帮我在 TikTok 上找 20 个适合卖护肤仪的 KOL,优先微中腰部账号,给我一个可继续筛选的 shortlist。
默认采取以下第一步操作:
  1. 跳过临时摘要JSON
  2. 使用
    --query
    --limit
    --actor
    --output
    参数运行
    ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs
  3. 将输出放在当前工作文件夹的
    .postplus/
  4. 然后针对该输出文件运行
    ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs
当直接工具输入路径已适用时,不要一开始就读取或写入新的
.postplus/*.json
文件。

Profile-enrichment bridge

资料信息补充桥接

For creator discovery from a normalized
videos
dataset:
  1. extract usernames from
    .items[].authorUsername
  2. write a real profile-request JSON file under
    .postplus/
  3. run
    collection_actor_run.mjs
    with
    tiktok-profile-scraper
  4. normalize the profile dataset
  5. run
    rank_tiktok_accounts.mjs --profiles <profiles-normalized.json> --videos <videos-normalized.json>
Do not call
rank_tiktok_accounts.mjs
with only
--videos
.
从标准化
videos
数据集进行创作者发现时:
  1. .items[].authorUsername
    字段提取用户名
  2. .postplus/
    下编写真实的资料请求JSON文件
  3. 使用
    tiktok-profile-scraper
    运行
    collection_actor_run.mjs
  4. 标准化资料数据集
  5. 运行
    rank_tiktok_accounts.mjs --profiles <profiles-normalized.json> --videos <videos-normalized.json>
不要仅使用
--videos
参数调用
rank_tiktok_accounts.mjs

Merge rule

合并规则

If you collect ranked results in multiple batches:
  1. write each ranked batch to its own JSON file
  2. merge them from disk with a plain file-based command such as:
bash
jq -s 'map(.items) | add | sort_by(-.followersCount) | .[0:20]' file-a.json file-b.json
如果分批收集排名结果:
  1. 将每个排名批次写入单独的JSON文件
  2. 使用基于文件的普通命令从磁盘合并,例如:
bash
jq -s 'map(.items) | add | sort_by(-.followersCount) | .[0:20]' file-a.json file-b.json

Minimal Workflow

最小工作流

Hashtag sampling

话题标签采样

Build input:
bash
node ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs \
  --brief ${CLAUDE_SKILL_DIR}/templates/hashtags.json \
  --actor tiktok-scraper \
  --output <work-folder>/.postplus/hashtags-input.json
Run actor:
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-videos \
  --input <work-folder>/.postplus/hashtags-input.json \
  --output <work-folder>/.postplus/hashtags.json
Then summarize:
bash
node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/hashtags.json \
  --actor tiktok-scraper \
  --dataset-type videos \
  --output <work-folder>/.postplus/hashtags-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/hashtags-normalized.json
构建输入:
bash
node ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs \
  --brief ${CLAUDE_SKILL_DIR}/templates/hashtags.json \
  --actor tiktok-scraper \
  --output <work-folder>/.postplus/hashtags-input.json
运行工具:
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-videos \
  --input <work-folder>/.postplus/hashtags-input.json \
  --output <work-folder>/.postplus/hashtags.json
然后生成摘要:
bash
node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/hashtags.json \
  --actor tiktok-scraper \
  --dataset-type videos \
  --output <work-folder>/.postplus/hashtags-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/hashtags-normalized.json

Search-query sampling

搜索查询采样

Build input:
bash
node ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs \
  --brief ${CLAUDE_SKILL_DIR}/templates/searches.json \
  --actor tiktok-scraper \
  --output <work-folder>/.postplus/searches-input.json
Run actor:
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-videos \
  --input <work-folder>/.postplus/searches-input.json \
  --output <work-folder>/.postplus/searches.json
Then summarize:
bash
node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/searches.json \
  --actor tiktok-scraper \
  --dataset-type videos \
  --output <work-folder>/.postplus/searches-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/searches-normalized.json
构建输入:
bash
node ${CLAUDE_SKILL_DIR}/scripts/build_tiktok_actor_input.mjs \
  --brief ${CLAUDE_SKILL_DIR}/templates/searches.json \
  --actor tiktok-scraper \
  --output <work-folder>/.postplus/searches-input.json
运行工具:
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-videos \
  --input <work-folder>/.postplus/searches-input.json \
  --output <work-folder>/.postplus/searches.json
然后生成摘要:
bash
node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/searches.json \
  --actor tiktok-scraper \
  --dataset-type videos \
  --output <work-folder>/.postplus/searches-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/searches-normalized.json

Competitor sampling

竞品采样

json
{
  "profiles": ["grammarly", "notionhq", "raycastapp"],
  "resultsPerPage": 10
}
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-profiles \
  --input <work-folder>/.postplus/competitors.json \
  --output <work-folder>/.postplus/competitors-results.json
Then normalize and rank:
bash
node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/competitors-results.json \
  --actor tiktok-profile-scraper \
  --dataset-type profiles \
  --output <work-folder>/.postplus/competitors-profiles-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/rank_tiktok_accounts.mjs \
  --profiles <work-folder>/.postplus/competitors-profiles-normalized.json
json
{
  "profiles": ["grammarly", "notionhq", "raycastapp"],
  "resultsPerPage": 10
}
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-profiles \
  --input <work-folder>/.postplus/competitors.json \
  --output <work-folder>/.postplus/competitors-results.json
然后标准化并排名:
bash
node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/competitors-results.json \
  --actor tiktok-profile-scraper \
  --dataset-type profiles \
  --output <work-folder>/.postplus/competitors-profiles-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/rank_tiktok_accounts.mjs \
  --profiles <work-folder>/.postplus/competitors-profiles-normalized.json

Creator discovery by keyword

通过关键词发现创作者

json
{
  "searchQueries": ["ai tools", "productivity workflow", "gmail tips"],
  "maxProfilesPerQuery": 8
}
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-users \
  --input <work-folder>/.postplus/creator-search.json \
  --output <work-folder>/.postplus/creator-search-results.json

node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/creator-search-results.json \
  --actor tiktok-user-search-scraper \
  --dataset-type user-search \
  --output <work-folder>/.postplus/creator-search-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/rank_tiktok_accounts.mjs \
  --profiles <work-folder>/.postplus/creator-search-normalized.json
json
{
  "searchQueries": ["ai tools", "productivity workflow", "gmail tips"],
  "maxProfilesPerQuery": 8
}
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-users \
  --input <work-folder>/.postplus/creator-search.json \
  --output <work-folder>/.postplus/creator-search-results.json

node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/creator-search-results.json \
  --actor tiktok-user-search-scraper \
  --dataset-type user-search \
  --output <work-folder>/.postplus/creator-search-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/rank_tiktok_accounts.mjs \
  --profiles <work-folder>/.postplus/creator-search-normalized.json

Creator discovery by matched videos and graph expansion

通过匹配视频和图谱拓展发现创作者

Use this when the request cares about small creators, real topical activity, or content fit more than user-search ranking.
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-videos \
  --input <work-folder>/.postplus/topic-video-search.json \
  --output <work-folder>/.postplus/topic-video-search-raw.json

node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/topic-video-search-raw.json \
  --actor tiktok-scraper \
  --dataset-type videos \
  --output <work-folder>/.postplus/topic-video-search-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/expand_tiktok_creator_graph.mjs \
  --input <work-folder>/.postplus/topic-video-search-normalized.json \
  --output <work-folder>/.postplus/topic-graph-raw.json \
  --top 10 \
  --results-per-seed 6
当请求更关注小创作者、真实话题活跃度或内容匹配度,而非用户搜索排名时,使用此方法。
bash
node ${CLAUDE_SKILL_DIR}/scripts/collection_actor_run.mjs \
  --collection-key tiktok-videos \
  --input <work-folder>/.postplus/topic-video-search.json \
  --output <work-folder>/.postplus/topic-video-search-raw.json

node ${CLAUDE_SKILL_DIR}/scripts/normalize_tiktok_dataset.mjs \
  --input <work-folder>/.postplus/topic-video-search-raw.json \
  --actor tiktok-scraper \
  --dataset-type videos \
  --output <work-folder>/.postplus/topic-video-search-normalized.json

node ${CLAUDE_SKILL_DIR}/scripts/expand_tiktok_creator_graph.mjs \
  --input <work-folder>/.postplus/topic-video-search-normalized.json \
  --output <work-folder>/.postplus/topic-graph-raw.json \
  --top 10 \
  --results-per-seed 6

Comment sampling

评论采样

bash
node ${CLAUDE_SKILL_DIR}/scripts/collect_top_video_comments.mjs \
  --input <work-folder>/.postplus/searches.json \
  --output <work-folder>/.postplus/comments.json \
  --collection-key tiktok-comments \
  --top 8 \
  --max-comments 40
Then summarize:
bash
node ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_comments.mjs \
  --input <work-folder>/.postplus/comments.json
bash
node ${CLAUDE_SKILL_DIR}/scripts/collect_top_video_comments.mjs \
  --input <work-folder>/.postplus/searches.json \
  --output <work-folder>/.postplus/comments.json \
  --collection-key tiktok-comments \
  --top 8 \
  --max-comments 40
然后生成摘要:
bash
node ${CLAUDE_SKILL_DIR}/scripts/analyze_tiktok_comments.mjs \
  --input <work-folder>/.postplus/comments.json

Report output

报告输出

bash
node ${CLAUDE_SKILL_DIR}/scripts/generate_tiktok_report.mjs \
  --keyword-summary <work-folder>/.postplus/searches-summary.json \
  --hashtag-summary <work-folder>/.postplus/hashtags-summary.json \
  --competitor-summary <work-folder>/.postplus/competitors-summary.json \
  --comments-summary <work-folder>/.postplus/comments-summary.json \
  --output reports/tiktok-research.md
bash
node ${CLAUDE_SKILL_DIR}/scripts/generate_tiktok_report.mjs \
  --keyword-summary <work-folder>/.postplus/searches-summary.json \
  --hashtag-summary <work-folder>/.postplus/hashtags-summary.json \
  --competitor-summary <work-folder>/.postplus/competitors-summary.json \
  --comments-summary <work-folder>/.postplus/comments-summary.json \
  --output reports/tiktok-research.md

Default Sequence

默认流程

  1. choose the route first: content-first, handle-first, graph-first, or mixed
  2. collect 3-5 seed hashtags or 5-10 jobs-to-be-done searches
  3. extract authors from matched videos before relying on account search
  4. expand around strong seed videos when recall is weak
  5. enrich a shortlisted set of profiles
  6. rank with both profile and video evidence
  7. summarize each dataset locally
  8. merge findings into hooks, formats, and content pillars
  1. 首先选择路由:内容优先、账号优先、图谱优先或混合模式
  2. 收集3-5个种子话题标签或5-10个目标搜索词
  3. 在依赖账号搜索前,先从匹配视频中提取作者信息
  4. 当召回率低时,围绕优质种子视频拓展
  5. 补充候选名单中的资料信息
  6. 结合资料和视频证据进行排名
  7. 本地汇总每个数据集
  8. 将发现结果整合成钩子、格式和内容支柱

Skill Handoff

技能交接

Escalate to
skills/40-creative/video-analysis
when:
  • the user wants hook or structure breakdowns
  • the user asks why specific videos work
  • the user wants shot-level or spoken-line analysis
  • the user wants to recreate or adapt benchmark videos
When the request is broad, ask one short guiding question before running:
  • "你是想先看 TikTok 上哪些方向值得研究,还是已经有几条视频想让我直接拆内容结构?"
Mention that this skill finds good samples first, and
video-analysis
can read the actual videos later.
Escalate to
skills/20-research/tiktok-ad-research
when:
  • the user wants Creative Center top ads
  • the user wants paid ad hooks, objectives, or ad brief inputs
  • the request is about ad-market scanning rather than organic creator or content behavior
当出现以下情况时,转至
skills/40-creative/video-analysis
  • 用户想要钩子或结构拆解
  • 用户询问特定视频成功的原因
  • 用户想要镜头级别或台词分析
  • 用户想要复刻或调整基准视频
当请求范围较广时,在运行前先问一个简短的引导问题:
  • "你是想先看 TikTok 上哪些方向值得研究,还是已经有几条视频想让我直接拆内容结构?"
说明本技能先找到优质样本,
video-analysis
可以后续分析实际视频内容。
当出现以下情况时,转至
skills/20-research/tiktok-ad-research
  • 用户想要创意中心热门广告
  • 用户想要付费广告钩子、目标或广告摘要输入
  • 请求是关于广告市场扫描,而非自然创作者或内容行为

Download Recovery Note

下载恢复说明

This skill is primarily for research, not guaranteed video asset persistence.
If a later workflow needs the actual benchmark videos and the earlier local files are gone:
  1. recover from saved local video paths if available
  2. otherwise download directly from the TikTok post URLs with
    yt-dlp
  3. store the recovered videos in a stable workspace folder
  4. hand those files to
    video-analysis
Do not assume collection dataset items will always contain reusable
mediaUrls
or
downloadAddr
fields.
本技能主要用于研究,不保证视频资产的持久存储。
如果后续工作流需要实际的基准视频且早期本地文件已丢失:
  1. 如果可用,从保存的本地视频路径恢复
  2. 否则使用
    yt-dlp
    直接从TikTok帖子URL下载
  3. 将恢复的视频存储在稳定的工作区文件夹中
  4. 将这些文件交给
    video-analysis
不要假设采集数据集条目始终包含可复用的
mediaUrls
downloadAddr
字段。

Good Output

优质输出

For each run, extract:
  • strongest opening lines
  • repeated framing patterns
  • recurring hashtags
  • recurring creators
  • bio-link or outbound-link signal on creator profiles
  • comments that reveal pain points or objections
  • source surface and source query so later analysis can distinguish search vs hashtag vs profile vs direct URL runs
  • region or location signal when the actor supports it
  • creator-discovery evidence:
    • which queries surfaced each creator
    • how many matched videos each creator contributed
    • whether the creator was found directly or through graph expansion
    • whether the profile has contactable public signals
  • visual format types:
    • screen demo
    • before/after
    • POV/relatable
    • listicle
    • talking head
每次运行应提取:
  • 最有效的开场白
  • 重复出现的框架模式
  • 高频话题标签
  • 高频创作者
  • 创作者资料中的 bio链接或外部链接信号
  • 揭示痛点或异议的评论
  • 来源渠道和来源查询,以便后续分析区分搜索、话题标签、资料或直接URL运行
  • 当工具支持时的区域或位置信号
  • 创作者发现证据:
    • 每个创作者是通过哪些查询找到的
    • 每个创作者贡献了多少匹配视频
    • 创作者是直接找到的还是通过图谱拓展找到的
    • 资料是否有可联系的公开信号
  • 视觉格式类型:
    • 屏幕演示
    • 前后对比
    • POV/共情类
    • 清单类
    • 访谈类