如何用 TwexAPI 在 X 上寻找 Crypto Influencer
Crypto 在 X 上的信息噪声很高。同一个关键词可能搜出 trader、founder、protocol 官方号、NFT 社区、meme account、可疑账号、分析师、记者和 bot。手动搜索可以临时找几个 handle,但很难形成可解释的 shortlist。
TwexAPI 的 Search User endpoint 可以先给你结构化候选池。搜索 crypto analyst、DeFi founder、Bitcoin trader 这类关键词,再根据 bio fit、followers、认证字段、listed_count 等字段做初筛。
这个工作流做什么
这个工作流使用 GET /twitter/search-user/{keyword}/{target_count},发现 profile metadata 匹配 crypto 关键词的 X 账号。
适合这些场景:
- 为 crypto、DeFi、NFT 或 Web3 campaign 建立 KOL shortlist。
- 找 analyst、trader、newsletter 作者做监控。
- 为社区研究或 launch tracking 创建 seed list。
- 把账号移入 CRM 或 watchlist 前做初筛。
这个端点返回候选 profile。它不能验证投资观点,也不能确认受众真实性,更不能替代合规 review。请把输出当成 research queue。
Endpoint
发送 GET 请求:
https://api.twexapi.io/twitter/search-user/{keyword}/{target_count}| Path 参数 | 类型 | 用途 |
|---|---|---|
keyword | string | 搜索短语,例如 crypto analyst、DeFi founder、Bitcoin trader。 |
target_count | integer | 返回用户数量。调 query 时建议先用 25 或 50。 |
curl --request GET \
--url 'https://api.twexapi.io/twitter/search-user/crypto%20analyst/50' \
--header 'Authorization: Bearer <token>'成功响应包含 code、msg、data。常用字段包括 id、name、screen_name、description、description_urls、urls、location、followers_count、following_count、listed_count、statuses_count、is_blue_verified、is_verified、verified_type、can_dm、profile_image_url、profile_banner_url、created_at 和 created_at_datetime。
1{
2 "code": 200,
3 "msg": "success",
4 "data": [
5 {
6 "id": "1717001045992251392",
7 "name": "Example Crypto Analyst",
8 "screen_name": "example_crypto",
9 "description": "Crypto markets, DeFi research, BTC and ETH commentary",
10 "followers_count": 88000,
11 "listed_count": 740,
12 "is_verified": true,
13 "is_blue_verified": true,
14 "verified_type": "blue",
15 "can_dm": true
16 }
17 ]
18}选择更好的 crypto 关键词
关键词决定候选池质量。搜索意图比搜索量更重要。
| 目标 | 示例关键词 |
|---|---|
| 市场评论账号 | crypto analyst, Bitcoin trader, ETH analyst, onchain analyst |
| Protocol 生态 | DeFi founder, Web3 founder, crypto protocol, L2 ecosystem |
| 社区和内容 | crypto newsletter, crypto creator, NFT community, Web3 marketing |
| 投资和研究 | crypto VC, token analyst, DeFi research, macro crypto |
| 区域 campaign | Singapore crypto, Korea crypto, Japan Web3, Dubai crypto |
建议保留每个候选账号的来源关键词。通过 DeFi founder 找到的人,和通过 meme coin 找到的人,review 标准通常不一样。
Python Client
带空格的短语要 URL encode。请求代码和 ranking 逻辑分开写,后面更容易测试。
1import os
2from typing import Any
3from urllib.parse import quote
4
5import requests
6
7TOKEN = os.environ["TWEXAPI_BEARER_TOKEN"]
8BASE_URL = "https://api.twexapi.io/twitter/search-user"
9
10def search_users(keyword: str, *, target_count: int = 50) -> list[dict[str, Any]]:
11 encoded_keyword = quote(keyword)
12 url = f"{BASE_URL}/{encoded_keyword}/{target_count}"
13
14 response = requests.get(
15 url,
16 headers={"Authorization": f"Bearer {TOKEN}"},
17 timeout=30,
18 )
19 response.raise_for_status()
20 return response.json().get("data", [])
21
22if __name__ == "__main__":
23 users = search_users("crypto analyst", target_count=25)
24 for user in users[:10]:
25 print(
26 user.get("screen_name"),
27 user.get("followers_count"),
28 user.get("description"),
29 )整理 KOL review sheet
Crypto KOL 流程要把不确定性显式写出来。保存发现账号的关键词、用于打分的 profile 字段,以及 raw API response。
1from typing import Any
2
3CRYPTO_TERMS = [
4 "crypto",
5 "bitcoin",
6 "btc",
7 "ethereum",
8 "eth",
9 "defi",
10 "web3",
11 "nft",
12 "onchain",
13 "token",
14 "dao",
15 "solana",
16]
17
18RISK_TERMS = [
19 "signals",
20 "guaranteed",
21 "100x",
22 "pump",
23 "airdrop farming",
24]
25
26def contains_any(text: str, terms: list[str]) -> bool:
27 lowered = text.lower()
28 return any(term in lowered for term in terms)
29
30def to_kol_row(user: dict[str, Any], keyword: str) -> dict[str, Any]:
31 description = user.get("description") or ""
32
33 return {
34 "keyword": keyword,
35 "user_id": user.get("id"),
36 "screen_name": user.get("screen_name"),
37 "name": user.get("name"),
38 "description": description,
39 "location": user.get("location"),
40 "followers_count": user.get("followers_count") or 0,
41 "listed_count": user.get("listed_count") or 0,
42 "is_verified": user.get("is_verified") is True,
43 "is_blue_verified": user.get("is_blue_verified") is True,
44 "verified_type": user.get("verified_type"),
45 "can_dm": user.get("can_dm"),
46 "crypto_profile_match": contains_any(description, CRYPTO_TERMS),
47 "risk_term_match": contains_any(description, RISK_TERMS),
48 "profile_url": f"https://x.com/{user.get('screen_name')}",
49 "raw": user,
50 }保守打分
Crypto campaign 的 review queue 要比普通 creator discovery 更谨慎。明显高风险词要扣分,不确定账号先进入 manual review。
1import math
2
3def kol_score(row: dict[str, Any]) -> float:
4 score = 0.0
5
6 if row["crypto_profile_match"]:
7 score += 35
8 if row["is_verified"]:
9 score += 8
10 if row["is_blue_verified"]:
11 score += 4
12 if row["verified_type"] == "business":
13 score += 8
14 if row["risk_term_match"]:
15 score -= 20
16
17 followers = row["followers_count"] or 0
18 listed = row["listed_count"] or 0
19 score += min(math.log10(followers + 1) * 10, 45)
20 score += min(math.log10(listed + 1) * 7, 24)
21
22 return round(score, 2)
23
24keywords = [
25 "crypto analyst",
26 "DeFi founder",
27 "Bitcoin trader",
28 "onchain analyst",
29 "Web3 founder",
30]
31
32candidates = []
33seen_user_ids = set()
34
35for keyword in keywords:
36 for user in search_users(keyword, target_count=50):
37 user_id = user.get("id")
38 if not user_id or user_id in seen_user_ids:
39 continue
40 seen_user_ids.add(user_id)
41
42 row = to_kol_row(user, keyword)
43 row["score"] = kol_score(row)
44 row["review_status"] = "manual_review" if row["risk_term_match"] else "candidate"
45 candidates.append(row)
46
47candidates.sort(key=lambda row: row["score"], reverse=True)这个分数只决定复核顺序,不决定是否通过付费推广、token communication 或投资者沟通。
导出 shortlist
CSV 给 review team 看,JSONL 保留 raw profile。risk_term_match 要放在表里,方便 reviewer 知道为什么需要额外谨慎。
1import csv
2import json
3from datetime import datetime, timezone
4from pathlib import Path
5
6timestamp = datetime.now(timezone.utc).isoformat()
7csv_path = Path("crypto-kol-candidates.csv")
8jsonl_path = Path("crypto-kol-candidates.raw.jsonl")
9
10fieldnames = [
11 "score",
12 "review_status",
13 "keyword",
14 "screen_name",
15 "name",
16 "description",
17 "location",
18 "followers_count",
19 "listed_count",
20 "is_verified",
21 "is_blue_verified",
22 "verified_type",
23 "can_dm",
24 "crypto_profile_match",
25 "risk_term_match",
26 "profile_url",
27]
28
29with csv_path.open("w", newline="", encoding="utf-8") as f:
30 writer = csv.DictWriter(f, fieldnames=fieldnames)
31 writer.writeheader()
32 for row in candidates:
33 writer.writerow({field: row.get(field) for field in fieldnames})
34
35with jsonl_path.open("w", encoding="utf-8") as f:
36 for row in candidates:
37 f.write(json.dumps({
38 "fetched_at": timestamp,
39 "candidate": row,
40 }, ensure_ascii=False) + "\n")
41
42print(f"Saved {len(candidates)} crypto KOL candidates")外联前加 review 规则
Crypto influencer list 不应该直接进入发送队列。建议先做这些检查:
- 确认 profile 和 campaign topic 相关。
- 检查近期帖子是否有诈骗、未披露推广或受众不匹配。
- 确认账号讨论 token、protocol 或 market 的方式符合你的合规边界。
- 确认联系路径。
can_dm是信号,不是送达保证。 - 记录通过、拒绝或暂缓的原因。
对 crypto 来说,no decision yet 应该是一个正式状态,不要强迫每个账号都变成 approve 或 reject。
和其他 TwexAPI 端点组合
| 步骤 | 端点类型 | 作用 |
|---|---|---|
| 候选发现 | Search User | 按 profile keyword 找账号。 |
| 近期内容复核 | User timeline 或 Advanced Search | 看账号实际发什么。 |
| 市场讨论上下文 | Cashtag Search | 看 $BTC、$ETH 或项目 ticker 相关帖子。 |
| 受众映射 | Followers / following endpoints | 比较和目标社区的重叠。 |
| 监控 | Influencer monitoring workflow | 已通过账号进入 watchlist 后监控。 |
Discovery、validation 和 monitoring 是不同问题,最好分开处理。
常见坑
- 不要把 crypto keyword match 当成背书或可信度。
- 不要用粉丝数替代 audience quality。
- 不要自动私信所有
can_dm: true的账号。 - 用
id去重,不要只用screen_name。 - 保存发现账号的关键词,方便 reviewer 理解上下文。
- 保存 raw profile 和 fetch timestamp,因为 metadata 会变化。
- bio 里有高风险推广语言的账号要额外复核。
小结
TwexAPI 的 Search User 端点可以把 crypto 关键词转成结构化 KOL discovery workflow。用具体短语搜索,整理 profile,保守打分,把风险或不确定账号留给人工 review。
这样可以减少噪声,同时避免把 profile metadata 当成最终判断。