本文へスキップ

Twitterで見込み客を見つける方法

Twitter(X)で見込み客を見つける手順は4つです。「any recommendations for」「alternative to」のような購買意図を示すフレーズで公開投稿を検索し、プロフィールが想定顧客に合う投稿者に絞り、スコアを付けて、投稿から48時間以内に公開で返信します。

要点: Xで最良の見込み客は、公開の場でツールを探している人、競合を離れようとしている人、自社が解決する課題を説明している人です。プロフィール文と競合のフォロワーを使えば、母集団を広げられます。これをコードで動かすなら、Sorsa APIが向いています。POST /search-tweets は、1リクエストで投稿者のプロフィール全体つきの約20投稿を、1,000件あたり$0.07からで返し、100リクエストの無料枠で最初の2,000件をまかなえます。

エンドポイント
POST /search-tweets
1ページの件数
1リクエストあたり約20投稿
料金
1,000件あたり$0.07から

#Twitterで見込み客はどこにいるか

Xにおける見込み客とは、購入する理由を示した公開アカウントです。おすすめを尋ねる投稿、使っているツールへの不満、売り込み先の役職をプロフィールに書いていることなどが該当します。こうした人を見つけるのに、自分のフォロワーは要りませんし、会話を始めるのに相手のメールアドレスも要りません。誰が自分を想定顧客と名乗っているかを調べるには、無料のTwitterプロフィール検索ツールが、ブラウザ上でプロフィール文の言葉からアカウントを探します。

Twitterのリード獲得には2つの進め方があります。インバウンドは、役に立つスレッドや分かりやすいプロフィールで、数か月かけて人を引き寄せます。アウトバウンドは、今まさに何かが必要だと発言している人を見つけます。このガイドが扱うのは後者です。初日から機能し、すべてのステップをコードで動かせるからです。

  1. 購買意図を検索します。 自社のカテゴリと競合の名前について、購買意図を示す検索を、直近数日に限って実行します。

  2. 母集団を広げます。 プロフィール文に想定顧客の役職がある人、競合のフォロワー、関連するコミュニティやリストのメンバー、自分の分野の投稿に返信している人を加えます。

  3. スコアを付けて重複を排除します。 すべてをユーザーIDで統合し、購買意図、役職、プロフィールのWebサイト、実際の活動に点数を付けます。

  4. 公開で返信します。 最も有望な投稿には、1〜2日以内に役立つ内容で答え、読んだ人がプロフィールから連絡できるようにします。

    Five lead sources flow into one pool, get scored and split into hot, warm and cold leads 購買意欲のある投稿 POST /search-tweets 購入者像が書かれた自己紹介 POST /search-users 競合のフォロワー GET /followers コミュニティとリストのメンバー POST /community-members 投稿に反応した人 /comments /quotes /retweeters 1つのプール ユーザーIDで 重複なし スコア 0~10 アカウントごと Hot、7以上 今日返信 Warm、4~6 ウォッチリスト Cold、0~3 除外
    すべてのソースがユーザーIDをキーにした1つのプールに集まり、スコアが今日誰に返信するかを決めます。

有料の広告フォーマットは別のチャネルです。Xは2017年にLead Generation Cardsを終了し、2026年8月にLead Gen Adsを発表しました。どちらも、広告にオプトインした人から情報を集めるものです。以下の方法で見つけられるのは、広告を一度も見ていない人たちです。

#購入間近の人を見つける12の購買意図検索

購買意図は、6種類の公開投稿に現れます。それぞれについて2つの検索を用意すれば、人々の言い回しの大半を拾えます。最も強いシグナルは、直接の依頼と、競合を離れる決断です。予算と期限が頭にあるからです。

