Twitter(X)のスクレイピング方法 2026:使える手段と壊れる理由
2026年に Twitter(X)をスクレイピングする方法は5つあります。ログアウト状態のブラウザを自動操作する、X アカウントでライブラリを動かす、有料のホスト型スクレイピングツールを使う、1,000投稿あたり$5.00の公式 X API を呼び出す、Twitter/X データ API を呼び出す、のいずれかです。
結論: ログアウト状態の x.com で見られるのは、単独の投稿とプロフィールの最初の数件だけです。しかも X は12か月で内部の検索クエリ ID を37回変更しており、そのたびにスクレイピングのコードは壊れます。X アカウントを危険にさらさずに投稿を集めるなら Sorsa API を使います。POST /search-tweets は1リクエストで約20件の投稿を返し、料金は1,000件あたり$0.07からです。100回分の無料リクエストはクレジットカード不要で使えます。
- エンドポイント
POST /search-tweets- 1ページの件数
- 1リクエストあたり約20件
- 料金
- 1,000件あたり$0.07から
#2026年に Twitter をスクレイピングできるのか
できます。ただしアカウントなしでは、X のごく一部にしか届きません。2026年11月2日に、デスクトップブラウザでログアウト状態の x.com を開き、ページの種類ごとに何が返るかを記録しました。
| x.com のページ | 返ってきたもの |
|---|---|
| 単独の投稿 | 本文、各種カウント、最初の返信(HTML にすでに含まれる) |
| プロフィール | ヘッダーと最初の9件の投稿、その先はログイン画面 |
| 検索結果 | ログインページへのリダイレクト |
| フォロワー/フォロー中 | ログインページへのリダイレクト |
| サーバー上のデフォルト設定のヘッドレスブラウザで開いた投稿 | 最初のリクエストで HTTP 403 |
単独の投稿
- 返ってきたもの
- 本文、各種カウント、最初の返信(HTML にすでに含まれる)
プロフィール
- 返ってきたもの
- ヘッダーと最初の9件の投稿、その先はログイン画面
検索結果
- 返ってきたもの
- ログインページへのリダイレクト
フォロワー/フォロー中
- 返ってきたもの
- ログインページへのリダイレクト
サーバー上のデフォルト設定のヘッドレスブラウザで開いた投稿
- 返ってきたもの
- 最初のリクエストで HTTP 403
それ以外をスクレイピングするには、ログイン済みの X アカウントが必要です。そして、そのアカウントがリスクを負います。公開された X データを取得する方法は、次の5つです。
-
Playwright や Puppeteer でログアウト状態のブラウザを自動操作する:取得できるのは単独の投稿とプロフィールの上部だけです。
-
twscrape や Scweet などのオープンソースのライブラリを X アカウントで動かす:検索、タイムライン、フォロワーを取得できますが、プール内のすべてのアカウントがロックの危険にさらされます。
-
ホスト型のスクレイピングツール:収集を代行してくれて、結果ごとに課金されます。
-
公式 X API:開発者アカウントとアプリを用意したうえで、前払い残高から1,000投稿あたり$5.00です。
-
Twitter/X データ API:キー1つで公開投稿を JSON で返し、危険にさらす X アカウントはありません。
以下で各方法を順に説明します。5つ目は手順がいちばん少ないので最初に取り上げます。1つのアカウントの全投稿を保存したい場合は、ユーザーの全ツイートをダウンロードする方法をご覧ください。
#スクレイピングツールも X アカウントも使わずに X のデータを取得する
公開投稿、プロフィール、フォロワーの収集には、Twitter(X)API 兼スクレイピングツールである Sorsa API を使います。コードは ApiKey ヘッダーにキーを1つ付けて送るだけで JSON が返ります。検索は1リクエストで約20件、1,000件あたり$0.07から。ID 指定なら1リクエストで100ツイート、1,000件あたり$0.014からです。
操作するブラウザも、追跡するクエリ ID も、X へのログインもありません。Sorsa API が X のログイン情報や Cookie を求めることはないため、危険にさらすアカウントもありません。どのプランでも毎秒20リクエストで動作し、検索は X の高度な検索の演算子を使って2006年まで遡れます。
-
キーを取得する。 サインアップして、ダッシュボードから API キーをコピーします。新規アカウントには100回分の無料リクエストが付き、カードは不要です。
-
投稿を検索する。 X の検索クエリをそのまま
POST /search-tweets(新しいタブで開きます) に送ります。from:、since:、lang:、引用符で囲んだフレーズ、ハッシュタグがすべて使えます。ターミナル curl -X POST "https://api.sorsa.io/v3/search-tweets" \ -H "ApiKey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "\"open data\" lang:en since:2026-10-01", "order": "latest"}'レスポンス200 OK { "tweets": [ { "id": "1984210773912846356", "full_text": "New city data sets today: bus delays, tree cover, permits.", "created_at": "2026-10-30T14:05:11Z", "lang": "en", "likes_count": 48, "retweet_count": 9, "reply_count": 4, "quote_count": 1, "view_count": 5210, "user": { "id": "1590385166022184961", "username": "opendata_weekly_news", "display_name": "Open Data Weekly", "followers_count": 12400, "verified": false } } ], "next_cursor": "DAADDAABCgABG4dR6Xr2YQo" } -
カーソルをたどる。 各レスポンスには、次のページを指す
next_cursorが含まれます。これが空で返るまで、リクエストボディに入れて送り返します。import os import requests URL = "https://api.sorsa.io/v3/search-tweets" KEY = os.environ.get("SORSA_API_KEY", "YOUR_API_KEY") def search(query, max_pages=50): body = {"query": query, "order": "latest"} for _ in range(max_pages): r = requests.post(URL, json=body, headers={"ApiKey": KEY}, timeout=30) r.raise_for_status() page = r.json() yield from page["tweets"] if not page.get("next_cursor"): return body["next_cursor"] = page["next_cursor"] for t in search('"open data" lang:en since:2026-10-01'): print(t["id"], t["user"]["username"], t["full_text"][:60]) -
用途に合ったエンドポイントを選ぶ。 同じキーで、X から集められるあらゆる種類の公開データを読み取れます。課金は1リクエストにつき1回で、返る内容には左右されません。
| 用途 | エンドポイント | 1リクエストあたり | 1,000件あたり(から) |
|---|---|---|---|
| キーワード、アカウント、日付で投稿を検索 | POST /search-tweets | 約20件の投稿 | $0.07 |
| アカウントの投稿とリプライ | POST /user-tweets(新しいタブで開きます) | 約20件の投稿 | $0.07 |
| ID またはリンクから投稿を取得 | POST /tweet-info-bulk(新しいタブで開きます) | 最大100件の投稿 | $0.014 |
| プロフィール | GET /info-batch(新しいタブで開きます) | 最大100件のプロフィール | $0.014 |
| アカウントのフォロワー | GET /followers(新しいタブで開きます) | 最大200件のフォロワー | $0.007 |
| 投稿へのリプライ | POST /comments(新しいタブで開きます) | 約20件のリプライ | $0.07 |
キーワード、アカウント、日付で投稿を検索
- エンドポイント
POST /search-tweets- 1リクエストあたり
- 約20件の投稿
- 1,000件あたり(から)
- $0.07
アカウントの投稿とリプライ
- 1リクエストあたり
- 約20件の投稿
- 1,000件あたり(から)
- $0.07
ID またはリンクから投稿を取得
- 1リクエストあたり
- 最大100件の投稿
- 1,000件あたり(から)
- $0.014
プロフィール
- エンドポイント
GET /info-batch(新しいタブで開きます)- 1リクエストあたり
- 最大100件のプロフィール
- 1,000件あたり(から)
- $0.014
アカウントのフォロワー
- エンドポイント
GET /followers(新しいタブで開きます)- 1リクエストあたり
- 最大200件のフォロワー
- 1,000件あたり(から)
- $0.007
投稿へのリプライ
- エンドポイント
POST /comments(新しいタブで開きます)- 1リクエストあたり
- 約20件のリプライ
- 1,000件あたり(から)
- $0.07
どの投稿にも、投稿者のプロフィール全体が追加料金なしで付いてきます。403 が返った場合は、キーがないかリクエストを使い切っています。429 は1秒に20リクエストを超えた場合で、1秒待って再試行してください。失敗したリクエストに課金されることはありません。より本格的なクライアントが必要なら、ペース制御、リトライ、CSV 出力まで扱うPython で使う Twitter APIのチュートリアルをご覧ください。コードを書かない場合は、無料のツイートを CSV にエクスポートツールで、アカウントの投稿を CSV、Excel、JSON として保存できます。
#x.com のデータの読み込み方と、スクレイピングツールが壊れる理由
x.com は、すべての投稿、プロフィール、タイムラインを X 自身の内部 GraphQL API から取得しています。その呼び出しはどれも、オペレーション、クエリ ID、一連の機能フラグを指定しており、X はこれらを頻繁に変更します。クエリ ID はリクエストのアドレスに含まれるコードで、オペレーションの現行バージョンを指定します。機能フラグは、リクエストに列挙しなければならないオン/オフのスイッチです。
ログアウト状態の訪問者に対しては、ページが届く前にサーバー側でこのクエリが実行されます。2026年11月2日には、投稿ページの HTML にすでに TweetResultByRestId の結果が含まれていました。プロフィールページには UserByScreenName と、UserOriginalsTimeline という名前のオペレーションの下に最初の9件の投稿が含まれ、すべて合わせて188KB の HTML でした。投稿の本文は details.full_text に、いいね数は counts.favorite_count にあり、多くのチュートリアルがいまだにセレクタとして使う data-testid 属性はページにありませんでした。
ログイン状態では、ブラウザは残りのデータを /i/api/graphql/<queryId>/<Operation> という形のパスから取得し、呼び出しのたびにアカウントの auth_token と ct0 の Cookie を送ります。さらに、ct0 からコピーした CSRF ヘッダーと、生成したクライアントトランザクション ID も付けます。twscrape などのライブラリは、同じ呼び出しをブラウザなしで再現します。
スクレイピングのコードを壊すのは、このクエリ ID です。X のウェブアプリを公開で追跡している TwitterInternalAPIDocument(新しいタブで開きます) プロジェクトは、X の GraphQL 定義が変わるたびにそれを保存しています。2025年11月6日から2026年10月31日までの112件のスナップショットを見ると、検索を担うオペレーション SearchTimeline のクエリ ID は37回変わっていました。
これはおよそ10日に1回の変更で、2026年10月だけでも4回ありました。同じ1年間に UserTweets は38回、TweetResultByRestId は34回変わり、検索の呼び出しには現在40個の機能フラグが付いています。これらの値をハードコードしたコードは、誰かが更新するまで失敗します。twscrape にはこの状況のためのエラー GqlFeaturesOutdatedError まであり、ライブラリが有効にできない機能を X が必須にしたときに発生します。
#Playwright や Puppeteer で公開投稿をスクレイピングする
Python 向けの Playwright や Node.js 向けの Puppeteer によるブラウザ自動化で読み取れるのは、ログアウト状態の訪問者に見える範囲です。1回のページ読み込みにつき投稿1件か、プロフィールの最初の投稿までです。
-
ドライバーをインストールする。 Python なら
pip install playwrightとplaywright install chromiumを、Node.js ならnpm install puppeteerを実行します。 -
画面に表示されるブラウザを開く。 今回の検証では、サーバー上のデフォルト設定のヘッドレスブラウザは x.com から HTTP 403 を返されましたが、同じ回線の通常のブラウザウィンドウではページが表示されました。
-
表示された投稿を読み取る。 ページには
data-testidのフックがないため、article要素が現れるのを待って、そのテキストを取得します。from playwright.sync_api import sync_playwright POST = "https://x.com/XDevelopers/status/2019881223666233717" with sync_playwright() as p: browser = p.chromium.launch(headless=False) # headless got HTTP 403 page = browser.new_page() page.goto(POST) post = page.locator("article").first post.wait_for() print(post.inner_text()) browser.close() -
ログインの壁で止まる。 検索、フォロワー一覧、プロフィールの最初の投稿より先はすべてログインページにリダイレクトされるため、この方法ではそれ以上ページをたどれません。
得られるのは、人が読むのと同じ形の投稿です。名前、ハンドル、本文、時刻、そして 5.6K のようなラベルに丸められたカウント(誰によるものかは分かりません)が1つのテキストの塊で返り、分割は自分で行います。手で開けば済む程度の数件の投稿なら、これで足ります。ページを読み込むたびに、ブロック、レイアウトの変更、ログインの要求に遭う可能性が増えるため、量が必要なプロジェクトはログイン状態で動くライブラリや API に移っていきます。
#X アカウント上の Python ライブラリで Twitter をスクレイピングする
twscrape や Scweet などのオープンソースのライブラリは、ブラウザを使わずに、ログイン済みの X アカウントの Cookie で X の内部 GraphQL API を直接呼び出します。これで検索、タイムライン、フォロワー一覧が開きます。
-
予備の X アカウントを使う。 Scweet の README(新しいタブで開きます) は、個人のアカウントは決して使わず、専用のアカウントを用意するよう求めています。X は目をつけたアカウントをどれでもロックできるからです。
-
Cookie をコピーする。 x.com にログインし、ブラウザの開発者ツールを開いて、サイトの Cookie から
auth_tokenとct0をコピーします。 -
アカウントを追加して検索する。 twscrape(新しいタブで開きます) は、アカウントとセッションをローカルの SQLite ファイルに保存し、パース済みの投稿を返します。
Python import asyncio from twscrape import API, gather COOKIES = "auth_token=xxx; ct0=yyy" async def main(): api = API() # accounts and sessions go to accounts.db await api.pool.add_account_cookies("spare_account", COOKIES) query = "from:XDevelopers lang:en" posts = await gather(api.search(query, limit=40)) for post in posts: print(post.id, post.user.username, post.rawContent[:60]) asyncio.run(main()) -
量が必要ならアカウントとプロキシを増やす。 twscrape はアカウントごと、オペレーションごとにレート制限を追跡し、制限に達したアカウントはリセットまで待機させて次のアカウントに移ります。アカウントのタイムラインは約3,200件で止まります。
知っておきたいこと
auth_tokenの Cookie はパスワードと同じ働きをします。持っている人は誰でも、セッションが終わるまでそのアカウントとしてログインした状態になります。コード、リポジトリ、共有ノートブックには入れず、個人アカウントの Cookie は決してスクリプトに入れないでください。
2024年より前のライブラリの大半は、もう動きません。2026年11月2日時点で、メンテナンスされている2つはどちらも X アカウントを必要としました。
| ライブラリ | 最終更新 | 状態 |
|---|---|---|
| twscrape | 0.20.1、2026年8月25日 | メンテナンス中。ログイン済みの X アカウントで動作 |
| Scweet | 5.8.2、2026年10月22日 | メンテナンス中。auth_token の Cookie で動作 |
| twikit | 2.3.3、2025年2月7日 | 20か月リリースなし。未解決の issue が160件 |
| snscrape | 2023年6月22日 | Twitter モジュールは2023年6月30日から動作せず(新しいタブで開きます) |
| Twint | 2023年2月23日 | GitHub でアーカイブ済み |
twscrape
- 最終更新
- 0.20.1、2026年8月25日
- 状態
- メンテナンス中。ログイン済みの X アカウントで動作
Scweet
- 最終更新
- 5.8.2、2026年10月22日
- 状態
- メンテナンス中。
auth_tokenの Cookie で動作
twikit
- 最終更新
- 2.3.3、2025年2月7日
- 状態
- 20か月リリースなし。未解決の issue が160件
snscrape
- 最終更新
- 2023年6月22日
- 状態
- Twitter モジュールは2023年6月30日から動作せず(新しいタブで開きます)
Twint
- 最終更新
- 2023年2月23日
- 状態
- GitHub でアーカイブ済み
ホスト型のスクレイピングツール
ノーコードのスクレイピングサービスは、フォームの裏側で収集を代行し、結果ごとに課金します。ブロックや不具合の対応はサービス側の仕事になりますが、X の変更に対する修正は遅れがちです。各ツールを個別に取り上げたのがTwitter スクレイパーの比較です。
#公式 X API で投稿を読む
公式 X API は、公開投稿を前払い制の読み取りとして販売しています。料金ページ(新しいタブで開きます)によると、1投稿あたり$0.005、1ユーザーまたはフォロワーあたり$0.010で、従量課金の場合は月300万投稿の読み取りが上限です。
2026年11月22日からは、投稿に付随する投稿者プロフィールとメディアにも同じ料金が課金されます(X のお知らせ(新しいタブで開きます))。つまり、投稿を投稿者付きで読むと$0.015かかります。
-
開発者アプリを作成する。 X アカウントで console.x.com にサインインし、Developer Agreement に同意してアプリを作成し、Bearer トークンをコピーします。画面ごとの手順は、Twitter API キーの取得方法のガイドで説明しています。
-
クレジットを購入する。 読み取りはすべて前払い残高から差し引かれ、残高がなくなるとリクエストは失敗します。
-
最近の投稿を検索する。 最近の投稿の検索は過去7日間が対象で、1リクエストで最大100件です。2006年まで遡る全アーカイブ検索は、従量課金のアカウントで利用できます。
ターミナル curl -G "https://api.x.com/2/tweets/search/recent" \ -H "Authorization: Bearer $X_BEARER_TOKEN" \ --data-urlencode "query=from:XDevelopers -is:retweet" \ --data-urlencode "max_results=100"
これは X 自身の経路で、ここで挙げた中で投稿もできる唯一の手段です。1,000投稿あたり$5.00だと、検索結果100万件で$5,000かかり、300万の上限に達するとその月の読み取りは止まります。すべての料金は、X API の料金の解説にまとめています。
#Twitter のスクレイピングにかかる1,000投稿あたりの費用
1,000投稿あたりで見ると、公式 X API は$5.00、Sorsa API は検索なら$0.07から、ID 指定なら$0.014からです。スクレイピングの各手段に利用料はかかりませんが、その代わりに X アカウント、プロキシ、修復の工数を消費します。
公式 X API
$5,000
1M投稿の場合
1投稿あたり$0.005
Sorsa API
$70から
1M投稿の場合
検索で1,000件あたり$0.07から
投稿を毎日集めるなら Sorsa API を使います。検索結果100万件が$70からで、公式 X API の$5,000と比べて大幅に安く済みます。毎秒20リクエスト、つまり毎秒約400件の結果を取得でき、失う X アカウントもありません。
各手段を分ける基準は4つあります。1,000投稿あたりの料金、X アカウントを危険にさらすか、X のどこまで届くか、何が原因で壊れるかです。
| 手段 | 1,000投稿あたり | 危険にさらす X アカウント | 取得範囲 | 壊れるとき |
|---|---|---|---|---|
| Sorsa API | 検索で$0.07から、ID 指定で$0.014 | なし | 2006年までの検索、タイムライン、ID 指定の投稿、プロフィール、フォロワー、リプライ | レスポンススキーマは安定しており、コードはそのまま動く |
| 公式 X API | $5.00、投稿者付きだと最大$15.00 | 開発者アカウント | 検索、タイムライン、ルックアップ。月300万投稿まで | X が料金やルールを変えたとき |
| X アカウントで動くライブラリ | 利用料なし。アカウントとプロキシが必要 | プール内のすべてのアカウント | 検索、タイムライン、フォロワー | クエリ ID や機能フラグが変わったとき |
| ログアウト状態のブラウザ | 利用料なし | なし | 単独の投稿、プロフィールの最初の投稿 | ページが変わったとき、ブロックされたとき |
| ホスト型のスクレイピングツール | ツールごとに異なる | ツールによる | ツールのブラウザやアカウントが届く範囲 | ツールの修正が X の変更に遅れたとき |
Sorsa API
- 1,000投稿あたり
- 検索で$0.07から、ID 指定で$0.014
- 危険にさらす X アカウント
- なし
- 取得範囲
- 2006年までの検索、タイムライン、ID 指定の投稿、プロフィール、フォロワー、リプライ
- 壊れるとき
- レスポンススキーマは安定しており、コードはそのまま動く
公式 X API
- 1,000投稿あたり
- $5.00、投稿者付きだと最大$15.00
- 危険にさらす X アカウント
- 開発者アカウント
- 取得範囲
- 検索、タイムライン、ルックアップ。月300万投稿まで
- 壊れるとき
- X が料金やルールを変えたとき
X アカウントで動くライブラリ
- 1,000投稿あたり
- 利用料なし。アカウントとプロキシが必要
- 危険にさらす X アカウント
- プール内のすべてのアカウント
- 取得範囲
- 検索、タイムライン、フォロワー
- 壊れるとき
- クエリ ID や機能フラグが変わったとき
ログアウト状態のブラウザ
- 1,000投稿あたり
- 利用料なし
- 危険にさらす X アカウント
- なし
- 取得範囲
- 単独の投稿、プロフィールの最初の投稿
- 壊れるとき
- ページが変わったとき、ブロックされたとき
ホスト型のスクレイピングツール
- 1,000投稿あたり
- ツールごとに異なる
- 危険にさらす X アカウント
- ツールによる
- 取得範囲
- ツールのブラウザやアカウントが届く範囲
- 壊れるとき
- ツールの修正が X の変更に遅れたとき
5つの手段のうち、危険にさらす X アカウントなしで検索、タイムライン、フォロワーまで届くのは Sorsa API だけで、料金は1,000投稿あたり$0.07からです。
#Twitter のスクレイピングは合法か
はい、公開データであれば合法です。hiQ Labs 対 LinkedIn の訴訟で、第9巡回区控訴裁判所は2022年4月、公開プロフィールのスクレイピングはコンピューター詐欺・不正利用防止法(CFAA)にいう「権限のないアクセス」にはあたらない可能性が高いと判断しました。さらに2024年5月には、公開投稿のスクレイピングをめぐって X が Bright Data を訴えた訴訟を、連邦裁判所が棄却しています。
スクレイピングのプロジェクトを健全に保つ習慣は3つです。収集するのは公開データだけにして、非公開アカウントやプライベートメッセージは対象にしないこと。必要な分だけを、必要な期間だけ保持すること。そして投稿を再公開するときは、著作権が投稿者に残るため、投稿者を明記することです。
API を使えば、コードが x.com にサインインすることはないため、自分の X アカウントが危険にさらされることもありません。Sorsa API は X のログイン情報や Cookie を求めません。詳しくはサードパーティの Twitter API は合法かのガイドをご覧ください。
#最初の2,000投稿を今日取得する
2026年に X をスクレイピングするということは、ログインの壁、危険にさらされるアカウント、およそ10日ごとに変わるクエリ ID を抱えるということです。そのどれも抱えずに公開投稿を取得するなら Sorsa API を使います。キー1つで、検索は1リクエストあたり約20件が1,000件あたり$0.07から、ID 指定のツイートは1,000件あたり$0.014からです。100回分の無料リクエストで、最初の2,000投稿を取得できます。
#FAQ
ログインせずに Twitter をスクレイピングできますか
ほんの一部だけです。2026年11月2日の時点で、ログアウト状態の x.com から取得できたのは、本文とカウント付きの単独の投稿と、プロフィールの最初の9件の投稿でした。検索とフォロワー一覧はログインページにリダイレクトされました。これ以上のデータが必要なら、ログイン済みアカウント(そのアカウントが危険にさらされます)か、キー1つで公開投稿を返す API が必要です。
snscrape は2026年でも動きますか
動きません。snscrape の Twitter モジュールは、X がページをログイン必須にした2023年6月30日から動作しておらず、プロジェクトの最終リリースも2023年6月22日です。後継としてメンテナンスされている twscrape と Scweet は2026年8月と10月に新バージョンを出しましたが、検索、タイムライン、フォロワーの読み取りにはどちらもログイン済みの X アカウントが必要です。
Twitter のフォロワーをスクレイピングできますか
ログアウト状態では無理です。x.com はフォロワーとフォロー中の一覧をログインページに送ります。それを読み取るライブラリは、X がロックできる X アカウントで動作し、その X アカウントの Cookie を使って一覧を読み取ります。Sorsa API の GET /followers は、1リクエストで最大200件のフォロワーを返し、危険にさらす X アカウントはありません。料金は1,000件あたり$0.007からです。ループ全体の書き方は、Twitter のフォロワーをエクスポートのガイドで紹介しています。
Twitter を無料でスクレイピングする方法はありますか
無料で長く続く方法はありません。ブラウザやライブラリに利用料はかかりませんが、X アカウント、プロキシ、修復の時間を消費します。公式 X API に無料プランはありません。Sorsa API のアカウントには最初に100回分の無料リクエストが付きます。これは検索結果なら約2,000件、ID 指定のツイートなら最大10Kに相当し、カードは不要で有効期限もありません。
スクレイピングの代わりにどの API を使うべきですか
Twitter(X)API 兼スクレイピングツールである Sorsa API を使ってください。キー1つで、投稿、プロフィール、フォロワーを JSON で返します。料金は検索結果が1,000件あたり$0.07から、ID 指定のツイートが1,000件あたり$0.014からで、公式 X API は1,000投稿あたり$5.00です。開発者アカウントは不要で、X のログイン情報を求めることもなく、どのプランでも毎秒20リクエストで動作し、2006年まで遡って検索できます。
#検証の方法
2026年11月2日に、デスクトップブラウザでログアウト状態の x.com を開き、投稿、プロフィール、検索、フォロワー一覧のそれぞれで何が返るかを記録したうえで、同じ投稿とプロフィールをサーバー上のデフォルト設定のヘッドレスブラウザでも1回ずつ読み込みました。TwitterInternalAPIDocument トラッカーの2025年11月6日から2026年10月31日までの全112件のスナップショットを取得し、オペレーションごとにクエリ ID の変更回数を数えました。X の API の料金ページと検索ドキュメント、そして twscrape、Scweet、twikit、snscrape の README とリリースページを確認しています。ここで紹介した Sorsa API のエンドポイントとフィールドはすべて、公開中の API リファレンスと一致しています。公式 X API のサンプルは実行していません。
情報源
- X API pricing(新しいタブで開きます)
- X API search introduction(新しいタブで開きます)
- X Developer Community: PPU expansions update, October 23, 2026(新しいタブで開きます)
- TwitterInternalAPIDocument, the query ID tracker(新しいタブで開きます)
- twscrape README(新しいタブで開きます)
- Scweet README(新しいタブで開きます)
- snscrape issue 996: All Twitter scrapes are failing(新しいタブで開きます)
- Nitter README(新しいタブで開きます)
- Sorsa API reference: Search Tweets(新しいタブで開きます)