Xのデータ取得で比較するGrok APIとTwitter API
GrokはxAIのX Searchツールを通じてXを読み取ります。取得した1,000投稿あたり$5にモデルのトークン代がかかり、返ってくるのはリンクつきの文章の回答です。XデータAPIが返すのは、投稿そのもののJSONレコードです。
要点: GrokのX Searchは1,000投稿あたり$5.00にトークン代がかかり、どの投稿を読むかはモデルが決めるため、手に入るのはデータセットではなく回答です。投稿の生データが必要なら、Sorsa APIが向いています。POST /search-tweets は1回の呼び出しで投稿者つきの約20投稿を、1,000件あたり$0.07からで返し、100リクエストの無料枠で始められます。
- エンドポイント
POST /search-tweets- 1ページの件数
- 1回の呼び出しで約20投稿
- 料金
- 1,000件あたり$0.07から
#GrokがXから取得できるものと、返されるもの
Grokが公開されているXの投稿を読めるのは、検索ツールを通じてだけです。xAIのモデルのページ(新しいタブで開きます)には、Grokは学習データに含まれていた範囲を超える最新の出来事やデータについての知識を持たないと書かれており、grok-4.7ではそれが2026年5月までです。Grokアプリでは検索が自動で実行されます。xAI APIでは自分でオンにする必要があり、そのツールがX Search(x_search)です。
つまりGrokは、エージェントを作る人なら誰もが直面する境界線の、回答の側に立っています。もう一方の側、つまりXのデータをそのままのJSONでモデルに返すツールは、AIエージェント向けTwitter APIのガイドで扱っています。
X Searchをオンにしたリクエストは、xAIのResponses APIへの1回の呼び出しです。ここでは、api.x.ai を向けたOpenAI SDKを通して実行します。
import os
from openai import OpenAI
grok = OpenAI(api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1")
resp = grok.responses.create(
model="grok-4.7",
input="What are developers saying about MCP this week?",
tools=[{"type": "x_search"}],
)
print(resp.output_text)
この1回の呼び出しの裏で、モデルは必要と判断した回数だけ検索を実行します。X Searchのドキュメント(新しいタブで開きます)には、呼び出せる4つの機能が挙げられています。Xの検索演算子によるキーワード検索、意味によるセマンティック検索、ユーザー検索、そして1つの投稿を親投稿と返信ごと取得するスレッド取得です。対象は最大20ハンドルまでに絞り込むことも、20ハンドルを除外することもでき、YYYY-MM-DD 形式で期間も指定できます。
返ってくるのは、モデルのテキスト、引用したリンク、そして2つの使用量カウント x_posts_fetched と x_users_fetched です。投稿そのものはリクエストの内部にとどまり、レコードのリストも、安定したフィールドの集合も、次のページへのカーソルもありません。xAI自身のドキュメントにも、モデルが独自のクエリを選ぶため結果は変動する、という注意書きがあります。以前のLive Search APIもすでに廃止され、そのガイドはWeb Searchにリダイレクトされます。
#GrokのX SearchとXデータAPIを並べて比較
X Searchは質問に答えるために作られ、XデータAPIはレコードを返すために作られています。そのため、一致するすべての投稿、正確な数値、同じ結果の再現が必要な作業では、2つの差が最も大きくなります。これらの行ではデータAPIが勝ち、その中でもSorsa APIは、他の2つの投稿単位の料金のごく一部で実現します。
| 重要な点 | Sorsa API | xAI X Search(Grok) | 公式X API |
|---|---|---|---|
| 返ってくるもの | JSONレコード、投稿者つきで1投稿41フィールド | リンクつきのモデルの回答 | JSONレコード、指定したフィールド |
| 投稿を選ぶのは誰か | 自分、クエリとXの演算子で | モデル、独自のクエリで | 自分 |
| 一致するすべてをページごとに | 可能、空になるまで next_cursor | 不可:モデルは回答が得られた時点で止まる | 可能、ページトークンで |
| 同じリクエストで同じ投稿 | 同じ | 異なる:実行ごとに結果が変わる | 同じ |
| 遡れる範囲 | 2006年まで | 指定した期間 | フルアーカイブ検索で2006年まで |
| 1,000投稿あたりの料金 | $0.07から | $5.00にトークン代 | $5.00。2026年11月22日から投稿者つきで$15.00 |
| 1,000プロフィールあたりの料金 | $0.014から | $10.00 | $10.00 |
| 必要なもの | ヘッダーにAPIキー1つ | xAI APIキー | 開発者アカウント、OAuthまたはBearerトークン、事前チャージのクレジット |
返ってくるもの
- Sorsa API
- JSONレコード、投稿者つきで1投稿41フィールド
- xAI X Search(Grok)
- リンクつきのモデルの回答
- 公式X API
- JSONレコード、指定したフィールド
投稿を選ぶのは誰か
- Sorsa API
- 自分、クエリとXの演算子で
- xAI X Search(Grok)
- モデル、独自のクエリで
- 公式X API
- 自分
一致するすべてをページごとに
- Sorsa API
- 可能、空になるまで
next_cursor - xAI X Search(Grok)
- 不可:モデルは回答が得られた時点で止まる
- 公式X API
- 可能、ページトークンで
同じリクエストで同じ投稿
- Sorsa API
- 同じ
- xAI X Search(Grok)
- 異なる:実行ごとに結果が変わる
- 公式X API
- 同じ
遡れる範囲
- Sorsa API
- 2006年まで
- xAI X Search(Grok)
- 指定した期間
- 公式X API
- フルアーカイブ検索で2006年まで
1,000投稿あたりの料金
- Sorsa API
- $0.07から
- xAI X Search(Grok)
- $5.00にトークン代
- 公式X API
- $5.00。2026年11月22日から投稿者つきで$15.00
1,000プロフィールあたりの料金
- Sorsa API
- $0.014から
- xAI X Search(Grok)
- $10.00
- 公式X API
- $10.00
必要なもの
- Sorsa API
- ヘッダーにAPIキー1つ
- xAI X Search(Grok)
- xAI APIキー
- 公式X API
- 開発者アカウント、OAuthまたはBearerトークン、事前チャージのクレジット
公式X APIの料金は、従量課金の料金表(新しいタブで開きます)に基づいています。この表では読み取りも月300万投稿が上限で、それを超えるとXが販売するのは月約$42,000からのEnterprise契約のみです。Xの10月23日付の告知(新しいタブで開きます)によると、2026年11月22日から、投稿と一緒に返される投稿者とメディアも読み取りとして課金されるため、投稿者つきの検索結果は$0.005から$0.015になります。
知っておきたいこと
Grokに「投稿をJSONで返して」と頼んでも、その回答がレコードになるわけではありません。そのJSONはモデルが読んだ内容から書いたもので、何件の投稿を読むかもモデルが決めます。引用された投稿IDを控えておき、数値が重要なときはIDでレコードを取得してください。Sorsa APIの
POST /tweet-info-bulk(新しいタブで開きます) なら、1回の呼び出しで最大100投稿を、1,000件あたり$0.014から取得できます。
#1万、10万、100万投稿のコスト
100万投稿の読み取りは、GrokのX Searchなら$5,000にトークン代、公式X APIなら$5,000(11月22日以降、投稿者つきなら$15,000)、Sorsa APIなら$70からです。この差はどの規模でも変わりません。X Searchと公式X APIはどちらも投稿単位で課金するのに対し、Sorsa APIはリクエスト単位で課金し、1回の検索リクエストが約20投稿を返すからです。
Sorsa API
最安 $70
1,000ポストあたり最安$0.07、投稿者情報つき
xAI X Search (Grok)
$5,000 + トークン代
1,000ポスト取得あたり$5.00、別途モデルのトークン代
Official X API
$5,000
1,000ポストあたり$5.00、 $15,000 2026年11月22日からは投稿者分も加算
データ費用のみです。Grokがそのポストを読む場合のトークン代は、どの経路でも同じです。
トークンを加えても比較は変わりません。投稿をどの経路で取り込んでも、Grokの読み取りは、xAIのAPIの料金ページ(新しいタブで開きます)のとおり、grok-4.7の料金、入力トークン100万あたり$2.00、出力トークン100万あたり$6.00で課金されます。整えた投稿が約60トークンだとすると、1,000投稿で入力が約$0.12増える程度で、投稿そのものの$5.00と比べれば小さな額です。
X Searchには、質問のコストを見かけより高くする3つの課金ルールがあります。
- 取得したすべての項目が課金されます。 引用された項目だけではなく、親投稿、引用された投稿、取得したスレッドのすべての投稿が、1,000件あたり$5の対象です。
- カウントは重複排除されません。 2回の検索が返した同じ投稿は、2回課金されます。
- ボリュームを決めるのはモデルです。 検索のラウンド数に上限を付け、あとから
x_posts_fetchedを確認することはできますが、呼び出す前に投稿数を固定することはできません。
GrokやXのサブスクリプションは、これらを一切カバーしません。プランのページ(新しいタブで開きます)には、有料プランにAPIアクセスが含まれるとありますが、「API usage is billed separately at standard model rates and doesn't draw from your plan's usage pool」、つまりAPIの利用は標準のモデル料金で別途請求され、プランの利用枠からは差し引かれません。
#Sorsa APIでGrokに生のX投稿を渡す方法
Grokに生の投稿を渡すには、XデータAPIから取得し、質問に必要なフィールドだけを残して、X Searchツールなしでプロンプトに入れてgrok-4.7に渡します。そうすれば、Grokは自分で選んだ投稿だけを読むことになります。この取得には、Twitter(X)API兼スクレイピングツールであるSorsa APIが向いています。ApiKey ヘッダー1つでOAuthは不要、1回の検索呼び出しで投稿者のプロフィール全体つきの約20投稿を1,000件あたり$0.07からで返し、全プランで毎秒20リクエストです。
-
2つのキーを取得します。 サインアップして、Sorsa APIキーを
SORSA_API_KEYに、xAIキーをXAI_API_KEYに設定します。どちらもサーバー側にだけ置いてください。 -
投稿を検索します。
POST /search-tweets(新しいタブで開きます) は、Xの検索演算子を使ったクエリを受け取り、1ページ約20投稿を返します。"order": "latest"を指定すると新しい順です。検索は2006年まで遡れます。ターミナル curl -X POST "https://api.sorsa.io/v3/search-tweets" \ -H "ApiKey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "\"grok api\" lang:en -filter:retweets", "order": "latest"}'レスポンス200 OK { "tweets": [ { "id": "2116193940272985298", "full_text": "Our digest now fetches posts first, then asks Grok.", "created_at": "2026-10-30T15:42:07Z", "lang": "en", "likes_count": 64, "retweet_count": 7, "reply_count": 12, "quote_count": 3, "view_count": 8120, "is_reply": false, "conversation_id_str": "2116193940272985298", "user": { "id": "1544001928374651904", "username": "maya_ships_prompts", "display_name": "Maya Ships Prompts", "followers_count": 4210, "verified": false } } ], "next_cursor": "DAADDAABCgABHV6x9mPAJxIKAAIdXrH2Y8" } -
ページを取得して整えます。 この関数は、ページ数の上限まで
next_cursorをたどり、1投稿につき6つのフィールドだけを残すので、200投稿でもプロンプトは短く収まります。Python import os import requests SORSA = "https://api.sorsa.io/v3" HEADERS = {"ApiKey": os.getenv("SORSA_API_KEY", "YOUR_API_KEY")} def fetch_posts(query: str, max_pages: int = 10) -> list[dict]: posts, cursor = [], None for _ in range(max_pages): body = {"query": query, "order": "latest"} if cursor: body["next_cursor"] = cursor r = requests.post(f"{SORSA}/search-tweets", json=body, headers=HEADERS, timeout=30) r.raise_for_status() # 403: key or quota; 429: over 20 req/s data = r.json() for t in data.get("tweets", []): posts.append({ "id": t["id"], "at": t["created_at"], "author": t["user"]["username"], "followers": t["user"]["followers_count"], "likes": t["likes_count"], "text": t["full_text"][:500], }) cursor = data.get("next_cursor") if not cursor: break return posts -
それらの投稿だけについてGrokに質問します。 整えた投稿をプロンプトとして送り、
toolsは指定せず、回答に投稿IDを含めるよう求めます。Python import json from openai import OpenAI grok = OpenAI(api_key=os.environ["XAI_API_KEY"], base_url="https://api.x.ai/v1") def ask_grok(question: str, posts: list[dict]) -> str: lines = "\n".join(json.dumps(p, ensure_ascii=False) for p in posts) resp = grok.responses.create( model="grok-4.7", input=[ {"role": "system", "content": "Answer only from the posts given. Cite post ids."}, {"role": "user", "content": f"{question}\n\nPosts:\n{lines}"}, ], ) return resp.output_text posts = fetch_posts('"grok api" lang:en -filter:retweets') print(ask_grok("What problems do developers report?", posts))
検索10ページは10リクエストで約200投稿です。そのため、この実行のデータ取得にかかるのは、どのSorsa APIプランでも多くて数セントで、次に読むのがGrokでもClaudeでもGPTでも同じです。コストがかかる前にクエリを絞り込む演算子は、Twitter検索APIのガイドにまとめています。
#Grokにアカウントについて尋ねられること
アカウントについてGrokに入力される質問の多くには、API呼び出し1回で返る正確な答えがあります。フォロワー数、ユーザーID、フォローリスト、シャドウバンの状態などです。それらの数値についてモデルが書く文は、古かったり丸められていたりすることがあります。ルックアップは、呼び出した時点の値を、コードから読めるフィールドで返します。
| Grokに尋ねられること | Sorsa APIのルックアップ | 返ってくるもの |
|---|---|---|
| このアカウントのフォロワーは何人? | GET /info(新しいタブで開きます) | followers_count、followings_count、tweets_count、created_at とさらに15のフィールド |
| このアカウントのユーザーIDは? | GET /username-to-id/{user_handle}(新しいタブで開きます) | 数値の id |
| このアカウントは誰をフォローしている? | GET /follows(新しいタブで開きます) | 1ページ最大200アカウント、next_cursor つき |
| このアカウントはシャドウバンされている? | GET /check-shadowban(新しいタブで開きます) | is_shadowbanned と、各チェックの結果(正常、バン、不明) |
| このアカウントは今週何を投稿した? | POST /user-tweets(新しいタブで開きます) | 1ページ約20投稿、それぞれ投稿者のプロフィール全体つき |
このアカウントのフォロワーは何人?
- Sorsa APIのルックアップ
GET /info(新しいタブで開きます)- 返ってくるもの
followers_count、followings_count、tweets_count、created_atとさらに15のフィールド
このアカウントのユーザーIDは?
- Sorsa APIのルックアップ
GET /username-to-id/{user_handle}(新しいタブで開きます)- 返ってくるもの
- 数値の
id
このアカウントは誰をフォローしている?
- Sorsa APIのルックアップ
GET /follows(新しいタブで開きます)- 返ってくるもの
- 1ページ最大200アカウント、
next_cursorつき
このアカウントはシャドウバンされている?
- Sorsa APIのルックアップ
GET /check-shadowban(新しいタブで開きます)- 返ってくるもの
is_shadowbannedと、各チェックの結果(正常、バン、不明)
このアカウントは今週何を投稿した?
- Sorsa APIのルックアップ
POST /user-tweets(新しいタブで開きます)- 返ってくるもの
- 1ページ約20投稿、それぞれ投稿者のプロフィール全体つき
このうち2つは、コード不要の無料ツールがあります。ユーザーIDにはTwitterユーザーIDチェッカー、検索バンにはTwitterシャドウバンテストです。多数のアカウントを一度に調べるなら、GET /info-batch(新しいタブで開きます) が1回の呼び出しで100プロフィールを、1,000プロフィールあたり$0.014からで返します。X Searchでは1,000プロフィールあたり$10.00です。
#作業別の使い分け
求める結果が文章ならGrokに尋ね、投稿、リスト、数値ならXデータAPIを使います。多くのプロダクトでは、この順に両方が必要です。先に取得し、あとで質問します。判断基準は上の表のとおりで、誰が投稿を選ぶか、一致するすべてを取得できるか、再実行で同じ投稿が返るか、1,000件あたりの料金です。
| 作業 | 使うもの |
|---|---|
| 今日の話題についての単発の質問 | Grok(アプリ) |
| クエリに一致するすべての投稿を、自分のデータベースに保存 | Sorsa API、POST /search-tweets をページごとに |
| フォロワー数やエンゲージメントのダッシュボード | Sorsa API、GET /info-batch と POST /tweet-info-bulk |
| アカウントの何年も前までの投稿 | Sorsa API、POST /user-tweets |
| 自社製品についての発言の日次サマリー | Sorsa APIで取得し、Grokなど任意のモデルで要約 |
| Grokの回答が引用した投稿の確認 | Sorsa API、IDを指定した POST /tweet-info-bulk |
今日の話題についての単発の質問
- 使うもの
- Grok(アプリ)
クエリに一致するすべての投稿を、自分のデータベースに保存
- 使うもの
- Sorsa API、
POST /search-tweetsをページごとに
フォロワー数やエンゲージメントのダッシュボード
- 使うもの
- Sorsa API、
GET /info-batchとPOST /tweet-info-bulk
アカウントの何年も前までの投稿
- 使うもの
- Sorsa API、
POST /user-tweets
自社製品についての発言の日次サマリー
- 使うもの
- Sorsa APIで取得し、Grokなど任意のモデルで要約
Grokの回答が引用した投稿の確認
- 使うもの
- Sorsa API、IDを指定した
POST /tweet-info-bulk
投稿そのものが成果物になる作業なら、選ぶのはSorsa APIです。41フィールドすべてを含む投稿を、検索なら1,000件あたり$0.07から、IDの指定なら1,000件あたり$0.014から取得でき、一致するすべてをページごとに追え、履歴は2006年まで遡れます。読み取り専用でXのログイン情報も求めないため、Xアカウントにリスクはありません。投稿や返信を行うには、公式X APIと組み合わせてください。
Grokをスケジュールで動かすエージェントにも、同じルールが当てはまります。Hermes Agentのガイドでは、組み込みの x_search の位置づけと、データソースの差し替え方を示しています。ここで挙げた数値の根拠になっているX APIの料金は、すべてX APIの料金の解説にあります。
#Grokには自分で選んだ投稿を渡す
Grokが返すのはXについての回答です。その背後にある投稿、カウント、履歴が必要なら、先に取得してください。Sorsa APIなら、X Searchの$5.00ではなく1,000投稿あたり$0.07からで、投稿には投稿者とすべてのフィールドが付き、最初の100リクエストは無料です。上のパイプラインを試すには十分な、約2,000投稿を取得できます。
#よくある質問
Grok APIはTwitterを検索できますか?
できます。xAI APIのX Searchツール(x_search)を使うと、GrokがX上の投稿でキーワード検索とセマンティック検索を実行し、ユーザーを調べ、スレッドを取得して、使った投稿へのリンクつきで回答します。料金は取得した1,000投稿あたり$5、1,000プロフィールあたり$10にモデルのトークン代です。返るのはGrokの回答であり、投稿のレコードではありません。レコードが必要な場合は、XデータAPIから投稿を取得してください。
GrokのX Searchは、XまたはGrokのサブスクリプションで無料になりますか?
なりません。xAIのプランのページには、The X Subscriptionの有料プランにGrok APIアクセスが含まれるとありますが、APIの利用は標準のモデル料金で別途請求され、プランの利用枠からは差し引かれません。どのプランに加入していても、API経由のX Searchの呼び出しは、取得した投稿とプロフィールに応じて、1,000件あたり$5と$10にトークン代が課金されます。
GrokはリアルタイムのXデータを使いますか?
使うのは、検索ツールがオンのときだけです。xAIは、Grokは学習データの範囲を超える最新の出来事についての知識を持たず、grok-4.7では学習データが2026年5月までで、リアルタイムのデータにはWeb SearchまたはX Searchが必要だと説明しています。Grokアプリでは検索が自動で実行されます。APIでは、リクエストに x_search を追加し、取得された投稿の分を支払います。
GrokはツイートをJSONで返せますか?
Grokは回答をJSON形式にできますが、そのJSONは、モデルが読むことに決めた投稿から書いたもので、データベースから返ったものではありません。フィールドが欠けることもあり、再実行すると別の投稿が選ばれることもあります。信頼できるレコードが必要なら、Grokには投稿IDを出力させ、そのIDで投稿を取得してください。たとえばSorsa APIの POST /tweet-info-bulk なら、1回の呼び出しで100件です。
Grokへの1回の質問で、何投稿が取得されますか?
モデルが決めた数だけです。X Searchは、検索とスレッド取得が返したすべての投稿に課金し、親投稿や引用された投稿も含み、2回返された投稿は2回数えます。xAIの例の質問では、19投稿が取得されました。各レスポンスには x_posts_fetched が含まれるので、呼び出しのあとで件数を確認できます。ハンドルや期間を絞り、検索のラウンド数を減らすと、件数は抑えられます。
AIアプリ用にツイートを取得するには、どのAPIを使うべきですか?
ツイートの取得にはSorsa APIを使い、読み取りにはGrokを含めた任意のモデルを使ってください。Sorsa APIは、41フィールドの投稿を投稿者つきで、検索なら1,000件あたり$0.07から返します。GrokのX Searchや公式X APIは1,000件あたり$5.00です。APIキーは1つで済み、全プランで毎秒20リクエストに対応し、100リクエストの無料枠から始められます。
#検証方法
2026年11月2日に、xAIのX Search、料金、モデルのドキュメント、x.aiのプランのページ、Xの従量課金の料金表と10月23日付の拡張に関する告知を読み、Sorsa APIの最新のAPIリファレンスと照合しました。このページのリクエストとコードはそれらのリファレンスに従っています。この記事のために、どちらのAPIも実際には呼び出していないので、掲載しているレスポンスはドキュメントに記載された形式の例です。