シグナル投稿の例強さ
ツールを探している「10人規模のチームに合う請求書ソフトを、誰か教えてもらえませんか?」最高
競合を離れる「来月、今のツールをやめる予定です。ほかに何かありますか?」最高
支払う意思がある「支払い遅れの請求を代わりに催促してくれるものなら、喜んでお金を払います。」高
競合に不満がある「うちの請求書ツール、また値上げしたんだけど。」高
課題を説明している「今週は、支払い遅れの請求の催促に3時間も使ってしまった。」中
公開の場で競合に話しかけている競合のアカウントへの返信:「このサポート、まだ返事を待っています。」中
  • ツールを探している

    投稿の例
    「10人規模のチームに合う請求書ソフトを、誰か教えてもらえませんか?」
    強さ
    最高
  • 競合を離れる

    投稿の例
    「来月、今のツールをやめる予定です。ほかに何かありますか?」
    強さ
    最高
  • 支払う意思がある

    投稿の例
    「支払い遅れの請求を代わりに催促してくれるものなら、喜んでお金を払います。」
    強さ
    高
  • 競合に不満がある

    投稿の例
    「うちの請求書ツール、また値上げしたんだけど。」
    強さ
    高
  • 課題を説明している

    投稿の例
    「今週は、支払い遅れの請求の催促に3時間も使ってしまった。」
    強さ
    中
  • 公開の場で競合に話しかけている

    投稿の例
    競合のアカウントへの返信:「このサポート、まだ返事を待っています。」
    強さ
    中

どの検索も3つの部分でできています。依頼の言葉、自社のカテゴリまたは競合の名前、ノイズを除くフィルターです。lang:en は1つの言語に絞り、-filter:retweets は同じ投稿のコピーを除き、within_time:7d は直近1週間に絞り、-filter:links は宣伝投稿の大半を除きます。本物の質問にリンクが付くことはまれだからです。競合自身のハンドルを -from: で除外すれば、その宣伝が結果に入りません。フィルターの全一覧は、Twitter検索演算子のガイドにあります。

自社のカテゴリ、競合1社、想定顧客の言葉による課題を入力すると、ビルダーが12の検索をすべて書き出します。どれでもXの検索に貼り付けて結果を手作業で確認することも、次のセクションのAPIに送ることもできます。

ツールを探している

質問("any recommendations" OR "can anyone recommend" OR "suggestions for") "invoicing software" -filter:links lang:en -filter:retweets within_time:7d
ニーズ("looking for a" OR "in the market for" OR "need a good") "invoicing software" -filter:links lang:en -filter:retweets within_time:7d

競合から離れる

乗り換え"ExampleBooks" ("switching from" OR "moving off" OR cancelled OR canceling) -from:examplebooks_app lang:en -filter:retweets within_time:7d
代替("alternative to ExampleBooks" OR "ExampleBooks alternative" OR "replacement for ExampleBooks") -from:examplebooks_app lang:en -filter:retweets within_time:7d

購入意欲あり

予算("happy to pay" OR "willing to pay" OR "budget for") "invoicing software" lang:en -filter:retweets within_time:7d
比較("ExampleBooks vs" OR "vs ExampleBooks") -from:examplebooks_app lang:en -filter:retweets within_time:7d

競合への不満

価格"ExampleBooks" (expensive OR "raised prices" OR "price increase") -from:examplebooks_app lang:en -filter:retweets within_time:7d
障害"ExampleBooks" (down OR 障害 OR "not working") -from:examplebooks_app lang:en -filter:retweets within_time:7d

課題を語る

課題"late invoices" ("spent hours" OR "so tired of" OR "every week") lang:en -filter:retweets within_time:7d
方法("how do you" OR "how do I") "late invoices" -filter:links lang:en -filter:retweets within_time:7d

競合に公開で話しかける

競合へ宛ててto:examplebooks_app (help OR issue OR "still waiting") lang:en -filter:retweets within_time:7d
競合について@examplebooks_app ("anyone else" OR "is it just me") -from:examplebooks_app lang:en -filter:retweets within_time:7d

6つのシグナルそれぞれに2つの検索を、あなたの市場向けに作成しました。どれもXの検索ボックスにも、APIにもそのまま使えます。

知っておきたいこと

新しい検索を自動化する前に、最初の20件の結果を読んでください。ベンダー、冗談、求人の投稿が数件を超えるなら、カテゴリの言葉を絞るか、-hiring や -job、同じ分野の他社の名前などの除外を加えます。

#Sorsa APIで検索を実行する

