著者:Sorsa Editorial

2026年7月6日更新:100回分の無料リクエストの開始枠を追加し、料金を1,000件あたりのバッチレートで捉え直し、公式 X API のコスト比較を2026年4月のリソース単位の料金に刷新し、6つのエンドポイント手法すべてを稼働中の API に対して再確認しました。

要点: X(Twitter)で対象オーディエンスを規模で見つけるとは、スクロールする代わりにユーザーリストをプログラムで取得することです。6つの API 手法がそれをカバーします。キーワードでのプロフィール文、ライブのツイートの意図、競合のフォロワー、コミュニティのメンバー、認証済みフォロワー、そして投稿の増幅者です。それぞれが完全な公開プロフィールを返し、それを自分で重複排除し、フィルターし、エクスポートします。

ボトルネックはめったに戦略ではありません。データへのアクセスです。X(旧Twitter)は、リストが読み込みを止める前に UI でひと握りのフォロワーを見せ、公式 X API は今やリソース単位で課金します。読むすべてのフォロワープロフィールが$0.010かかるため、1回の10,000フォロワーの取得は、誰かをフィルターする前におよそ$100になります。代替の Twitter/X API プロバイダーである Sorsa API は、その両方の壁を取り除きます。その /followers エンドポイントは、フラットなリクエスト単位の価格で、リクエストあたり最大200件の完全なプロフィールを返すため、同じ10,000フォロワーは Proプランでおよそ10セントかかり、OAuth のハンドシェイクと審査待ちの行列ではなく単一の ApiKey ヘッダーで認証します。以下のすべての手法は1つのエンドポイントを使い、どのプランでも一律の毎秒20リクエストで動きます。

本ガイドは、オーディエンスを組み立てるために使う6つの手法、それぞれを実行するコード、結果を組み合わせてクリーンにする方法、コスト、そして手に入れたリストで何をするかを扱います。

目次

