OAuth不要のn8nでTwitter API
n8nでX(Twitter)のデータを読むには、HTTP Requestノードからキーヘッダーを付けてXデータAPIを呼び出します。組み込みのXノードは投稿向けで、唯一の検索は直近7日間が対象、投稿1件$0.005です。
要点: n8nのXノードは公式X APIで動きます。OAuth2の開発者アプリが必要で、投稿の読み取りは1件$0.005、タイムライン、メンション、フォロワーの操作はありません。n8nでXのデータを読むなら、HTTP RequestノードでSorsa APIを使います。ApiKey ヘッダー1つで、1リクエストあたり20ツイート、1,000件あたり$0.07から、始めるときは100回分の無料リクエストが付きます。
- エンドポイント
POST /search-tweets- 1ページの件数
- 1リクエストあたり20ツイート
- 料金
- 1,000ツイートあたり$0.07から
#n8nのXノードで読み取れるもの
n8nのXノードで読み取れるのは2つだけです。1件のユーザープロフィールと、直近7日間の投稿の検索です。残りの6つの操作はXへの書き込みです。この一覧はn8nのXノードのドキュメント(新しいタブで開きます)に基づいており、GitHubにあるノードのソースでは、検索がXの /tweets/search/recent エンドポイントを呼び出していて、これは1週間に限られます。
| リソース | 操作 | Xデータの読み取り |
|---|---|---|
| Tweet | 作成または返信、削除、いいね、リツイート | 不可 |
| Tweet | 検索 | 直近7日間の投稿 |
| User | ユーザーの取得 | 1回の呼び出しで1プロフィール |
| Direct message | 作成 | 不可 |
| List | メンバーの追加 | 不可 |
Tweet
- 操作
- 作成または返信、削除、いいね、リツイート
- Xデータの読み取り
- 不可
Tweet
- 操作
- 検索
- Xデータの読み取り
- 直近7日間の投稿
User
- 操作
- ユーザーの取得
- Xデータの読み取り
- 1回の呼び出しで1プロフィール
Direct message
- 操作
- 作成
- Xデータの読み取り
- 不可
List
- 操作
- メンバーの追加
- Xデータの読み取り
- 不可
アカウントのタイムライン、メンション、フォロワー、XのListの投稿を返すものは、このノードにはありません。またn8nには、新しい投稿で起動するトリガーノードもありません。
ノードを接続するだけでも、Xの開発者アカウントとアプリを作り、OAuth2の権限とコールバックURLを設定し、Client IDとSecretをn8nに貼り付ける必要があります。n8nのXの認証情報のページ(新しいタブで開きます)にそのとおりに書かれています。そのうえで、すべての読み取りがXの前払いクレジットで課金されます。Xの料金ページ(新しいタブで開きます)によれば、投稿は1件$0.005、ユーザーは1人$0.010で、従量課金は月間300万件の投稿読み取りが上限です。2026年11月22日からは、投稿と一緒に返される投稿者プロフィールに$0.010が加わるため、投稿者つきの投稿は$0.015になります(Xの10月23日の通知(新しいタブで開きます))。
#Sorsa APIでn8nからXのデータを読む
Twitter(X)API兼スクレイピングツールであるSorsa APIは、ヘッダー1つでn8nのHTTP Requestノードにつながるので、Xのデータを読むのに必要なのは認証情報1つとノード1つです。n8nでツイート、メンション、フォロワーを読むなら、Sorsa APIを使ってください。1リクエストで20ツイートまたは200フォロワー、2006年までさかのぼる検索、全プラン毎秒20リクエストで、開発者アカウントもOAuthアプリも要りません。
以下の手順ではキーワード検索を作ります。ほかの作業はすべて、同じ認証情報と同じノードを、エンドポイントだけ変えて使います。
-
APIキーを取得する。 登録して、ダッシュボードからキーをコピーします。最初の100リクエストは無料で、カードは不要、有効期限もありません。
-
Header Auth認証情報を作成する。 n8nでCredentialsを開き、新しいHeader Auth認証情報を作成して、Nameを
ApiKey、Valueをキーに設定します。こうしておけば、エクスポートや共有するどのワークフローにもキーは含まれません。 -
HTTP Requestノードを追加する。 MethodをPOST、URLを
https://api.sorsa.io/v3/search-tweetsに設定します。AuthenticationではGeneric Credential Typeを選び、続けてHeader Auth、手順2の認証情報を選びます。 -
検索をJSONで送る。 Send Bodyをオンにし、Body Content TypeはJSONのままにして、2つのボディパラメーターを追加します。
queryにはXの検索(演算子を含む)を、orderにはlatestかpopularを指定します。近道として、ノードでImport cURLを選んで下のコマンドを貼り付け、ヘッダー欄のキーを自分の認証情報に移します。Import cURL curl -X POST "https://api.sorsa.io/v3/search-tweets" \ -H "ApiKey: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "n8n lang:en -filter:retweets", "order": "latest"}' -
投稿をアイテムに分割する。 Split Outノードを追加し、Fields To Split Outを
tweetsに設定します。すると各投稿が1つのアイテムとしてワークフローを流れ、Filter、IFノード、Googleスプレッドシート、Slackに渡せる状態になります。Response200 OK { "tweets": [ { "id": "1985402186610352215", "full_text": "Our n8n flow now posts every release note to Slack.", "created_at": "2026-11-02T09:14:07Z", "lang": "en", "likes_count": 42, "retweet_count": 6, "reply_count": 3, "view_count": 2810, "user": { "id": "1592041833471827968", "username": "nightly_build_notes", "display_name": "Nightly Build Notes", "followers_count": 1840 } } ], "next_cursor": "DAADDAABCgABG4V2Yz9W" }
各投稿は投稿者の完全なプロフィールを持っているので、Slackのメッセージやシートの行に、2回目の呼び出しなしでハンドルとフォロワー数を表示できます。401はキーが誤っていること、403はヘッダーがない、またはアカウントのリクエストを使い切ったことを意味します。
#ページネーション:n8nでnext_cursorをたどる
HTTP Requestノードは、すべてのページを自分で取得できます。各レスポンスの next_cursor を次のリクエストで送り、カーソルが空で返ってきたら止まります。カーソルは、次の結果ページを指すトークンです。検索、タイムライン、メンションは1ページあたり約20投稿を返し、フォロワーは1ページ200件です。
HTTP RequestノードのOptionsを開き、Paginationを追加します。下のパネルには、Sorsa APIのカーソルを回す5つの設定が入っています。/followers などのエンドポイント用にGETに切り替えて、各式をそのままn8nにコピーしてください。
- Pagination Mode
- Update a Parameter in Each Request
- Type
- Body
- Name
next_cursor- Value
{{ $response.body.next_cursor }}- Pagination Complete When
- Other
- Complete Expression
{{ !$response.body.next_cursor }}- Limit Pages Fetched
- On, Max Pages 50
- Interval Between Requests
- 50(20分の1秒)
/search-tweets、/user-tweets、/mentionsなどのPOSTエンドポイントは、カーソルをJSONボディで受け取ります。
Max Pagesで、1回の実行で使える量に上限をかけられます。検索50ページで約1,000ポストです。
知っておきたいこと
Pagination Complete Whenは既定のままにしないでください。"Response Is Empty" はJSONオブジェクトでは発火しないため、ノードは最後のページをリクエストし続け、n8nが「The returned response was identical 5x」で止めるまで続きます。その呼び出しはすべてリクエストとして数えられます。上のComplete Expressionなら、カーソルのない最初のページで止まります。
各ページは、自身の tweets または users 配列を持つ1つのアイテムとして、ノードから出てきます。そのすぐ後ろにSplit Outノードを置くと、すべてのページが投稿またはプロフィールの1つの平らなリストになります。
#n8nのワークフローごとに使うエンドポイント
n8nのどの作業も、Sorsa APIのエンドポイント1つに対応し、すべて同じHeader Auth認証情報で動きます。次の表は、n8nのワークフローで最もよく使うエンドポイントです。全45件の一覧はSorsa APIのエンドポイントにあります。
| n8nでの作業 | エンドポイント | 送る内容 | 1リクエストあたり |
|---|---|---|---|
| キーワードまたはハッシュタグの検索 | POST /search-tweets(新しいタブで開きます) | query、order | 約20投稿 |
| 1アカウントの投稿 | POST /user-tweets(新しいタブで開きます) | username、type | 約20投稿 |
| ブランドのメンション | POST /mentions(新しいタブで開きます) | query(ハンドル)、min_likes、since_date | 約20投稿 |
| フォロワーのエクスポート | GET /followers(新しいタブで開きます) | username | 最大200フォロワー |
| XのListのフィード | GET /list-tweets(新しいタブで開きます) | list_id | 約20投稿 |
| ハンドルの列を補完 | GET /info-batch(新しいタブで開きます) | usernames(繰り返し) | 最大100プロフィール |
キーワードまたはハッシュタグの検索
- 送る内容
query、order- 1リクエストあたり
- 約20投稿
1アカウントの投稿
- 送る内容
username、type- 1リクエストあたり
- 約20投稿
ブランドのメンション
- エンドポイント
- POST /mentions(新しいタブで開きます)
- 送る内容
query(ハンドル)、min_likes、since_date- 1リクエストあたり
- 約20投稿
フォロワーのエクスポート
- エンドポイント
- GET /followers(新しいタブで開きます)
- 送る内容
username- 1リクエストあたり
- 最大200フォロワー
XのListのフィード
- エンドポイント
- GET /list-tweets(新しいタブで開きます)
- 送る内容
list_id- 1リクエストあたり
- 約20投稿
ハンドルの列を補完
- エンドポイント
- GET /info-batch(新しいタブで開きます)
- 送る内容
usernames(繰り返し)- 1リクエストあたり
- 最大100プロフィール
/info-batch では、usernames を配列で送り、ノードのQuery ParametersオプションにあるArray FormatをNo Bracketsに設定します。ハンドルごとにパラメーターが1回ずつ繰り返されます。
下のビルダーは、作業に合わせてHTTP Requestノードを作ります。作業を選び、クエリまたはハンドルとページ数を入力して、JSONをコピーし、n8nのキャンバスにCtrl+VまたはCmd+Vで貼り付けてください。
- HTTP Requestノード
- POST /search-tweets
- 送信内容
- query, order(ボディ)
- 1回の実行あたりのリクエスト数
- 5
- 最大返却数
- 100投稿
{
"nodes": [
{
"name": "Sorsa API: search-tweets",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
0,
0
],
"parameters": {
"method": "POST",
"url": "https://api.sorsa.io/v3/search-tweets",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "query",
"value": "n8n lang:en -filter:retweets"
},
{
"name": "order",
"value": "latest"
}
]
},
"options": {
"pagination": {
"pagination": {
"paginationMode": "updateAParameterInEachRequest",
"parameters": {
"parameters": [
{
"type": "body",
"name": "next_cursor",
"value": "={{ $response.body.next_cursor }}"
}
]
},
"paginationCompleteWhen": "other",
"completeExpression": "={{ !$response.body.next_cursor }}",
"limitPagesFetched": true,
"maxRequests": 5,
"requestInterval": 50
}
}
}
}
},
{
"name": "One item per post",
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
240,
0
],
"parameters": {
"fieldToSplitOut": "tweets",
"options": {}
}
}
],
"connections": {
"Sorsa API: search-tweets": {
"main": [
[
{
"node": "One item per post",
"type": "main",
"index": 0
}
]
]
}
}
}
Ctrl+VまたはCmd+Vでn8nのキャンバスに貼り付け、HTTP RequestノードでHeader Auth認証情報を選択してください。
ノードにはページネーションが設定済みです。貼り付けた後にHeader Auth認証情報を選んでください。
#レシピ:アカウントの新しい投稿をSlackへ
n8nのワークフローは、一連のアカウントの新しいツイートをすべてSlackに投稿できます。コード不要の5つのノード、スケジュール、検索リクエスト1つ、Split Out、Remove Duplicates、Slackノードです。n8nには新しい投稿のトリガーがないので、ワークフローが数分おきに最新の投稿を取得し、すでに見たものを捨てます。
-
スケジュールを設定する。 5分ごとのSchedule Trigger。
-
最新の投稿を取得する。
POST /search-tweetsで、各アカウントのfrom:をORでつなぎ、orderをlatestに設定します。1リクエストでクエリ内のすべてのアカウントをカバーできます。数百のアカウントなら、公開のXのListに入れて、そのlist_idでGET /list-tweetsを呼びます。1リクエストで、最大5,000アカウントのListのフィードを読めます。 -
投稿を分割する。
tweetsに対するSplit Out。 -
見た投稿を捨てる。 Remove Duplicatesノードで、OperationをRemove Items Processed in Previous Executions、Keep Items WhereをValue Is Newに設定します。Value to Dedupe Onに、投稿の
idフィールドをドラッグします。投稿IDは一意なので、新しい投稿だけが通ります。 -
メッセージを送る。 Slackノード、またはGoogleスプレッドシートやメールを接続し、ワークフローが作る
textフィールドを使います。
上のノードビルダーは、このワークフロー全体を作ります。New posts alert を選び、監視するアカウントを入力して、JSONをコピーし、空のキャンバスに貼り付けてください。手順1〜4とメッセージのテキストが入っています。HTTP RequestノードでHeader Auth認証情報を選び、最後にSlackノードを追加して、ワークフローを公開します。
最初の実行では、Remove Duplicatesがまだ何も見ていないため、最新の20投稿が通ります。2回目の実行からは、新しい投稿だけがSlackに届きます。5分間隔のスケジュールは、30日の月に8,640回実行され、1回の実行につき1リクエストなので、Starterプランの1万リクエストに収まります。数秒おきのポーリング、Listとキーワードアラートの大規模運用は、リアルタイムTwitter監視のガイドでさらに詳しく解説しています。
#レシピ:フォロワーをGoogleスプレッドシートにエクスポート
n8nでのフォロワーのエクスポートは、クエリのページネーションを使った GET /followers のHTTP Requestノード1つ、users に対するSplit Outノード、行を追加するGoogleスプレッドシートのノードでできます。1リクエストで最大200件のフォロワープロフィールが返るので、フォロワー5万人のアカウントなら250リクエストで、1回の実行に収まります。
-
手動で開始する。 Manual Trigger。完全なリストの取得は1回限りの作業だからです。
-
フォロワーをリクエストする。 同じベースURLの
/followersに、MethodをGETとしたHTTP Requestノードを置き、Send Query Parametersをオンにして、usernameに対象のアカウントを設定します。上のようにページネーションをオンにし、TypeをQueryにして、Max Pagesをフォロワー数を200で割った値に増やします。 -
プロフィールを分割する。
usersに対するSplit Out。 -
シートに追加する。 Append RowのGoogleスプレッドシートのノードで、
id、username、display_name、followers_count、location、created_atを列にマッピングします。
1つのワークフローで多数のアカウントをエクスポートする場合、HTTP Requestノードは入ってくるアイテムごとに1回実行されます。BatchingオプションをバッチあたりのItems 20、Batch Intervalを1,000(1秒)に設定すると、n8nは毎秒20リクエストに収まります。それでもバーストで429に当たる場合は、ノードの設定でRetry On Failをオンにします。非常に大きなリスト、ファイル、Excelの癖についての完全な方法は、Twitterフォロワーのエクスポートのガイドにあります。
#n8nでXのデータを読む費用
n8nでSorsa API経由で投稿を読む費用は、1,000ツイートあたり$0.07からです。Xノードが使う公式X APIは、1,000投稿あたり$5.00です。課金は項目ごとではなくリクエストごとで、20投稿の検索ページが1リクエストになり、失敗したリクエストに課金されることはありません。
公式X API
$5,000
投稿100万件の場合
1投稿$0.005
Sorsa API
$70から
投稿100万件の場合
1,000件あたり$0.07から
71分の1のコスト
差が最も大きいのはフォロワーです。Sorsa APIは1,000件あたり$0.007からで、公式X APIは$10.00です。Sorsa APIは1リクエストで200件を返しますが、Xは1件ずつ課金するからです。
| n8nでのデータ | Sorsa API(1,000件あたり) | 公式X API(1,000件あたり) |
|---|---|---|
| 検索、タイムライン、メンション、Listの投稿 | $0.07から | $5.00 |
| 投稿者つきの投稿(2026年11月22日から) | $0.07から | $15.00 |
| フォロワー | $0.007から | $10.00 |
| 100件のバッチで調べるプロフィール | $0.014から | $10.00 |
検索、タイムライン、メンション、Listの投稿
- Sorsa API(1,000件あたり)
- $0.07から
- 公式X API(1,000件あたり)
- $5.00
投稿者つきの投稿(2026年11月22日から)
- Sorsa API(1,000件あたり)
- $0.07から
- 公式X API(1,000件あたり)
- $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のデータソースをn8nにつなぐ前に確認する5つのポイントの1つで、Sorsa APIはそのすべてを数字で満たしています。
- セットアップ: Header Auth認証情報のヘッダー1つ。開発者アプリ、OAuth2、コールバックURLは不要です。
- 速度: 無料アカウントを含む全プラン毎秒20リクエスト。
- カバー範囲: 2006年までさかのぼる検索、タイムライン、メンション、フォロワー、List。Xノードの7日間の検索とは対照的です。
- アカウントの安全性: Sorsa APIがXのログイン情報やCookieを求めることはなく、あなたのXアカウントは危険にさらされません。
- 信頼性: 2022年から本番で稼働し、累計60億リクエスト以上を処理。Xに変更があってもSorsa API側で修正するため、ワークフローのフィールドは変わりません。
#n8nのAI AgentにライブのXデータを渡す
n8nのAI Agentは、Sorsa APIをツールとして接続すると、自分でXを検索できます。HTTP Requestノードをエージェントのツールとして接続し、POST /search-tweets を指定してHeader Auth認証情報を設定し、query のボディ値に、$fromAI('query', 'An X search query with operators', 'string') を呼び出す式を入れます。すると、モデルが検索を自分で書き、n8nが送信します。
ツールのOptimize Responseオプションで、full_text、user.username、created_at、likes_count だけを残すと、モデルはプロフィール全体ではなく投稿を読むので、トークンの消費を抑えられます。パラメーターについては、n8nの$fromAI()のガイド(新しいタブで開きます)が詳しいです。ClaudeやCursorなど、n8nの外のエージェントについては、AIエージェント向けTwitter APIを参照してください。
#n8nで最初のXワークフローを作る
n8nでXのデータを読むには、キーヘッダー付きのHTTP Requestノード1つ、適切なエンドポイント、空になるまでページを送るカーソルがあれば足ります。Sorsa APIで作ってください。OAuthアプリの代わりに ApiKey ヘッダー1つ、1リクエストで20投稿または200フォロワー、1,000ツイートあたり$0.07から、そして100回分の無料リクエストで、最初の2,000投稿をまかなえます。
同じノードのパターンはコードでも使えます。PythonでのTwitter APIのガイドでは、requests で示しています。
#よくある質問
n8nに、新しいツイートのトリガーはありますか?
ありません。n8nには、誰かがXに投稿したときに起動するトリガーノードがなく、Sorsa APIにもWebhookはないので、新しい投稿はポーリングで見つけます。数分おきのSchedule Triggerでワークフローを始め、最新の投稿をリクエストして、投稿IDをキーとするRemove Duplicatesノードに通せば、各投稿は1回だけ発火します。
n8nでは、どのTwitter APIを使えばよいですか?
n8nでXのデータを読むには、Sorsa APIを使ってください。標準のHTTP Requestノードで ApiKey ヘッダー1つ、OAuthアプリなしで動き、1リクエストで20投稿または200フォロワーを、1,000ツイートあたり$0.07から返します(公式X APIは1,000投稿あたり$5.00)。全プラン毎秒20リクエストです。Xノードは投稿用にだけ残してください。
開発者アカウントなしで、n8nからTwitterを読めますか?
読めます。Sorsa APIに必要なのは自分のAPIキーだけです。1つのREST APIでクリーンなJSONとして公開Xデータを返し、Xのログイン情報を求めることはありません。コミュニティのスクレイパーノードは、ログイン済みのXセッションやCookieで動くので、そのXアカウントがロックされるおそれがあります。Sorsa APIが返すのは公開データのみで、その利用は、法律とXの規約に対するご自身の責任のもとにあります。
n8nからSorsa API経由でツイートを投稿できますか?
できません。Sorsa APIは設計上、読み取り専用で、投稿、いいね、フォロー、メッセージ送信は行わないため、どのXアカウントにも害を与えません。投稿にはOAuth2アプリを使うn8nのXノードを残し、読み取りにはHTTP RequestノードでSorsa APIを使ってください。2つのノードは、1つのワークフローに並べて置けます。
n8nでは、100回分の無料リクエストでツイートを何件取得できますか?
検索、タイムライン、メンションなら1リクエスト20件で約2,000投稿、フォロワーなら1リクエスト200件で2万フォロワーです。100回分の無料リクエストは、Sorsa APIのすべての新規アカウントに付き、クレジットカード不要で有効期限もないので、プランを選ぶ前に、最初のワークフローを最後まで動かせます。
#検証の方法
2026年11月2日に、n8nのドキュメントとGitHubのノードのソースでXノードの操作を、n8nのドキュメントとソースでHTTP Requestノードのページネーション、バッチ処理、Header Authのオプションを読みました。同じ日にdocs.x.comでXの料金を確認し、Sorsa APIのすべてのエンドポイント、フィールド、ページサイズを実際のAPIリファレンスと照合しました。今回はAPIキーがなかったので、リクエスト、レスポンス、ワークフローは、実行したものではなく、それらのリファレンスに基づいて書いたものです。