これらの検索をブラウザなしで毎日実行するなら、Twitter(X)API兼スクレイピングツールであるSorsa APIが向いています。POST /search-tweets(新しいタブで開きます) は、Xの高度な検索と同じ演算子を受け付け、1リクエストで投稿者のプロフィール全体つきの約20投稿を、1,000投稿あたり$0.07からで返します。必要なのはヘッダーにAPIキー1つだけで、Xの開発者アカウントもOAuthも不要、全プランが毎秒20リクエストで動作します。

  1. キーを取得します。 サインアップして、ダッシュボードからAPIキーをコピーします。最初の100リクエストは無料で、期限もありません。

  2. 検索を1回実行します。 リクエストの本文にクエリを入れます。order を latest にすると、新しい投稿から順に返ります。ビルダーのフィルターは、同じクエリ文字列に追加します。

    ターミナル
    curl -X POST "https://api.sorsa.io/v3/search-tweets" \
      -H "ApiKey: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "query": "\"any recommendations\" \"invoicing software\" lang:en",
        "order": "latest"
      }'
    
    レスポンス200 OK
    {
      "tweets": [
        {
          "id": "2116173807612858385",
          "full_text": "Can anyone recommend invoicing software for a small team?",
          "created_at": "2026-10-30T14:22:07Z",
          "lang": "en",
          "likes_count": 4,
          "retweet_count": 0,
          "reply_count": 7,
          "quote_count": 0,
          "view_count": 812,
          "is_reply": false,
          "user": {
            "id": "1710249922130870349",
            "username": "brightledger_studio",
            "display_name": "Brightledger Studio",
            "description": "Founder at Brightledger Studio. Design for fintech.",
            "location": "Austin, TX",
            "bio_urls": ["https://example.com"],
            "followers_count": 2140,
            "followings_count": 388,
            "tweets_count": 3912,
            "created_at": "2023-10-06T11:05:31Z",
            "verified": false,
            "protected": false
          }
        }
      ],
      "next_cursor": "DAADDAABCgABHV7Bk1OAJxEKAAIdXsDWr9ZQoAgAAwAAAAIAAA"
    }
    
  3. 12の検索を毎朝実行します。 このスクリプトは各検索を送り、最大3ページまで next_cursor をたどり、アカウントごとに1件の記録として、そのアカウントが該当したシグナルをすべて保持します。ビルダーの検索を SEARCHES に貼り付けてください。

    Python
    import requests
    
    BASE = "https://api.sorsa.io/v3"
    HEADERS = {"ApiKey": "YOUR_API_KEY"}
    TAIL = " lang:en -filter:retweets within_time:7d"
    
    # label -> search; paste all 12 from the builder above
    SEARCHES = {
        "asks": '("any recommendations" OR "can anyone recommend") '
                '"invoicing software" -filter:links',
        "switching": '"ExampleBooks" ("switching from" OR "moving off" '
                     'OR cancelled) -from:examplebooks_app',
    }
    
    
    def search(query, pages=3):
        body, posts = {"query": query + TAIL, "order": "latest"}, []
        for _ in range(pages):
            r = requests.post(f"{BASE}/search-tweets", headers=HEADERS,
                              json=body, timeout=30)
            r.raise_for_status()
            page = r.json()
            posts += page.get("tweets") or []
            if not page.get("next_cursor"):
                break
            body["next_cursor"] = page["next_cursor"]
        return posts
    
    
    def add(pool, user, signal, post_url=None):
        lead = pool.setdefault(user["id"], {"user": user, "signals": set(),
                                            "posts": []})
        lead["signals"].add(signal)
        if post_url:
            lead["posts"].append(post_url)
    
    
    pool = {}  # one entry per account, keyed by user ID
    for signal, query in SEARCHES.items():
        for post in search(query):
            user = post["user"]
            if not user.get("protected"):
                url = f"https://x.com/{user['username']}/status/{post['id']}"
                add(pool, user, signal, url)
    print(len(pool), "accounts matched")
    

429 のレスポンスは、1秒間に20リクエストを超えたことを意味するので、1秒待ってから再送してください。403 はキーがないか、リクエストを使い切ったことを意味します。失敗したリクエストには課金されません。

#Twitterでターゲットオーディエンスを見つける

