从零搭一个抖音竞品监控和社媒监听 Agent(2026):一把 API 密钥

用一把 API 密钥搭抖音竞品监控和社媒监听:盯账号、看热搜榜、搜关键词,再交给模型写简报。公开只读。

Douyin monitor agent: accounts + keywords

抖音开放平台那个申请页,做不了竞品监控。对方不会给你的应用授权。旁边通常是一套现成的飞书告警,或者另一把只出数据、不带模型服务的 MCP 密钥。SandBase 上已有两篇相邻教程,都不是这个双环。

这里的抖音竞品监控 Agent,是同一把 SANDBASE_API_KEY 上的两个环。环 A 盯点名账号。环 B 读热搜榜,再用关键词搜视频,让模型分出品牌。只做公开只读。结构化 JSON、爬虫、官方 OAuth 怎么选,先看 给 AI Agent 选社交数据接口。选完再搭。

先说结论

  • 账号用每日快照。热搜和关键词用少量轮询。两个环可以一起跑。两个环都按 15 分钟打,共享的免费额度午饭前就会见底。
  • 2026-11-08,抖音数据接口 hub 页眉是 319 of 319。最小集合是主页、第一页作品、热搜榜、关键词搜视频。批量播放统计是另一档价格。
  • 编码工具里走 Skill 或 MCP。REST 是 POST /v1/api/<vendor>/<path>,业务数据在 outputs[0].data。七月那篇竞品监控是账号环的长代码,这里不再贴一遍。
  • 这不是抖音官方合作,不能发帖、发私信,也读不到账号主人的后台。你不想自己管轮询时,推送产品或飞书 SaaS 仍然更合适。

SandBase 抖音数据接口页,页眉是 319 of 319 个端点 SandBase 抖音数据接口页:319 个公开主页、作品、热搜与搜索相关端点。

你在搭的是两个环

环 A 问这些账号从昨天到现在发了什么。环 B 问品牌或品类有没有出现在你没盯着的地方。两边都是只读。输出是 Markdown 简报、webhook,或两样都要。

环 A,竞品账号环 B,社媒监听
问题这些账号变了什么品牌或品类露出来没有
你要留着的输入一组 sec_user_id品牌词、品类词,外加热搜榜
和免费额度合得来的节奏每天一次一天几次,而不是每 15 分钟
数据接口主页,再加作品第一页。新视频才考虑播放统计热搜榜,再加关键词搜视频
模型服务把快照 diff 收成日报把品牌、品类、忽略分开,再决定要不要告警

名单本身就是产品时,只跑 A。还没有账号 id、只关心话题时,只跑 B。早报既要「他们发了」也要「榜在动」时,两个一起跑。热搜榜上没有你的词,不代表账号拉取失败。

环 A:竞品账号监控

把每个竞品收成 sec_user_id。拉主页,再拉作品第一页,和昨天的快照做 diff。只对新增视频 id 考虑播放统计,然后把差额交给模型。

带快照的 cron 在 搭建抖音竞品监控 Agent。那是账号环的深代码,这篇不重贴。编码 Agent 里,这两次调用就是 discover、inspect、再小跑一次。安装在 Skill / MCP 指南。

SandBase 的 user-post-videos 参考页,显示 POST、0.001 美元和必填 sec_user_id douyin/app-v3/user-post-videos:POST、sec_user_id、单价 $0.001,符合条件的每日前 100 次调用免费(按组织共享)。

环 B:品牌词和热搜监听

douyin/app-v3/hot-search-list 传 {} 就是主榜。可选的 board_type、board_sub_type 换其他榜,参考页要求 board_type 按字符串传。品牌词和品类词走 douyin/search/video-search-v2。先用关键词自己滤,再让模型标品牌、品类或忽略。前两档才告警。

SandBase 的 hot-search-list 参考页,显示 POST、0.001 美元,且没有必填参数 douyin/app-v3/hot-search-list:空 body 默认主热搜榜,单价 $0.001,同样有每日免费额度说明。

douyin/app-v3/brand-hot-search-list 不是这次搜索。2026-11-08 它不需要入参,描述的是品牌热搜分类。分类 id 怎么传给详情,先打开详情页。这篇没有调用详情。

这也不是 微博 + 抖音社媒监听 的抖音一半。那篇配的是微博热搜和 douyin/billboard/hot-account-list,一份创作者名单。热搜榜是话题名单。要正在涨的人,去看榜单教程。要词,用这个环。