X でのオーディエンス発見は実際に何を意味するのか? {#what-does-audience-discovery-on-x-actually-mean}

X(Twitter)でのオーディエンス発見は、到達する価値のある特定のアカウントを特定し、それらを構造化された、フィルターできるリストとして収集するプロセスです。3つの重なり合うグループにまたがります。自分を自社のオーディエンスとして公に説明する人々、自社の領域のアカウントをすでにフォローしている人々、そして今まさに自社のトピックについて投稿している人々です。

手動の経路はおなじみです。高度な検索を開き、手でいくつかの Twitter リストを作り、コミュニティを閲覧し、メモを取ります。それは1回限りの調べには効きます。数千のアカウント、それらを見極めるためのデータポイント、そして来月に再実行できるプロセスが必要になった瞬間に崩れます。エクスポートボタンはなく、UI は数百プロフィールの後に読み込みを止め、どれも再現可能ではありません。

プログラムの経路は3つの問題すべてを修正します。各発見の質問が、完全な公開プロフィールをきれいな JSON として返す単一の API 呼び出しに対応付けられます。プロフィール文、フォロワー数、アカウントの年齢、所在地、認証状態です。規模で収集し、コードでフィルターし、CSV やデータベースにエクスポートします。本ガイドの残りは、その実用版です。

はっきりさせておく価値のある1つの区別:自社の対象オーディエンスは到達したい相手で、それはつねにすでに自社をフォローしている相手とは限りません。以下の手法は、後者だけでなく前者を見つけます。

オーディエンスを見つける6つの方法、それぞれが答える質問に対応付け {#six-ways}

各手法は異なるターゲティングの質問に答え、異なるエンドポイントを使います。1つを単独で実行するか、いくつかを組み合わせて重複で採点します(下でさらに扱います)。

#答える質問エンドポイントリクエストあたりのプロフィール
1誰がプロフィール文で対象ペルソナを自認するか?/search-users約20
2誰が自社の領域のアカウントをすでにフォローしているか?/followers最大200
3誰が自社のトピックのコミュニティに参加したか?/community-members約20
4誰が今自社のトピックを活発に議論しているか?/search-tweets約20
5どの認証済みアカウントが対象をフォローするか?/verified-followers最大200
6誰が自社の領域のコンテンツを増幅するか?/retweeters/quotes約20

すべての例はベース URL として https://api.sorsa.io/v3ApiKey ヘッダーを使います。共有のセットアップ:

python
import requests, time

API_KEY = "YOUR_API_KEY"
BASE = "https://api.sorsa.io/v3"
AUTH = {"ApiKey": API_KEY}                                  # GET endpoints
POST_HEADERS = {**AUTH, "Content-Type": "application/json"} # POST endpoints

手法1:プロフィール文に何を入れたかでアカウントを見つける {#technique-1}

自分を自社のオーディエンスとして自己申告する人々を見つける最も速い方法は、その人が自分について書いたものを検索することです。Solidity developergrowth marketeroncology nurse のようなキーワードは、プロフィール文、表示名、ハンドルに対して一致するため、ある役割に自身を重ねる人々が直接表面化します。これは、オーディエンスが肩書きやニッチで自身にラベルを付けるときの正しい選択です。

/search-users エンドポイントはクエリを取り、一致するものをページネーションで返します。各結果は完全なプロフィールなので、2回目の照会なしにコードで候補を見極めます。

python
def find_users_by_bio(query, max_pages=10):
    users, cursor = [], None
    for _ in range(max_pages):
        body = {"query": query}
        if cursor:
            body["next_cursor"] = cursor
        resp = requests.post(f"{BASE}/search-users", headers=POST_HEADERS,
                             json=body, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        users.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return users

users = find_users_by_bio("machine learning engineer")

パターンはどの言語でも同一です。JavaScript での同じ呼び出し:

javascript
async function findUsersByBio(query, maxPages = 10) {
  const all = [];
  let cursor = null;
  for (let i = 0; i < maxPages; i++) {
    const body = { query };
    if (cursor) body.next_cursor = cursor;
    const resp = await fetch("https://api.sorsa.io/v3/search-users", {
      method: "POST",
      headers: { ApiKey: "YOUR_API_KEY", "Content-Type": "application/json" },
      body: JSON.stringify(body),
    });
    if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
    const data = await resp.json();
    all.push(...(data.users || []));
    cursor = data.next_cursor;
    if (!cursor) break;
    await new Promise((r) => setTimeout(r, 100));
  }
  return all;
}

すべてのレコードが完全なプロフィールを運ぶため、フィルターは別の API 呼び出しではなくリスト内包表記です。

python
qualified = [
    u for u in users
    if u.get("followers_count", 0) >= 1000
    and u.get("tweets_count", 0) >= 100
    and not u.get("protected", False)
]

複数語とコマンド駆動の精度には、ツイートに使うのと同じクエリ構文が適用されます。Twitter 検索 API ガイド がコマンドのセットを詳しく案内します。

手法2:競合のフォロワーリストを抽出する {#technique-2}

最も収量の高い単一のオーディエンスのシグナルは、誰がすでに自社の領域のアカウントをフォローしているかです。ある人が自社の直接の競合をフォローしているなら、その人は自身を事前に見極めています。カテゴリを気にかけているのです。/followers エンドポイントはそのリストを、リクエストあたり最大200件の完全なプロフィールで返し、それが利用可能な最もコスト効率の良い発見の呼び出しにします。

python
def get_followers(username, max_pages=20):
    followers, cursor = [], None
    for _ in range(max_pages):
        params = {"username": username}
        if cursor:
            params["next_cursor"] = cursor
        resp = requests.get(f"{BASE}/followers", headers=AUTH,
                            params=params, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        followers.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return followers

followers = get_followers("competitor_handle", max_pages=20)

単一の競合は出発点です。自社の領域の複数のプレーヤーをフォローするアカウントは、より鋭いセグメントです。重複が、1回限りのフォローではなく本物のカテゴリへの関心を示すからです。いくつかのシードを取得し、共通部分を保ちます。

python
from collections import Counter

competitors = ["competitor_a", "competitor_b", "competitor_c"]
follower_sets = {h: {f["id"] for f in get_followers(h, max_pages=10)}
                 for h in competitors}

all_ids = [uid for ids in follower_sets.values() for uid in ids]
overlap = {uid for uid, c in Counter(all_ids).items() if c >= 2}

5,000万フォロワーのアカウントを端から端まで歩くのは、めったに価値がありません。およそ500,000フォロワーを超えるアカウントには、最初の50〜100ページ(10,000〜20,000プロフィール)を取得するのが、通常、最近のアクティブなオーディエンスの代表的なサンプルです。保護されたアカウントとサンプリングのエッジケースを含む、フォロワーとフォロー中の抽出のより深い扱いは、Twitter フォロワーを抽出する ガイドをご覧ください。

手法3:コミュニティのメンバー名簿を取得する {#technique-3}

X のコミュニティはトピックで範囲を絞ったグループで、それはメンバーシップがすでに自己選択した関心でフィルターされていることを意味します。自社のニッチのコミュニティの名簿を取得すると、まさにその主題にオプトインしたオーディエンスが手に入ります。/community-members エンドポイントは、数値のコミュニティ ID か完全な URL のいずれかを受け付けます。

python
def get_community_members(community_id, max_pages=20):
    members, cursor = [], None
    for _ in range(max_pages):
        body = {"community_link": community_id}
        if cursor:
            body["next_cursor"] = cursor
        resp = requests.post(f"{BASE}/community-members", headers=POST_HEADERS,
                             json=body, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        members.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return members

コミュニティの結果はコンパクトなプロフィール(id、ユーザー名、表示名、画像、認証、保護)です。フィルターのためにフォロワー数、プロフィール文、アカウントの年齢でそれらを充実させるには、収集した ID を、最大100件の ID を受け付け1リクエストと数えるバッチプロフィールエンドポイントに通します。関連するリストとコミュニティのエンドポイントは、X リストとコミュニティ API ガイド で扱っています。

手法4:ツイート検索からリアルタイムの意図を採掘する {#technique-4}

他の手法は、人々を「誰であるか」や「誰をフォローしているか」で見つけます。ツイート検索は、今まさに発している言葉で見つけます。今日「CRM の推薦を探しています」と投稿する人は、単に静的なプロフィールに合う人とは異なる、そしてしばしばより価値のあるオーディエンスです。意図が新鮮だからです。ツイートを検索し、それからユニークな作者を抽出します。

python
def find_active_voices(query, min_followers=100, max_pages=10):
    seen, voices, cursor = set(), [], None
    for _ in range(max_pages):
        body = {"query": query, "order": "latest"}
        if cursor:
            body["next_cursor"] = cursor
        resp = requests.post(f"{BASE}/search-tweets", headers=POST_HEADERS,
                             json=body, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        for tw in data.get("tweets", []):
            u = tw.get("user", {})
            uid = u.get("id")
            if uid and uid not in seen and u.get("followers_count", 0) >= min_followers:
                seen.add(uid)
                voices.append({
                    "username": u.get("username"),
                    "followers": u.get("followers_count", 0),
                    "bio": u.get("description", ""),
                    "sample_tweet": (tw.get("full_text") or "")[:160],
                })
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return voices

voices = find_active_voices(
    '("need a CRM" OR "looking for a CRM") lang:en -filter:retweets')

クエリ文字列こそ、この手法がその価値を稼ぐところです。意図を表面化するいくつかのパターン:

目的クエリ
カテゴリの購買意図"need a [category]" OR "looking for [category]" lang:en -filter:retweets
競合への不満"[competitor]" (frustrated OR broken OR "switching from") -from:[competitor]
移行の意図"migrating from [tool]" OR "switching from [tool]" lang:en
推薦のリクエスト("any recommendation" OR "anyone use") [topic] lang:en
悩みの議論"struggling with" OR "how do you handle" [topic] lang:en

公式 API が静かに落とすエンゲージメントのフィルターを含む完全なコマンドのセットは、Twitter 検索コマンドのチートシート にあります。

手法5:認証済みフォロワーを切り出す {#technique-5}

PR リスト、ジャーナリストへのアウトリーチ、投資家の調査、またはインフルエンサーの精査には、オーディエンスの著名なひと切れが、生の数より重要です。/verified-followers は、/followers と同じ形とページネーションで、対象をフォローする認証済みアカウントのみを返します。

python
def get_verified_followers(username, max_pages=10):
    verified, cursor = [], None
    for _ in range(max_pages):
        params = {"username": username}
        if cursor:
            params["next_cursor"] = cursor
        resp = requests.get(f"{BASE}/verified-followers", headers=AUTH,
                            params=params, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        verified.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return verified

verified = get_verified_followers("openai")
verified.sort(key=lambda u: u.get("followers_count", 0), reverse=True)

到達数でソートすると、これは対象の周回にある最も影響力のあるアカウントの出来合いのショートリストです。単一のフォロワーリストを超えて影響力のあるアカウントを見つけ見極めるには、あらゆるニッチのインフルエンサー API がより広いワークフローを扱います。

手法6:コンテンツを増幅するアカウントを捕捉する {#technique-6}

自社の領域のコンテンツをリツイートし引用ツイートする人々は、単に潜むだけでなくすでに行動するオーディエンスです。2つのエンドポイントが増幅をカバーします。/retweeters はツイートをリポストしたユーザーを返します。/quotes は完全な引用ツイートを返し、それは引用するユーザーそのコメントを含み、感情でタグ付けしたアウトリーチに有用です。

python
def get_retweeters(tweet_link, max_pages=10):
    users, cursor = [], None
    for _ in range(max_pages):
        body = {"tweet_link": tweet_link}
        if cursor:
            body["next_cursor"] = cursor
        resp = requests.post(f"{BASE}/retweeters", headers=POST_HEADERS,
                             json=body, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        users.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return users

def get_quoters(tweet_link, max_pages=10):
    quotes, cursor = [], None
    for _ in range(max_pages):
        body = {"tweet_link": tweet_link}
        if cursor:
            body["next_cursor"] = cursor
        resp = requests.post(f"{BASE}/quotes", headers=POST_HEADERS,
                             json=body, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        quotes.extend(data.get("tweets", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return quotes

引用ツイートはユーザーオブジェクトではなくツイートオブジェクトです。引用するアカウントには tweet["user"] を通じて、そのコメントには tweet["full_text"] を通じて到達します。完全なエンゲージメントのセット(返信、引用、リツイート者)は、Twitter エンゲージメント API ガイド で扱っています。

ソースを組み合わせ、重複で採点する {#combine}

各手法は異なる盲点をカバーするため、最も強いセグメントは複数にまたがって現れるアカウントです。いくつかの手法を実行し、ユーザー ID で重複排除し、各アカウントがいくつのソースに現れたかでランク付けします。

python
def score_by_source(by_source):
    """by_source: {source_name: [user objects]} -> deduped users with source_count."""
    index = {}
    for source, users in by_source.items():
        for u in users:
            uid = u["id"]
            index.setdefault(uid, {"user": u, "sources": set()})["sources"].add(source)

    result = []
    for entry in index.values():
        u = entry["user"].copy()
        u["source_count"] = len(entry["sources"])
        u["sources"] = sorted(entry["sources"])
        result.append(u)

    result.sort(key=lambda r: (-r["source_count"], -r.get("followers_count", 0)))
    return result

combined = score_by_source({
    "followers_competitor_a": followers,
    "bio_ml_engineer": users,
    "intent_crm": voices,
    "community_indie_hackers": get_community_members("1966045657589813686"),
})

2つ以上のソースに現れるアカウントは、通常リストの最も価値の高い部分です。自社の競合をフォローし、自社の対象の役割で自身を説明し、かつ今週意図をツイートした人は、単一のシグナルだけよりも強いリードです。

ボットと死んだアカウントを取り除く {#filter}

生の発見の出力はつねにノイズを運びます。ボット、放棄されたアカウント、そしてフォローファームのプロフィールです。すべてのエンドポイントが完全なプロフィールを返すため、1つの再利用可能なフィルターが、追加の呼び出しなしにリスト全体をクリーンにします。

python
from datetime import datetime, timezone, timedelta

def is_quality_account(user, min_followers=500, min_tweets=100, max_following_ratio=10):
    if user.get("protected", False):
        return False
    if user.get("followers_count", 0) < min_followers:
        return False
    if user.get("tweets_count", 0) < min_tweets:
        return False
    followers = user.get("followers_count", 1)
    if user.get("followings_count", 0) > followers * max_following_ratio:
        return False
    created = user.get("created_at")
    if created:
        try:
            dt = datetime.fromisoformat(created.replace("Z", "+00:00"))
            if dt > datetime.now(timezone.utc) - timedelta(days=30):
                return False
        except ValueError:
            pass
    if not (user.get("description") or "").strip():
        return False
    return True

qualified = [u for u in combined if is_quality_account(u)]

偏ったフォロー対フォロワーの比率、空のプロフィール文、真新しいアカウント、そしてほぼゼロのツイートが、最も安いボットの兆候です。しきい値をニッチに合わせて調整します。偽物と非アクティブなアカウントの採点のより深いパスは、偽フォロワーの監査 のガイドをご覧ください。

オーディエンスの取得は公式 X API と比べていくらかかるか? {#cost}

オーディエンス発見は本質的に読み取りの多いものです。プロジェクトあたり数千のプロフィール、しばしばスケジュールで更新されます。それがまさに、課金モデルが請求を決めるワークロードです。公式 X API は取得したリソース単位で課金するため、すべてのプロフィールが別々の課金単位です。フラットレートの Twitter/X API はリクエスト単位で課金し、フォロワーリクエストは1回の呼び出しの価格で最大200プロフィールを返します。

公式 X API(従量課金)Sorsa API
料金モデル取得したリソース単位リクエスト単位(フラット)
10,000フォロワープロフィール各$0.010で10,000読み取り = 約$100Pro で各$0.00199の約50リクエスト = 約$0.10
リクエストあたりのプロフィール1(各課金)最大200(/followers、1として課金)
認証OAuth 2.0 + ベアラートークン、承認済み開発者アカウント単一の ApiKey ヘッダー、承認なし
レート制限15分あたり約300リクエスト、エンドポイントにより変動毎秒20リクエスト、すべてのプラン
プラン従量課金、月間200万投稿読み取り上限Starter $49 / Pro $199 / Enterprise $899(月額)

ギャップは規模で複利で効きます。公式 API で10,000件の競合フォロワーに10,000件のプロフィール文検索のプロフィールを加えて取得するのは、いかなるフィルターの前にも、およそ20,000ユーザー読み取り、約$200です。フラットなリクエスト単位の料金 を持つプロバイダーの Proプランでの同じ2つの取得は、単一の月次リクエスト予算の内側に着地します。プロバイダーごとの完全なコストの内訳は、Twitter API の代替の比較 をご覧ください。(公式 X API の数字は2026年4月の更新後に有効なリソース単位の料金を反映しています。Sorsa 自身のレートはすべてのプランでフラットなリクエスト単位です。)

手に入れたオーディエンスで何をするか {#what-next}

アカウントのリストは原材料で、成果ではありません。価値が実際に現れるところ:

  • アウトリーチとリード生成。 フィルターされ重複排除されたプロフィールが、優先順位付けされた連絡先リストになります。意図と重複のスコアが、誰に最初に到達すべきかを教えます。X でのリード生成のワークフロー はまさにこの出力の上に構築され、X でリードを見つける 実用的なガイドが見極めのフィルターを案内します。
  • コンテンツ戦略。 収集したプロフィール文、繰り返されるフレーズ、サンプルツイートが、オーディエンスが実際に使う言語を地図化します。推測する代わりに、フックとスレッドでその言い回しを反映します。
  • 競合とオーディエンスのベンチマーク。 自社のフォロワーとライバルのフォロワーの重複を比較したり、競合のオーディエンスが時間とともにどう伸びるかを追跡したりします。X での競合追跡 で。開発者側の手法は、Twitter 競合分析ガイド にあります。
  • 地理による市場規模の推定。 予算をコミットする前に、どの市場が本物かを見るために、オーディエンスを国別に集計します。手法は Twitter オーディエンス地理ガイド にあります。

宛先が何であれ、エクスポートは同じステップです。コードを飛ばしたいなら、同じプロフィールを、X データを Google スプレッドシートにエクスポートする の案内を通じてスプレッドシートにまっすぐ送れます。以下のスニペットは、任意の手法の出力を CSV に書きます。

python
import csv

def export_users_to_csv(users, output_file="audience.csv"):
    fields = ["user_id", "username", "display_name", "description",
              "followers_count", "followings_count", "tweets_count",
              "location", "verified", "created_at"]
    with open(output_file, "w", newline="", encoding="utf-8") as f:
        w = csv.DictWriter(f, fieldnames=fields)
        w.writeheader()
        for u in users:
            w.writerow({
                "user_id": u.get("id", ""),
                "username": u.get("username", ""),
                "display_name": u.get("display_name", ""),
                "description": (u.get("description") or "").replace("\n", " "),
                "followers_count": u.get("followers_count", 0),
                "followings_count": u.get("followings_count", 0),
                "tweets_count": u.get("tweets_count", 0),
                "location": u.get("location", ""),
                "verified": u.get("verified", False),
                "created_at": u.get("created_at", ""),
            })

実践:B2B SaaS チームのオーディエンス構築 {#in-practice}

およそ12人の B2B SaaS マーケティングチームが、2四半期にわたって手作業でアウトリーチを動かした後にこのアプローチに来ました。同チームのプロセスは、リサーチャーが高度な検索からハンドルをスプレッドシートにコピーするもので、週に数百アカウント前後で頭打ちになり、見極めのデータを生みませんでした。同チームはそれをパイプラインとして作り直しました。3つの最も近い競合のフォロワーを抽出し、買い手が持つ2つの職種のプロフィール文検索を実行し、既存のツールに対する移行の意図についてツイートを検索し、それから組み合わせて重複で採点しました。2つ以上のソースに当たったアカウントが、数千の見極められたプロフィールのランク付けされたアウトリーチリストになり、毎週更新されました。

同チームを驚かせた部分はコストの項目でした。この量を公式 X API で動かす元の計画は、読み取りのワークロードをフィルターの前に月数百ドルに値付けしました。データ層をフラットレートの Twitter スクレイパーに移すことが、同じ取得を$200未満の月次プランの内側に置きました。このような読み取りの多い作業には、フラットなリクエスト単位のモデルがリソース単位の課金より最大50分の1のコストで動きます。1つのフォロワーリクエストが単一の単位の価格で最大200プロフィールを返すからです。

自分でこれを試す方法 {#getting-started}

ここのすべての手法を、まずコードを書かずにテストできます。ノーコードの Sorsa Playground は、同じエンドポイントを UI を通じて実行します。手法を選び、ページ数を設定し、リクエストのコストを前もって見て、結果をダウンロードします。スクリプトの準備ができたら、クイックスタート が数分で動くリクエストを与えます。

セットアップは、開発者アカウントの審査も OAuth フローもない単一の ApiKey ヘッダーで、最初の100リクエストは無料です。クレジットカード不要・有効期限なしで、40個のエンドポイントすべてをカバーする1回限りの枠です(最大10,000ツイートまたは20,000プロフィールに十分)。プロフィールの取得は1,000あたり$0.01から、ツイートは1,000あたり$0.02からで、すべてのプランが一律の毎秒20リクエストを保ち、それは200プロフィールのフォロワー呼び出しでは毎秒最大4,000プロフィールです。より大きな、またはスケジュールされたオーディエンス構築には、料金ページ にリクエスト単位の計算と計算機があります。

よくある質問 {#faq}

Twitter(X)で対象オーディエンスをどう見つける? X で対象オーディエンスを見つけるとは、アプリをスクロールするのではなく、到達する価値のある特定のアカウントを構造化されたリストとして収集することです。実用的な手法は、プロフィール文とツイートのキーワード検索、競合のフォロワーの抽出、コミュニティのメンバーのスクレイピング、そして関連する投稿をリツイートするアカウントの収集です。API はこれらを、フィルターしてエクスポートできる完全なプロフィールとして返します。

プロフィール文のキーワードで Twitter ユーザーを見つけられる? はい。プロフィール文、表示名、ハンドルをキーワードで検索すると、「Solidity developer」や「growth marketer」のような役割やニッチに自身を重ねるアカウントが表面化します。ユーザー検索のエンドポイントがこれを行い、各一致をフォロワー数とアカウントの年齢を含む完全なプロフィールとして返すため、2回目の照会なしにコードで候補を見極められます。

競合のフォロワーのリストをどう取得する? 競合のフォロワーは、公開のフォロワーリストをリクエストあたり最大200件の完全なプロフィールとして返すフォロワーエンドポイントを通じてアクセスできるため、10,000フォロワーのリストはおよそ50回の呼び出しで済みます。いくつかの競合を取得し、2つ以上をフォローするアカウントを保つと、単一のアカウントよりも鋭い、カテゴリに関心のあるセグメントを生みます。

オーディエンスの取得により良いレート制限を持つ X API の代替はある? はい。Sorsa API は、すべてのプランで一律の毎秒20リクエストとエンドポイント別の窓なしで、読み取りの多い作業のために作られた Twitter/X API の代替です。リソース単位ではなくリクエスト単位で課金するため、1つのフォロワー呼び出しが枠の1単位で最大200プロフィールを返し、セットアップは承認の列のない単一の API キーです。

10,000件のフォロワープロフィールの取得はいくらかかる? 公式 X API では、10,000件のフォロワープロフィールは各$0.010で10,000リソース読み取りとして課金され、およそ$100です。フラットなリクエスト単位のモデルでは、同じ10,000プロフィールは各$0.002の約50リクエストで、およそ10セントです。フォロワーエンドポイントがリクエストあたり最大200プロフィールを返すからです。

コーディングなしで X でオーディエンスを見つけられる? はい。Sorsa Playground は、発見のエンドポイントをウェブインターフェースを通じて実行します。ユーザー検索やフォロワー抽出のような手法を選び、何ページ取得するかを設定し、実行前にリクエストのコストを見て、結果をエクスポートします。API と同じデータを使い、最初の100リクエストはクレジットカード不要で無料なので、プランにコミットする前に最初のオーディエンスの取得は何もかかりません。


監修:Keksich(Sorsa創業者、マーケター兼X APIリサーチャー)

本ガイドのまとめ方:6つの手法は、Sorsa の代替の Twitter/X API をビルドして運用しながら稼働中の X データ層に対して当チームが実行するもので、ここのすべてのエンドポイント、パラメータ、リクエスト単位の挙動は、この改訂の間に Sorsa API のドキュメント に対して再確認しました。コストの比較は、2026年4月の更新後に公開された公式 X API のリソース単位の料金を使い、Sorsa 自身の公開されたレートと突き合わせています。2026年6月11日確認。