購買意図の投稿は、必要性が生じた瞬間の人を捉えます。ターゲットオーディエンスは、想定顧客に当てはまり、来四半期に自社を必要とするかもしれない、より大きな集団です。この集団は4つのソースで作れます。どのソースも公開プロフィールの全体または簡易版を返すので、同じルールでスコアを付けられます。

ソース見つかるものSorsa APIのエンドポイント1リクエストあたり
プロフィール文想定顧客の役職、分野、会社の種類を名乗っているアカウントPOST /search-usersプロフィール1ページ分
競合のフォロワーすでに自社のカテゴリに注目している人GET /followers、GET /verified-followers最大200プロフィール
コミュニティとリスト本人たち、またはキュレーターによってトピック別にまとめられた人POST /community-members、GET /list-membersメンバー1ページ分
投稿に反応した人自分の分野の投稿に返信、引用、リポストした人POST /comments、POST /quotes、POST /retweeters約20
  • プロフィール文

    見つかるもの
    想定顧客の役職、分野、会社の種類を名乗っているアカウント
    Sorsa APIのエンドポイント
    POST /search-users
    1リクエストあたり
    プロフィール1ページ分
  • 競合のフォロワー

    見つかるもの
    すでに自社のカテゴリに注目している人
    Sorsa APIのエンドポイント
    GET /followers、GET /verified-followers
    1リクエストあたり
    最大200プロフィール
  • コミュニティとリスト

    見つかるもの
    本人たち、またはキュレーターによってトピック別にまとめられた人
    Sorsa APIのエンドポイント
    POST /community-members、GET /list-members
    1リクエストあたり
    メンバー1ページ分
  • 投稿に反応した人

    見つかるもの
    自分の分野の投稿に返信、引用、リポストした人
    Sorsa APIのエンドポイント
    POST /comments、POST /quotes、POST /retweeters
    1リクエストあたり
    約20

売り込み先の役職をプロフィール文で検索する

POST /search-users(新しいタブで開きます) は、プロフィールに含まれるキーワードやフレーズでアカウントを探します。「fractional CFO」や「Shopify agency」のようなクエリなら、そう名乗っている人が返ります。同じ検索は採用候補者探しにも使えます。想定顧客の役職の代わりに、職種名をクエリに入れます。

ターミナル
curl -X POST "https://api.sorsa.io/v3/search-users" \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "fractional CFO"}'

競合のフォロワーからリードリストを作る

競合のフォロワーは、すでに自社のカテゴリに注目している人たちなので、そのリストはプロスペクティングの強力な土台になります。GET /followers(新しいタブで開きます) は、1リクエストで最大200人をプロフィール全体つきで返します。フォロワー1万人のアカウントなら、Sorsa APIでは$0.07から、公式X APIでは$100です。GET /verified-followers(新しいタブで開きます) は認証済みのアカウントだけを返し、企業や活発なプロフェッショナルに偏った、短いリストになります。

プロフィール文が想定顧客に合うフォロワーだけを残して、スコアを付けます。フォロワーであることは関心を示すだけで、購買意図ではありません。該当する投稿のないフォロワーは、ツールを探した人よりも下に置きます。ページ送りとCSVを含む全件エクスポートはTwitterフォロワー APIのガイドに、競合の成長の推移を追う方法はTwitter競合分析のガイドにあります。

コミュニティとリストのメンバーを取得する

自分のトピックのXコミュニティに参加している人や、自分の分野でキュレーションされたリストに載っている人は、自分たちで自分たちをまとめてくれています。POST /community-members(新しいタブで開きます) は、コミュニティのIDまたはリンクを受け取り、ハンドル、表示名、認証状況からなる簡易メンバープロフィールを返します。スコアリングに必要なプロフィール文とカウントは、GET /info-batch(新しいタブで開きます) で1リクエスト100アカウントずつ補います。GET /list-members(新しいタブで開きます) は、リストにあるすべてのアカウントのプロフィール全体を返します。良いリストの見つけ方と、1つのフィードとして読み取る方法は、Twitterリスト APIのガイドにあります。

自分の分野の投稿に反応した人を集める