douyin/search/general-search-v2 是混合卡片。当天参考页把视频和图文都放在 business_data[],0.01 美元,并写了免费额度。不带版本号的 douyin/search/general-search 返回 HTTP 404。用带版本的 id。

前提和边界

REST 用 SandBase 的 API 密钥。编码 Agent 走 Skill 时,是浏览器登录,密钥不要贴进对话。这一行不是终端命令:

Text
set up https://www.sandbase.ai/SKILL.md

2026-11-08 的 SKILL.md 写着:检索目录、看 schema 和价格不扣余额,只有 run 才扣,而且不要默认每个接口都在每日免费额度里。客户端安装留在 Skill 指南。在 AI 工具里使用 是同一个入口。

当天 定价页:符合条件的数据接口,每个组织每天共享 100 次,00:00 UTC 重置。搜目录、读 schema 和价格是 0 美元。失败的模型调用或数据调用不收费。Build 按次付费,没有订阅。代码沙箱当时免费,可能有公平使用上限,改价会事先说。模型服务不占这 100 次。Start 是 0 美元加起步额度,这篇不编这笔额度是多少。首页 是同一个余额。SandBase 不拥有抖音。

这个 Agent抖音开放平台
能读谁公开主页、公开作品、公开榜给你的应用授过权的账号
凭证一把 API 密钥,或 Skill 的浏览器登录审核过的应用,再加上用户 token
动作没有看应用拿到的权限,包括发帖和消息
什么时候用竞品公开监控、话题监听你自己的账号,或登录了你应用的用户

不要为了这个双环,重画社交数据指南里 JSON、爬虫、OAuth 那张表。Hub 上的 Cookie、游客会话、注册设备,以及「打开 App 去发私信」,都不是默认监控路径。

把竞品收成 id

主页 URL 里常常已经有 id。复制以 MS4wLjABAAAA 开头的路径段。不要把昵称、数字 uid 或视频 id 塞进 douyin/app-v3/user-profile。当天的 FAQ 写明,这些是不同的入参。

只有名字时,用 douyin/search/user-search-v2。可选 keyword 和 cursor(第一页 0),0.001 美元,页面上有免费额度那句话。字段表把 data.user_list[].user_id 描述成以 MS4w 开头的长字符串。同一个 nick_name 可以对应很多账号,对上昵称再留 user_id。data.has_more 为真时,用返回的 data.cursor 翻页。这是参考页的规则,这篇没有重跑搜索。更长的说明在 抖音用户搜索。douyin/creator/user-search 返回的是数字风格 user_id 和 short_id,不是 MS4w 字符串,替不了 v2。

douyin/web/sec-user-id 必填 url,0.001 美元,有免费额度那句话。公开样例传的是视频 URL,返回把这条 URL 原样吐了回来。备注写的是:要 sec_user_id 就传主页。douyin/web/all-sec-user-id 批量处理主页(必填 body 数组,同样的价格和额度句)。douyin/web/encrypt-uid-to-sec-user-id 把参考页称为 short_id 的 uid 转过去。路径里看得见的那段优先。短链或路径里没有 id 时,再花一次解析。

在 SandBase 上跑最小双环

目录页展示的是 GET 列表。真正调用走 Model API:

POST https://api.sandbase.ai/v1/api/<vendor>/<path>

请求体只放这个接口自己的参数。完成态的业务数据在 outputs[0].data。status 不是 completed,或者这个字段缺失,这一轮就失败。run id 不是数据。下面的辅助函数是文档里的信封。这篇没有执行它。写作环境里没有 API 密钥,也没有去要。

Python
import os
import requests

def call_api(model: str, params: dict) -> dict:
    response = requests.post(
        f"https://api.sandbase.ai/v1/api/{model}",
        headers={
            "Authorization": f"Bearer {os.environ['SANDBASE_API_KEY']}",
            "Content-Type": "application/json",
        },
        json=params,
        timeout=90,
    )
    response.raise_for_status()
    body = response.json()
    outputs = body.get("outputs") or []
    if body.get("status") != "completed" or not outputs or outputs[0].get("data") is None:
        raise RuntimeError(
            f"SandBase call did not complete: {body.get('status')} {body.get('error')}"
        )
    return outputs[0]["data"]

路径 1:Skill 或 MCP

