TwexAPI で X 上の Crypto インフルエンサーを見つける方法
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} を使い、crypto 関連の profile metadata に一致する X アカウントを見つけます。
用途は次のようなものです。
- crypto、DeFi、NFT、Web3 campaign 用の KOL shortlist を作る。
- analyst、trader、ニュースレター運営者を監視対象として見つける。
- コミュニティ調査や launch tracking の seed list を作る。
- CRM や watchlist に入れる前に crypto アカウントを比較する。
このエンドポイントは候補 profile を返します。投資主張の検証、オーディエンスの真正性確認、コンプライアンスレビューを置き換えるものではありません。出力は research queue として扱います。
Endpoint
GET リクエストを送ります。
https://api.twexapi.io/twitter/search-user/{keyword}/{target_count}| Path parameter | Type | Purpose |
|---|---|---|
keyword | string | crypto analyst、DeFi founder、Bitcoin trader のような検索語句。 |
target_count | integer | 返すユーザー数。最初は 25 または 50 で query を調整します。 |
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 |
候補アカウントごとに、どの keyword で見つかったかを保存します。DeFi founder で見つかった候補と meme coin で見つかった候補は、レビュー基準が異なることが多いです。
Python Client
スペースを含む語句は URL encode します。リクエストコードと ranking logic を分けると、後でテストしやすくなります。
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 のワークフローでは、不確実性を見える形にすることが重要です。見つかった keyword、スコアに使う profile fields、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 return {
33 "keyword": keyword,
34 "user_id": user.get("id"),
35 "screen_name": user.get("screen_name"),
36 "name": user.get("name"),
37 "description": description,
38 "location": user.get("location"),
39 "followers_count": user.get("followers_count") or 0,
40 "listed_count": user.get("listed_count") or 0,
41 "is_verified": user.get("is_verified") is True,
42 "is_blue_verified": user.get("is_blue_verified") is True,
43 "verified_type": user.get("verified_type"),
44 "can_dm": user.get("can_dm"),
45 "crypto_profile_match": contains_any(description, CRYPTO_TERMS),
46 "risk_term_match": contains_any(description, RISK_TERMS),
47 "profile_url": f"https://x.com/{user.get('screen_name')}",
48 "raw": user,
49 }保守的にスコアリングする
Crypto campaign の review queue は、通常の creator discovery より慎重に扱います。明らかなリスク語句は減点し、不確かな profile は 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")アウトリーチ前のレビュー規則
Crypto influencer list は、そのまま送信キューに入れない方が安全です。
- profile が campaign topic に合っているか確認する。
- 最近の投稿に scam、未開示プロモーション、オーディエンス不一致がないか見る。
- token、protocol、market の話し方が自社の compliance rule に合うか確認する。
- 連絡手段を確認する。
can_dmは signal であり、配信保証ではありません。 - 承認、却下、保留の理由を記録する。
Crypto では no decision yet を正式な状態として扱うと、無理に approve/reject へ押し込まずに済みます。
他の TwexAPI エンドポイントとの組み合わせ
| Step | Endpoint type | 目的 |
|---|---|---|
| 候補発見 | Search User | profile keyword でアカウントを見つける。 |
| 最近の投稿レビュー | User timeline または Advanced Search | 実際に何を投稿しているか確認する。 |
| 市場会話の文脈 | Cashtag Search | $BTC、$ETH、project ticker まわりの投稿を見る。 |
| オーディエンス確認 | Followers / following endpoints | ターゲットコミュニティとの overlap を見る。 |
| 監視 | Influencer monitoring workflow | 承認済みアカウントを watchlist に入れる。 |
Discovery、validation、monitoring は別の問いなので、分けて扱う方が運用しやすいです。
よくある落とし穴
- crypto keyword match を信頼性や推薦とみなさない。
- フォロワー数を audience quality の代わりにしない。
can_dm: trueの全アカウントに自動 DM しない。screen_nameではなくidで重複排除する。- どの keyword で見つかったかを保存する。
- profile metadata は変わるため、raw profile と fetch timestamp を保存する。
- promotional または high-risk な bio は追加レビューに回す。
まとめ
TwexAPI の Search User エンドポイントを使うと、crypto keyword を構造化された KOL discovery workflow に変えられます。具体的な語句で検索し、profile を正規化し、保守的にスコアリングし、リスクや不確実性のあるアカウントは manual review に残します。
これにより、ノイズを減らしながら、profile metadata を最終判断と誤解しない運用ができます。