自社が解決する課題について業界の発信者が投稿すると、その課題を抱えている人たちからの返信が集まります。POST /comments(新しいタブで開きます) は、その返信を1リクエスト20件で、関連度、新しさ、いいね数の順に返します。POST /quotes(新しいタブで開きます) は引用した投稿を、POST /retweeters(新しいタブで開きます) はリポストしたアカウントを返します。誰がいいねしたかはX上で公開されていないため、どのAPIでも取得できません。返信、引用、リポストが、関心を示す公開の痕跡です。

これらのソースを同じプールに加えます。2つ以上のソースで見つかったアカウント(たとえば、今週ツールを探していた競合のフォロワー)は、リストの最上位に入ります。

Python
def users(method, path, params, pages=5):
    """Page through an endpoint that returns {users, next_cursor}."""
    params, found = dict(params), []
    for _ in range(pages):
        if method == "GET":
            r = requests.get(f"{BASE}{path}", headers=HEADERS,
                             params=params, timeout=30)
        else:
            r = requests.post(f"{BASE}{path}", headers=HEADERS,
                              json=params, timeout=30)
        r.raise_for_status()
        page = r.json()
        found += page.get("users") or []
        if not page.get("next_cursor"):
            break
        params["next_cursor"] = page["next_cursor"]
    return found


SOURCES = [
    ("bio", "POST", "/search-users", {"query": "fractional CFO"}),
    ("rival", "GET", "/followers", {"username": "examplebooks_app"}),
    ("list", "GET", "/list-members", {"list_id": "1850824826680246284"}),
]
for source, method, path, params in SOURCES:
    for user in users(method, path, params):
        if not user.get("protected"):
            add(pool, user, source)

#すべてのリードを評価してスコアを付ける

すべてのプロフィールに含まれる公開フィールドからアカウントごとにスコアを付けると、リストは自動で並びます。まず購買意図、次に適合度、最後に実在し活動している人かどうかの兆候です。以下の基準は出発点です。最初の50件に返信したあとは、会話につながったシグナルの点数を上げてください。

A matched post and its author's profile, with the fields that score the lead marked: 8 points, a hot lead Brightledger Studio @brightledger_studio 経理ソフトを 小チーム向けで教えて? +3 Brightledger Studioの創業者。 フィンテック向けデザイン。 +2 example.com +1 フォロワー2,140人 +1 2023年10月登録、投稿3,912件 +1 +3 ツールを探している full_text +2 自己紹介に創業者と記載 user.description +1 自己紹介にWebサイトあり user.bio_urls +1 フォロワー50~5万人 user.followers_count +1 90日以上、投稿100件以上 created_at, tweets_count スコア8/10 Hotリード: 今日返信
スコアに必要なものはすべて、1つの投稿と投稿者のプロフィールに含まれています。2回目のリクエストは不要です。
シグナル参照するフィールド点数
ツール、代替、価格を尋ねた、または競合を離れる該当した投稿+3
不満を述べた、課題を説明した、または選択肢を比較した(ハウツーの質問は+1)該当した投稿+2
プロフィールに役職の言葉:founder、CEO、owner、head ofdescription+2
プロフィールにWebサイトbio_urls+1
フォロワー数が50〜5万followers_count+1
作成から90日超で、投稿が100件以上created_at, tweets_count+1
2つ以上の検索またはソースで見つかった自分のプール+2
  • ツール、代替、価格を尋ねた、または競合を離れる

    参照するフィールド
    該当した投稿
    点数
    +3
  • 不満を述べた、課題を説明した、または選択肢を比較した(ハウツーの質問は+1)

    参照するフィールド
    該当した投稿
    点数
    +2
  • プロフィールに役職の言葉:founder、CEO、owner、head of

    参照するフィールド
    description
    点数
    +2
  • プロフィールにWebサイト

    参照するフィールド
    bio_urls
    点数
    +1
  • フォロワー数が50〜5万

    参照するフィールド
    followers_count
    点数
    +1
  • 作成から90日超で、投稿が100件以上

    参照するフィールド
    created_at, tweets_count
    点数
    +1
  • 2つ以上の検索またはソースで見つかった

    参照するフィールド
    自分のプール
    点数
    +2