把 Skill 那一行贴进 Claude Code、Cursor 或 Codex,完成浏览器登录,新开一轮会话,等工具加载。然后要一个有边界的周期,而不是一份 200 行的 Agent:

Text
Discover a Douyin user profile tool and a Douyin hot search tool.
Inspect each one and read the price and whether it shares the daily free data allowance.
Do not run anything until I confirm.
Then run one profile for this sec_user_id and one hot-search list with an empty body.
Summarize what changed. Do not invent fields that were not in the output.

sandbase_discover 和 sandbase_inspect 不扣费。sandbase_run 才扣。这篇点过名的接口,跑之前也要 inspect 一次。参考页和后来的 inspect 可能不一致。客户端 id、connect、原始 MCP 地址,都在 Skill 指南里。这篇不重复。

路径 2:REST

下面这些 id 在 2026-11-08 是通的。价格是当天参考页 Facts 里的标价。放量之前再打开一次页面。

环接口和参考页一致的请求体标价该页有没有免费额度那句话
Adouyin/app-v3/user-profile必填 sec_user_id0.001 美元有,每个组织每个 UTC 日共享 100 次
Adouyin/app-v3/user-post-videos必填 sec_user_id。可选 count(不要超过 20)、max_cursor(第一页 0)、sort_type(0 最新,1 最热)0.001 美元有
A,可选douyin/app-v3/multi-video-statistics必填 aweme_ids,逗号分隔,不超过 50 个0.025 美元没有。FAQ 写的是从余额扣
Bdouyin/app-v3/hot-search-list主榜传 {}。可选 board_type、board_sub_type0.001 美元有
Bdouyin/search/video-search-v2keyword,cursor(第一页 0)。其他筛选可选0.01 美元有
解析 iddouyin/search/user-search-v2keyword,cursor0.001 美元有

目录地图在 SandBase 上的抖音公开数据。单个创作者的视频字段在 抖音创作者视频研究。正在涨的账号在 抖音榜单监控。

下面这一轮这篇没有执行。count: 5 是作品参考页的教学示例,不是上限。把 data 原样存下,id 的 diff 自己写。七月那篇已有 2026-10-01 跑通的快照布局。

Python
# 这篇没有执行。对着真实名单跑之前,先 inspect 价格和 free_quota。
profile = call_api("douyin/app-v3/user-profile", {"sec_user_id": sec_user_id})
posts = call_api(
    "douyin/app-v3/user-post-videos",
    {"sec_user_id": sec_user_id, "max_cursor": 0, "count": 5, "sort_type": 0},
)
hot = call_api("douyin/app-v3/hot-search-list", {})
videos = call_api("douyin/search/video-search-v2", {"keyword": keyword, "cursor": 0})

新增 id 才传给 multi-video-statistics,拼成一个逗号分隔的字符串,而且你得接受 0.025 美元、参考页没有免费额度那句话。七月那篇见过作品列表播放数为 0、统计接口补上播放数,那是 2026-10-01 的一个窗口。你对比过两份返回之前,缺失的计数是未知,不是 0。

模型用同一把密钥,基址 https://api.sandbase.ai/v1,模型要先 inspect。它应引用返回里的 id,差额为空就写「无变化」。写得很顺、但没有 id,这一轮算失败。

路径 3:代码沙箱,或你已经在用的时钟

要去重或在对话外追加 JSONL 时,同一把密钥可以开代码沙箱。定价页 写着当时免费。沙箱页 是每次运行一个兼容 E2B 的工作区。SDK 怎么接,在 一把 Key 的技术栈 和 E2B 替代。沙箱不代替抖音调用。

定价 FAQ 说 Agent 建好后可以测试、发布成 API,或设定时。这次打开的 Agents 页 是托管会话,不是这篇点过的 cron 表单。你自己用过那个定时之前,时钟仍按七月那篇:cron 或 GitHub Actions。托管会话和 OpenAI 沙箱的比较在 OpenAI Agents API 兼容路径。

费用怎么估

这是用公开额度做的算术,不是这篇跑出来的账单。100 次免费由组织里所有符合条件的数据接口共享,不是给抖音单独留的。

八个账号每天一次,主页加一页作品,是 16 次。参考页仍在额度里的话,就是 100 次里的 16 次。新增 id 打一包统计,从第一次起 0.025 美元,因为那页没写额度。六次热搜加八次关键词搜索,再占 14 次。额度用完后,每次关键词按标价 0.01 美元,是主页的十倍。这一组大约 30 或 31 次,前提是组织里别的任务很安静。

