如何做 Twitter 竞品分析
Twitter 竞品分析,是在同一个时间窗口内对比 3 到 10 个对手账号的七项数据:粉丝增长、互动率、发帖频率、内容构成、声量占比、受众重合度,以及粉丝中的认证账号占比。
简短回答: 每周给每个对手拍一次快照,读取他们最近四周的帖子和提及,再比较变化:增长和互动率中位数会告诉你谁占上风。数据用 Sorsa API:GET /info-batch 每次请求返回 100 份对手资料,每 1,000 份 $0.014 起,100 次免费请求足够做第一次 10 个对手的对标。
- 接口
GET /info-batch- 每页条数
- 每次请求 100 份资料
- 价格
- 每 1,000 份 $0.014 起
#Twitter 竞品分析的七项指标
七个数字撑起了 X 上的竞品分析,而且每一个都来自任何公开账号都会显示的数据。想在动手搭建之前先并排看两个账号,可以用免费的推特账号对比工具,它在浏览器里列出两个账号的粉丝、浏览量和互动,并在每一项上标出领先者。
-
粉丝增长率。 现在的粉丝数减去一周前的粉丝数,再除以之前的数字:一个每周增长 2% 的 2 万粉丝账号,正在追赶一个原地不动的 20 万粉丝账号。
-
互动率。 一条帖子的点赞、转发、回复和引用之和,除以账号的粉丝数。比较中位数,因为一条爆款帖子会把平均值抬高好几周。
-
发帖频率。 每周发帖数,所有对手都按同样的四周来统计。
-
内容构成。 回复、引用,以及带图片或视频的帖子所占的比例。
-
声量占比。 一个品牌一周内被提及的次数,除以这组账号里所有品牌被提及次数的总和。
-
受众重合度。 对手的粉丝中也关注了你的人所占的比例,以两份列表中较小的一份为基准。
-
认证与虚假占比。 对手粉丝里认证账号的占比,以及空账号的占比:没有帖子、没有头像、关注数远多于粉丝数。
有些数字只有账号的所有者才能看到:随时间变化的曝光量、链接点击、资料页访问和粉丝画像。每条帖子的浏览量是公开的,所以对任何对手你也可以用浏览量去除互动数;Twitter 数据分析 API 指南讲了这两个公式,以及每条帖子都带有的六个计数。
单看一个粉丝数说明不了什么。同样的七个数字,每周对整组账号读一遍,就能看出谁在提速、哪些形式在你的领域里有效,以及对手的受众与你的重合在哪里。
#选 3 到 10 个对手和一个窗口
一组有用的账号包含 3 到 10 个,分成三个层级,再加上你自己的账号作为参照线。超过 10 个,每周的解读就变成噪音;少于 3 个,则没有基线。
- 直接对手把同样的东西卖给同样的买家。
- 间接对手争夺同样的注意力:一个媒体账号、一位创作者,或你的买家用来替代你的某个工具。
- 标杆账号处在你一年后想到达的位置,这样差距是量出来的,不是猜出来的。
有三个地方能帮你找到还不认识的对手。和你一起出现在同一批帖子里被提及的账号,通常就是竞争对手。通过 POST /search-users(在新标签页打开) 在用户简介里搜索你所在品类的关键词,可以列出其余的。而你的粉丝也在关注的账号,争夺的是同一个信息流;免费的推特受众重合度检测可以测量任意两个账号之间的重合。
为所有账号固定同一个窗口:最近 28 天,且每个账号都在同一天结束。在两周的窗口里碰上一次发布周,会被误读成对手的日常节奏;四周则能把它抹平。
#仪表盘工具还是 API:数字从哪里来
按席位收费的仪表盘,从你接入的那天起才开始计数,每个席位都要收费,还限制你能关注的对手数量。把 API 当作数据层,则可以回填对手的历史,按请求计费,对手数量不设上限,并返回 JSON,供你自己的表格、仪表盘或智能体使用。
| 关键点 | Sorsa API | 按席位收费的仪表盘 | 官方 X API |
|---|---|---|---|
| 历史 | 可搜索回溯到 2006 年;完整时间线,没有 3,200 条帖子的上限 | 从你注册那天起 | 时间线只到最新的 3,200 条帖子;归档搜索按帖子计费 |
| 对手数量 | 无上限 | 受套餐限制 | 无上限 |
| 价格 | 资料每 1,000 份 $0.014 起;帖子每 1,000 条 $0.07 起 | 每个席位每月收费 | 每 1,000 份资料 $10.00;每 1,000 条帖子 $5.00 |
| 接入 | 一个 API 密钥 | 每个席位一个登录账号 | 开发者账号、OAuth,每月最多 300 万次帖子读取 |
| 输出 | JSON,供你的表格、仪表盘和智能体使用 | 供应商自带的图表和导出 | JSON |
历史
- Sorsa API
- 可搜索回溯到 2006 年;完整时间线,没有 3,200 条帖子的上限
- 按席位收费的仪表盘
- 从你注册那天起
- 官方 X API
- 时间线只到最新的 3,200 条帖子;归档搜索按帖子计费
对手数量
- Sorsa API
- 无上限
- 按席位收费的仪表盘
- 受套餐限制
- 官方 X API
- 无上限
价格
- Sorsa API
- 资料每 1,000 份 $0.014 起;帖子每 1,000 条 $0.07 起
- 按席位收费的仪表盘
- 每个席位每月收费
- 官方 X API
- 每 1,000 份资料 $10.00;每 1,000 条帖子 $5.00
接入
- Sorsa API
- 一个 API 密钥
- 按席位收费的仪表盘
- 每个席位一个登录账号
- 官方 X API
- 开发者账号、OAuth,每月最多 300 万次帖子读取
输出
- Sorsa API
- JSON,供你的表格、仪表盘和智能体使用
- 按席位收费的仪表盘
- 供应商自带的图表和导出
- 官方 X API
- JSON
价格这一行,会随着你的账号组变大而增长。官方 X API 对返回的每条帖子和每份资料都计费,费率见其价格页(在新标签页打开),而一次 Sorsa API 请求最多可带 100 份资料或 20 条帖子。
#用 Sorsa API 分五步完成分析
要拉取竞品分析所需的数字,用 Sorsa API,一款 Twitter(X)API 与爬虫:一次请求最多返回 100 份对手资料,帖子每次请求 20 条,可回溯到 2006 年。所有套餐都是 20 次请求/秒,用同一个 API 密钥,不需要开发者账号,也不需要 OAuth。下面五步从头到尾搭起每周的运行流程;文档里的竞品分析工作流(在新标签页打开)则把同一项工作写成了一个脚本。
-
拿到密钥。 注册后,在控制台里复制你的 API 密钥。前 100 次请求免费,永不过期。
-
给整组账号拍快照。 把每个用户名发送给
GET /info-batch(在新标签页打开),每次最多 100 个,重复使用usernames参数。Terminal curl -G "https://api.sorsa.io/v3/info-batch" \ -H "ApiKey: YOUR_API_KEY" \ --data-urlencode "usernames=northwind_roastery" \ --data-urlencode "usernames=harbor_bean_supply" \ --data-urlencode "usernames=kestrel_coffee_lab"Response200 OK { "users": [ { "id": "1638204417762983936", "username": "northwind_roastery", "display_name": "Northwind Roastery", "description": "Small-batch coffee, roasted every Monday.", "bio_urls": ["https://example.com/subscribe"], "followers_count": 48210, "followings_count": 612, "tweets_count": 9314, "media_count": 2207, "verified": true, "pinned_tweet_ids": ["1851130250081816914"], "created_at": "2023-03-15T09:12:44Z" }, { "id": "1702553980148703232", "username": "harbor_bean_supply", "display_name": "Harbor Bean Supply", "description": "Green coffee for roasters. Ships worldwide.", "bio_urls": [], "followers_count": 31904, "followings_count": 1480, "tweets_count": 5120, "media_count": 860, "verified": false, "pinned_tweet_ids": [], "created_at": "2023-09-14T16:40:03Z" } ] } -
读取每个对手最近四周的帖子。 用
POST /user-tweets(在新标签页打开) 翻页,每次请求 20 条帖子,直到整整一页都早于窗口为止。每条帖子都带有点赞、转发、回复、引用、浏览量和书签数,所以这些指标不需要再发别的请求。import statistics from datetime import datetime, timedelta, timezone import requests BASE = "https://api.sorsa.io/v3" HEADERS = {"ApiKey": "YOUR_API_KEY"} WEEKS = 4 def posted(t): return datetime.fromisoformat(t["created_at"].replace("Z", "+00:00")) def recent_posts(handle): since = datetime.now(timezone.utc) - timedelta(weeks=WEEKS) body, posts = {"username": handle, "with_replies": True}, [] while True: r = requests.post(f"{BASE}/user-tweets", headers=HEADERS, json=body, timeout=30) r.raise_for_status() page = r.json() fresh = [t for t in page.get("tweets", []) if posted(t) >= since] posts += fresh if not fresh or not page.get("next_cursor"): return posts body["next_cursor"] = page["next_cursor"] def metrics(handle, followers): posts = recent_posts(handle) own = [t for t in posts if not t["is_reply"] and not t.get("retweeted_status")] rates = [100 * (t["likes_count"] + t["retweet_count"] + t["reply_count"] + t["quote_count"]) / followers for t in own] media = sum(any(e["type"] in ("photo", "video") for e in t.get("entities") or []) for t in own) replies = sum(t["is_reply"] for t in posts) return { "posts_wk": round(len(own) / WEEKS, 1), "median_er": round(statistics.median(rates), 3) if rates else 0, "reply_pct": round(100 * replies / len(posts), 1) if posts else 0, "media_pct": round(100 * media / len(own), 1) if own else 0, } -
统计每个品牌的声量占比。 在同一周内,对每个用户名调用
POST /mentions(在新标签页打开),每次请求 20 条提及,再把每个计数除以总数。如果某个品牌被提及几千次,而你只想要有人互动过的那些,就加上min_likes。Python def mentions(handle, since, until): body = {"query": handle, "since_date": since, "until_date": until} count = 0 while True: r = requests.post(f"{BASE}/mentions", headers=HEADERS, json=body, timeout=30) r.raise_for_status() page = r.json() count += len(page.get("tweets", [])) if not page.get("next_cursor"): return count body["next_cursor"] = page["next_cursor"] brands = ["northwind_roastery", "harbor_bean_supply", "kestrel_coffee_lab"] week = {b: mentions(b, "2026-10-26", "2026-11-02") for b in brands} total = sum(week.values()) or 1 sov = {b: round(100 * n / total, 1) for b, n in week.items()} -
为每个对手存一行,并与上周对比。 按每周的计划(cron、GitHub Actions 工作流,或任何任务调度器)把这些行追加到一个 CSV 文件里;增长就是本周粉丝数与上周粉丝数的差。
Python import csv from datetime import date from pathlib import Path PATH = "competitors.csv" FIELDS = ["week", "handle", "followers", "growth_pct", "posts_wk", "median_er", "reply_pct", "media_pct", "sov_pct"] def last_followers(): if not Path(PATH).exists(): return {} with open(PATH, newline="", encoding="utf-8") as f: return {r["handle"]: int(r["followers"]) for r in csv.DictReader(f)} profiles = requests.get(f"{BASE}/info-batch", headers=HEADERS, params={"usernames": brands}, timeout=30).json() last, rows = last_followers(), [] for u in profiles["users"]: h, f = u["username"], u["followers_count"] prev = last.get(h) or f rows.append({"week": date.today().isoformat(), "handle": h, "followers": f, "growth_pct": round(100 * (f - prev) / prev, 2), "sov_pct": sov.get(h, 0), **metrics(h, f)}) new_file = not Path(PATH).exists() with open(PATH, "a", newline="", encoding="utf-8") as f: out = csv.DictWriter(f, fieldnames=FIELDS) if new_file: out.writeheader() out.writerows(rows)三个接口就能填满整张表。增长来自两个每周行之间的差,所以第一周只是建立基线。
返回 403,说明密钥缺失或请求额度已用完;返回 429,说明 1 秒内发了超过 20 次请求,暂停一下再重试。失败的请求从不收费。
#一份自动填表的 Twitter 竞品分析模板
模板就是一张表,每个对手每周一行,每一列都对应 API 返回的一个字段。把表头行粘贴到 Google Sheets 或 Excel 里,也可以让第 5 步的脚本替你写出这个文件。
week,handle,followers,growth_pct,posts_wk,median_er,reply_pct,media_pct,sov_pct
每一列、它来自的字段以及公式如下:
| 列 | 来源 | 公式 |
|---|---|---|
followers | followers_count,GET /info-batch | 直接取返回值 |
growth_pct | 两个每周行 | (本周 − 上周) ÷ 上周 × 100 |
posts_wk | created_at,POST /user-tweets | 28 天内自己发的帖子数 ÷ 4 |
median_er | likes_count、retweet_count、reply_count、quote_count | 每条帖子 (总和 ÷ 粉丝数 × 100) 的中位数 |
reply_pct | is_reply | 回复数 ÷ 窗口内全部帖子数 × 100 |
media_pct | entities[].type 为 photo 或 video | 带媒体的帖子数 ÷ 自己发的帖子数 × 100 |
sov_pct | POST /mentions | 品牌被提及次数 ÷ 整组账号被提及次数 × 100 |
followers- 来源
followers_count,GET /info-batch- 公式
- 直接取返回值
growth_pct- 来源
- 两个每周行
- 公式
- (本周 − 上周) ÷ 上周 × 100
posts_wk- 来源
created_at,POST /user-tweets- 公式
- 28 天内自己发的帖子数 ÷ 4
median_er- 来源
likes_count、retweet_count、reply_count、quote_count- 公式
- 每条帖子 (总和 ÷ 粉丝数 × 100) 的中位数
reply_pct- 来源
is_reply- 公式
- 回复数 ÷ 窗口内全部帖子数 × 100
media_pct- 来源
entities[].type为photo或video- 公式
- 带媒体的帖子数 ÷ 自己发的帖子数 × 100
sov_pct- 来源
POST /mentions- 公式
- 品牌被提及次数 ÷ 整组账号被提及次数 × 100
分析做深之后可以继续加列:用 view_count 得到 views,按浏览量算互动;用 description 得到 bio,发现新的定位语;用下面受众审计得到的 verified_share。举个例子:如果在粉丝数相同的情况下,你的互动率中位数是 0.41%,而某个对手是 1.2%,那就先按互动量给对手的帖子排序,读完最靠前的十条,再决定要不要改什么。
#在你开始追踪之前,先回头看
对手的过去是可以搜索的:Sorsa API 能读取对手回溯到 2006 年的帖子,所以在你搭好的当天,对标就能用上去年的数据。仪表盘从你接入的那天才开始计数,而官方 X API 的用户时间线只返回最新的 3,200 条帖子,见 docs.x.com(在新标签页打开)。
想研究某个对手去年的节日季是怎么运营的,把 X 自己的搜索运算符发送给 POST /search-tweets(在新标签页打开):from: 指定账号,since: 和 until: 设定日期,每次请求返回约 20 条帖子及其计数。
curl -X POST "https://api.sorsa.io/v3/search-tweets" \
-H "ApiKey: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "from:northwind_roastery since:2025-11-01 until:2026-01-01",
"order": "latest"}'
把 from: 换成品牌名,同一个查询返回的就是那段时间里人们对这个对手说了什么,这样任何一个过去的月份,你都能测出它的声量占比。
#仪表盘很少展示的四个信号
在七项指标之外,还有四个公开信号,能在对手的数字上显现之前,就看出它在做什么。
赞助帖子。 Sorsa API 返回的每条帖子都带有 paid_partnership,也就是 X 在付费合作帖子上显示的标记。搜索提到某个对手的帖子,只保留带标记的:作者就是这个对手花钱合作的创作者。
body = {"query": "@northwind_roastery", "order": "latest"}
r = requests.post(f"{BASE}/search-tweets", headers=HEADERS, json=body)
paid = [t for t in r.json()["tweets"] if t.get("paid_partnership")]
print({t["user"]["username"] for t in paid})
他们的受众住在哪里。 GET /about(在新标签页打开) 返回 X 判定的账号所在国家。对一个对手的 1,000 个粉丝样本运行它,你就能看到他们触达了哪些市场;Twitter 所在地 API 指南讲了样本和完整列表的接近程度。
悄悄的策略动作。 简介里多了一句话、bio_urls 里多了一个新链接,或者换了一条新的置顶帖子,往往先于正式公告出现。在 /info-batch 快照里逐周对比这些内容,并且每月翻一次 GET /follows(在新标签页打开):对手新关注了哪些合作方、新员工或投资人,都是公开的。
受众质量。 GET /verified-followers(在新标签页打开) 只列出关注某个对手的认证账号,GET /followers(在新标签页打开) 每次请求返回 200 个粉丝,用于重合度和虚假粉丝检查。Twitter 粉丝 API 指南讲了翻页、按 ID 计算重合度,以及空账号的各种信号。
#追踪竞争对手每月要花多少钱
每周追踪 10 个对手,Sorsa API 的请求费用每月 $0.68 起(按 Pro 费率是 $0.97),而官方 X API 是 $143.77。这个例子假设每周为每个对手读取 100 条帖子和 100 条提及,并且每月为每个对手抽样 1,000 个粉丝;改掉这些数字,就能给你自己的账号组估价。
整个任务占用最小套餐月度请求量的 5%。
整套数据只需一次用户资料请求,帖子和提及每次请求 20 条,粉丝每次请求 200 位;官方 X API 每条帖子按 $0.005 计费,每份用户资料或每位粉丝按 $0.010 计费。
差距来自计费单位。官方 X API 对返回的每条帖子和每份资料都收费,还需要开发者账号和 OAuth。它在每月 300 万次帖子读取处封顶;再往上,就只剩 Enterprise 合同这一条路,每月约 $42,000 起。从 2026 年 11 月 22 日起,它还会把通过扩展(expansions)返回的对象按标准费率计费,见 X 在 10 月 23 日发布的通知(在新标签页打开)。如果你按 $0.010 把每条提及的作者也展开,上面的例子会涨到 $187.10。
追踪 X 上的竞争对手,选 Sorsa API:对手资料每 1,000 份 $0.014 起,官方 X API 则是 $10.00;粉丝每 1,000 个 $0.007 起,便宜 1,000 倍。通过 POST /tweet-info-bulk(在新标签页打开) 重新读取你已在追踪的帖子的计数,每次请求 100 条,每 1,000 条 $0.014 起,比 $5.00 便宜 250 倍。按 20 次请求/秒算,整个每周流程只需几秒钟。Sorsa API 是只读的,也从不要求你的 X 登录,所以你自己的账号不会有任何风险。
#多久运行一次,结果怎么用
快照每周跑一次,深度分析每季度做一次。每周的运行(资料、四周的帖子、提及)能在几天之内发现节奏或形式的变化。每季度的深度分析,则加上受众审计、历史搜索,并重新看一看哪些对手应该留在这组账号里。在对手发布新品期间,每天查看它的提及:Twitter 实时监测指南讲了如何用一次请求轮询整组账号。
一个发现,只有变成附带数字的测试才有用。把它写成一个假设和一项指标:
- 某对手的视频帖子能拿到其互动率中位数的 2.4 倍:四周内每周发两条视频,再比较你的中位数。
- 两个对手大多会在当天回复提及,而且增长更快:一个月内回复每一条提及,观察增长。
- 某对手的声量占比在一次创作者活动之后翻了一倍:查看它带有
paid_partnership的帖子,了解这些创作者和形式。
保留每周的 CSV:十二周的数据行,能说明是一次测试改变了你的曲线,还是整个领域一起在变。
#今天就对标你的第一批对手
Twitter 竞品分析,就是每周为 3 到 10 个对手读一遍七个数字。Sorsa API 用三个接口就能填满整张表:对手资料每 1,000 份 $0.014 起,帖子可回溯到 2006 年且没有 3,200 条的上限,粉丝每 1,000 个 $0.007 起,用同一个 API 密钥,20 次请求/秒。你的前 100 次请求免费,足够做第一次 10 个对手的对标。
#常见问题
做 Twitter 竞品分析,最好用什么工具?
对于每周都要跑的分析,用 Sorsa API:一次请求返回 100 份对手资料,每 1,000 份 $0.014 起,帖子可回溯到 2006 年,没有 3,200 条的上限。粉丝每 1,000 个 $0.007 起,所有套餐都是 20 次请求/秒,用同一个 API 密钥。如果只想不写代码快速看两个账号,Sorsa API 免费的推特账号对比工具可以直接在浏览器里使用。
我能看到对手在我开始追踪之前的历史吗?
可以。搜索能读到对手回溯到 2006 年的公开帖子:把 from:handle 加上 since: 和 until: 日期发送给 Sorsa API 的 POST /search-tweets,或者翻他们的时间线,那里没有 3,200 条的上限。粉丝数是个例外:X 没有公开保存粉丝数的历史,所以粉丝增长要从你的第一次每周快照开始算。
我应该多久追踪一次 Twitter 上的竞争对手?
核心数字每周一次,深度分析每季度一次。每周对资料、最近四周的帖子和提及拍一次快照,能在几天之内发现节奏和形式的变化。每个季度再加上受众审计和历史搜索,并复查哪些账号应该留在这组里。在对手发布新品期间,每天查看它的提及。
我能计算竞争对手之间的受众重合度吗?
可以。用 GET /followers 翻完两份粉丝列表,每次请求 200 个,再对账号 ID 取交集;把共同的数量除以较小的那份列表。对于大账号,各取最新的 1 万个粉丝作为样本就足够比较了。免费的推特受众重合度检测,可以在浏览器里对两个账号做同样的比较。
我能看到对手的曝光量或粉丝画像吗?
不能:随时间变化的曝光量、链接点击和粉丝画像,只有每个账号的所有者能看到。公开的这部分已经覆盖了大部分分析:每条帖子的浏览量、点赞、转发、回复、引用和书签数,以及粉丝数。X 还会为每个账号标注一个国家,Sorsa API 的 GET /about 可以为对手的一份粉丝样本返回它。
#我们如何核实
2026 年 11 月 2 日,我们把本指南里的每个接口、参数、每页条数和响应字段,与 Sorsa API 的在线参考文档(45 个接口)逐一对照;示例里的用户名、ID 和数字都是演示数据。官方 X API 的价格、300 万次帖子读取的上限和 3,200 条帖子的时间线限制,来自 docs.x.com;11 月 22 日起的扩展计费,来自 X 开发者论坛 2026 年 10 月 23 日的通知,这些都在同一天读取。每月成本是我们根据这些价格和每页条数算出来的。