スコア7以上は今日中に返信すべきホットリード、4〜6はウォームで監視リストに入れ、それ未満は除外します。フォロワー数の範囲を設けているのは、使い捨てのアカウントと、ベンダーにはめったに返信しない有名人の両方を除くためです。空のアカウントや自動化されたアカウントをより詳しく調べたい場合は、Twitterボット検出のガイドのシグナルを、同じ関数に組み込めます。

スコアリングとエクスポートを同じスクリプトに追加します。最良のアカウントを先頭にした leads.csv を書き出すので、そのままスプレッドシートやCRMにインポートできます。

Python
import csv
import re
from datetime import datetime, timezone

ROLE = re.compile(r"\b(founder|co-founder|ceo|cfo|owner|head of)\b", re.I)
INTENT = {"asks": 3, "needs": 3, "switching": 3, "alternatives": 3,
          "budget": 3, "pricing": 2, "outage": 2, "problem": 2,
          "comparing": 2, "to-rival": 2, "at-rival": 2, "how-to": 1}


def score(lead):
    u = lead["user"]
    joined = datetime.fromisoformat(u["created_at"].replace("Z", "+00:00"))
    age = (datetime.now(timezone.utc) - joined).days
    points = max((INTENT.get(s, 0) for s in lead["signals"]), default=0)
    points += 2 if ROLE.search(u.get("description") or "") else 0
    points += 1 if u.get("bio_urls") else 0
    points += 1 if 50 <= u.get("followers_count", 0) <= 50_000 else 0
    points += 1 if age > 90 and u.get("tweets_count", 0) >= 100 else 0
    points += 2 if len(lead["signals"]) >= 2 else 0
    return points


with open("leads.csv", "w", newline="", encoding="utf-8") as f:
    out = csv.writer(f)
    out.writerow(["score", "tier", "handle", "bio", "website",
                  "signals", "post"])
    for lead in sorted(pool.values(), key=score, reverse=True):
        s, u = score(lead), lead["user"]
        tier = "hot" if s >= 7 else "warm" if s >= 4 else "cold"
        out.writerow([s, tier, u["username"], u.get("description", ""),
                      (u.get("bio_urls") or [""])[0],
                      " ".join(sorted(lead["signals"])),
                      (lead["posts"] or [""])[0]])

POST /community-members の簡易プロフィールには、プロフィール文もカウントもまだ含まれていません。IDを集めて100件ずつ GET /info-batch に送ってからスコアを付ければ、すべてのアカウントを同じフィールドで評価できます。

#スコア付きリードをCRM、Slack、スプレッドシートに送る

リードリストが役に立つのは、同じ日に誰かが動いたときだけです。そのため、ホットなリードは、チームがすでに作業している場所に送ります。CSVは、そのままどのCRMやスプレッドシートにもインポートできます。ライブのフィードにするなら、スクリプトを毎朝1回実行するようスケジュールし、新しいホットリードごとに、ハンドル、該当した投稿、シグナル、スコアをSlackのチャンネルに投稿します。

ノーコードのツールでも、プレーンなHTTPで同じフローを実行できます。Make、Zapier、n8n、PipedreamのHTTPモジュールが ApiKey ヘッダーつきで POST /search-tweets を呼び出し、続くモジュールが結果を絞り込み、スコアを付け、振り分けます。n8nでTwitter APIを使うのガイドでは、そのワークフローを順を追って組み立てます。

すでに見た投稿のIDをファイルに保存しておき、次の実行ではそれを飛ばすようにすれば、同じ相手にチームから2度目の返信が届くことはありません。CRMの記録には、ハンドル、プロフィールと投稿へのリンク、シグナル、スコア、プロフィールのWebサイト、リードを見つけた日付があると役に立ちます。

#公開の場でアプローチし、ルールを守る

Xで効果のある返信は、公開で、役に立ち、短いものです。尋ねられたことに答え、自社製品に触れるのは合うときだけにして、相手のほうから来てもらいます。返信する前に、自分のプロフィールが誰を支援しているかを1行で説明し、提案内容を説明するページにリンクしているか確認してください。良い返信は、まず相手をプロフィールに連れていくからです。