微博加抖音那篇按 15 分钟轮询,并且写明了。同样节奏打在抖音热搜上,光榜就是 96 次。这是选择,不是共享 100 次上的好默认。关键词也按这个钟打,会先吃掉额度,之后每次 0.01 美元。

模型简报另算,每个周期一次短补全,价格在模型卡上。这篇不报每日 token 美元数。失败不收费。再查 free_quota 的 inspect 仍是 0 美元。

星图和其它 kol-* 路由,这次没有重新核价。七月笔记里「有的不在免费额度里」只是线索,不是现在的报价。加上去之前先 inspect。

SandBase、成品监控,和抖音 MCP

同一份早报,卖的形状不一样。

环归谁模型和数据是不是一把密钥你买到的是什么
SandBase归你。diff、分类和时钟都自己写是。数据、简报、可选的代码沙箱共用一个余额目录加一把密钥。抖音 hub 就是那一层
MediaClaw 抖音监控不归你。你设规则不是这个产品2026-11-08 该页写着:跟踪竞品发布和互动变化,再把 AI 摘要推到 Lark
DataXAPI 竞品监控一半。页面写明「什么是新的」仍要你自己算他们的余额,不是 SandBase 的覆盖 17 个平台的 Skill。示例是 2 次调用,最多 0.0040 美元,一个账号一次。失败不收费
TikHub MCPAgent 仍要你写他们的密钥页面写 990+ 工具、16 个平台。抖音 API 是抖音这一面,包括榜单和星图
Qovia 抖音 MCPAgent 仍要你写他们的密钥14 个在线端点,含搜索和热搜榜,给 Claude Code、Cursor、VS Code。新账号 50 次试用
Wellbyte你订阅变更他们的密钥,页面也提供 MCP实时推送到 Kafka、Webhook 或 S3,按成功投递计费。当天首页数字是 38 个平台、895 个端点,抖音 212

边界

公开数据,尽力而为。参考页保证的是信封。某一次返回里没有的字段是未知。热搜参考页提醒,有的榜条热度是 0,而且没有名次。没核对过的 0,不要拿去告警。

第一次没有快照,每条视频都像新的。先写下快照,第二次再发简报。成功调用再打一遍要再付费。守各平台条款。不要存 Cookie,也不要把登录设备当成监控器。319 of 319 是 2026-11-08 的页眉,以后会变。

常见问题

怎么搭一个抖音竞品监控 Agent?

用公开只读的抖音数据,加一把厂商密钥。OAuth 打不开一个不会授权你的竞品。解析 sec_user_id,拉主页,拉作品第一页,和昨天 diff,需要时再给新视频打播放统计。在 SandBase 上,这把密钥也是模型服务的密钥。discover 和 inspect 免费。完整 cron 在七月教程,安装在 Skill 指南。2026-11-08,主页和作品是 0.001 美元并写了免费额度。douyin/app-v3/multi-video-statistics 是 0.025 美元,没有那句话。

怎么加上抖音社媒监听,而不只是盯账号?

再加一个不看名单的环。douyin/app-v3/hot-search-list 传 {},品牌词和品类词走 douyin/search/video-search-v2。先过滤,再分类。微博加抖音那篇的抖音源是热账号榜,不是这个话题榜。当天热搜 0.001 美元、视频搜索 0.01 美元,两页都写了免费额度。仍是尽力而为的公开数据,不是官方合作。

什么时候用 SandBase,什么时候用 MediaClaw、TikHub、Qovia 或官方接口?

环留在自己仓库、模型共用一把密钥、而且接受轮询,用 SandBase。要 Lark 摘要,用 MediaClaw。要 DataXAPI 拉账号、差额自己算,用他们的 Skill。仓库已经统一在 TikHub 或 Qovia,就继续。推送比闹钟合适,用 Wellbyte。要发帖、发消息,或读账号主人授权的数据,用抖音开放平台。

接下来

打开 抖音 hub,inspect 一个接口。额度仍符合预期时,再跑一条主页或一次空 body 的热搜。接入方式见 社交数据接口指南,长代码见 七月竞品监控,跨平台见 微博和抖音 Agent,目录见 抖音 hub 文章,安装见 Skill 指南,同一把密钥和代码沙箱见 一把 Key 的技术栈。