「小規模チーム向けの請求書ソフトを誰か教えてもらえませんか?」のような投稿への返信は、同業者からのアドバイスのように読めるものが効果的です。その規模で確認したい点を、自動リマインダーとクライアント用ポータルなど2つ挙げ、自社製品はその両方に対応していて、喜んでご紹介できる、と1行添えます。失敗する返信は、割引コードつきのリンクだけを、一致するすべての投稿の下に同じ時間帯に投稿することです。

リードのプロフィールにあるWebサイトは、2つ目の経路です。公開の場でツールを探し、会社のサイトを載せている人には、ダイレクトメッセージに頼らないフォローアップの手段があります。

公開投稿からリードを探すこと自体は通常のリサーチです。ルールが関わるのは、保存する内容と、人への連絡方法です。

  • 公開データだけを使います。 誰でも見られる投稿とプロフィールをもとに作業します。個人のメールアドレスや電話番号を探してはいけません。非公開アカウントも対象から外します。
  • 一斉メッセージは送りません。 自分のアカウントから、自動化したDM、フォロー、いいねを送らないでください。Sorsa APIは設計上、読み取り専用なので、そのどれも実行できず、Xのログイン情報も求めません。自分のアカウントで何かを自動化する前に、Xの自動化ルール(新しいタブで開きます)を読んでください。
  • メールには独自の法律があります。 EUまたは英国の人にメールを送る場合は、GDPRに基づく適法な根拠が必要で、通常は、バランステストを文書化したうえでの正当な利益です。米国の人への商用メールには、CAN-SPAM法に基づいて、機能するオプトアウトの手段を付けなければなりません。
  • オプトアウトを尊重します。 本人から求められたら記録を削除し、他人のプロフィールの生のエクスポートを転売したり公開したりしないでください。

#リード獲得の実行にかかるコスト

Sorsa APIはリクエスト単位で課金され、1リクエストが投稿者つきの約20投稿を返すため、リード獲得の実行は低コストで済みます。12の検索を各3ページずつ毎日実行すると、1日に約720投稿、月に約2万1,600投稿を読み取ります。公式X APIでは、$0.005の投稿単価で月$108、2026年11月22日からはXが各投稿の投稿者も(新しいタブで開きます)ユーザー読み取りとして$0.010で課金するため、同じ月で$324になります。Sorsa APIなら同じ月が$1.51からで、Starterプランに収まり、オーディエンス構築の余裕も残ります。

読み取る投稿数

公式X API

$500

10万投稿の場合

1投稿$0.005

Sorsa API

$7から

10万投稿の場合

1,000件あたり$0.07から

この作業のどのステップも、1,000件あたりのコストはSorsa APIのほうが公式X APIより低く、1リクエストでそれぞれ200件と100件が返るフォロワーリストとプロフィールの照会で、差が最も大きくなります。

リード獲得の実行のステップSorsa API、1,000件あたり公式X API、1,000件あたり
投稿者つきの購買意図の投稿$0.07から$5.00(11月22日から$15.00)
競合のフォロワー$0.007から$10.00
100件ずつバッチで照会するプロフィール$0.014から$10.00
  • 投稿者つきの購買意図の投稿

    Sorsa API、1,000件あたり
    $0.07から
    公式X API、1,000件あたり
    $5.00(11月22日から$15.00)
  • 競合のフォロワー

    Sorsa API、1,000件あたり
    $0.007から
    公式X API、1,000件あたり
    $10.00
  • 100件ずつバッチで照会するプロフィール

    Sorsa API、1,000件あたり
    $0.014から
    公式X API、1,000件あたり
    $10.00

公式X APIには、開発者アカウントとOAuthも必要で、従量課金プランの投稿読み取りは月300万件が上限です。すべての料金は料金ページ(新しいタブで開きます)にあります。Sorsa APIに必要なのはキー1つで、失敗したリクエストには課金されません。

#今日、最初のリードを見つける

Twitterで見込み客を見つけるには、人が助けを求める瞬間を検索し、想定顧客に合うアカウントを加え、ほかの誰よりも先に公開で返信します。これをコードで動かすなら、Sorsa APIが、検索、プロフィール、フォロワーリストをキー1つで提供します。購買意図の投稿は1,000件あたり$0.07から、フォロワーリストは1,000人あたり$0.007からで、毎秒20リクエストです。100リクエストの無料枠で、ビルダーの12の検索を約8回実行できます。

#よくある質問

Twitterで見込み客を探すのに最適なAPIは何ですか?

Sorsa APIは、この作業のために作られています。1つのキーで、投稿者のプロフィール全体つきの購買意図の投稿が1,000件あたり$0.07から、競合のフォロワーが1,000人あたり$0.007から、バッチリクエストなら100プロフィールずつ取得でき、全プランで毎秒20リクエストです。Xの開発者アカウントもOAuthも不要で、読み取り専用なのでXアカウントにも触れません。最初の100リクエストは無料です。

Sorsa APIで見込み客のメールアドレスは分かりますか?

分かりません。Sorsa APIが返すのは、投稿、プロフィール文、プロフィールに載せたリンク、フォロワー数などのプロフィールフィールドといった、公開されているXのデータだけです。メールアドレスや電話番号は返しません。Xの外でフォローアップするには、リードがプロフィールに載せているWebサイトや、すでに使っている連絡ツールを、その人に連絡する適法な理由がある場合に使ってください。

Sorsa APIでDMやフォローを自動化できますか?

できません。Sorsa APIは設計上、読み取り専用で、投稿も返信もいいねもフォローもダイレクトメッセージの送信もできず、Xのログイン情報も求めないため、アカウントにリスクはありません。リードの検索とスコアリングに使い、返信は自分で公開の場で行ってください。将来、製品からコードで投稿する必要が出た場合は、その部分を公式X APIと組み合わせます。

Twitterのリード獲得カード(Lead Generation Cards)はまだ利用できますか?

できません。TwitterはLead Generation Cardsを2013年に開始し、2017年2月1日に新規作成を停止し、2017年3月1日に表示を停止しました。2026年8月25日に、XはX営業担当者を通じて提供する有料フォームのLead Gen Adsを発表しました。どちらも広告にオプトインした人から情報を集めるものですが、公開投稿の検索は、すでに解決策を求めている人を見つけます。

自分の分野でターゲットになるTwitterフォロワーを見つけるにはどうすればよいですか?

分野で使われている言葉でプロフィール文を検索し、その分野がすでにフォローしている2〜3のアカウントのフォロワーを集めて、両方に合致するプロフィールを残します。両方の経路で見つかったアカウントが、最も適合度の高い相手です。Sorsa APIでは、プロフィール文の検索は POST /search-users で、フォロワーリストは1リクエスト200人、1,000人あたり$0.007からで取得できます。

各リードについて、どんなデータが得られますか?

各リードには、Xが表示する公開プロフィールが付きます。ハンドル、表示名、プロフィール文、所在地のテキスト、プロフィール内のリンク、フォロワー数とフォロー数、投稿数、アカウントの作成日、認証状況です。検索で見つかったリードには、いいね、返信、表示回数つきの該当した投稿も付きます。メールアドレス、ダイレクトメッセージ、非公開アカウントは含まれません。

#検証方法

2026年11月2日に、このガイドのすべてのエンドポイント、パラメータ、ページサイズ、フィールドを、最新のSorsa APIリファレンスとドキュメントの検索演算子一覧と照合し、公式X APIの料金ページと、課金拡張に関するXの告知を読みました。Googleで「twitter lead generation」と「how to find leads on twitter」の検索結果に出てくるページを読み、ChatGPTとGoogle AIモードにも同じ質問をしました。リクエストとレスポンスは、デモ用のアカウントでリファレンスをもとに書いたもので、この記事のために実際のデータで実行はしていません。

Sorsa APIチーム 読み取り専用のX(Twitter)APIとスクレイピングツール、Sorsa APIを開発・運営しています。2022年から本番稼働し(旧TweetScout API)、累計60億リクエスト以上を処理しています。 Sorsa APIについて

変更点
  • 全面的に書き直しました。ビルダーつきの12の購買意図検索、4つのオーディエンスソース、コードで書いたスコアリングの基準、公式X APIと照合した1,000件あたりのコスト、Xのリード獲得広告フォーマットの現状を追加しています。オーディエンス探索のガイドとリード獲得のソリューションページの内容は、この記事に統合しました。
  • 初公開。