本文へスキップ

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日の通知(新しいタブで開きます))。

Xノード n8n組み込み OAuth2の開発者アプリ ID、秘密鍵、コールバック 公式X API 前払いクレジット Xへの書き込み 投稿、返信、いいね、リツイート、DM 検索: 過去7日間 タイムラインもフォロワーも不可 1投稿$0.005 読み取った投稿すべてに課金 HTTP Requestノード n8n組み込み ApiKeyヘッダー Header Auth認証情報1つ Sorsa API 毎秒20リクエスト Xのデータを読み取り タイムライン、メンション、リスト 2006年まで遡って検索 フォロワーは1リクエスト200件 $0.07から 1,000ツイートあたり
Xノードは投稿用に残しましょう。Xデータの読み取りは、ヘッダー1つのHTTP Requestノードで行います。

#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アプリも要りません。

以下の手順ではキーワード検索を作ります。ほかの作業はすべて、同じ認証情報と同じノードを、エンドポイントだけ変えて使います。

  1. APIキーを取得する。 登録して、ダッシュボードからキーをコピーします。最初の100リクエストは無料で、カードは不要、有効期限もありません。

  2. Header Auth認証情報を作成する。 n8nでCredentialsを開き、新しいHeader Auth認証情報を作成して、Nameを ApiKey、Valueをキーに設定します。こうしておけば、エクスポートや共有するどのワークフローにもキーは含まれません。

  3. HTTP Requestノードを追加する。 MethodをPOST、URLを https://api.sorsa.io/v3/search-tweets に設定します。AuthenticationではGeneric Credential Typeを選び、続けてHeader Auth、手順2の認証情報を選びます。

  4. 検索を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"}'
    
  5. 投稿をアイテムに分割する。 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にコピーしてください。

HTTP Request node: Options, Pagination
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ポストです。

ページ1 送信: カーソルなし 20件の投稿を取得 next_cursor: "DAAD...A1" ページ2 送信: "DAAD...A1" 20件の投稿を取得 next_cursor: "DAAD...B7" ページ3~49 受け取った カーソルをそのまま送信 次の 20件と新しい カーソルを取得 最終ページ 残りの投稿を取得 next_cursor: null ループ停止 Complete Expression、毎ページ後に判定 {{ !$response.body.next_cursor }} リクエストごとのnext_cursor値 {{ $response.body.next_cursor }}
各レスポンスが、次のリクエスト用のカーソルをノードに渡します。カーソルが空になるとループが終わります。

知っておきたいこと

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プロフィール

/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投稿
ワークフローJSON: HTTP Request + Split Out
{
  "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には新しい投稿のトリガーがないので、ワークフローが数分おきに最新の投稿を取得し、すでに見たものを捨てます。

  1. スケジュールを設定する。 5分ごとのSchedule Trigger。

  2. 最新の投稿を取得する。 POST /search-tweets で、各アカウントの from: を OR でつなぎ、order を latest に設定します。1リクエストでクエリ内のすべてのアカウントをカバーできます。数百のアカウントなら、公開のXのListに入れて、その list_id で GET /list-tweets を呼びます。1リクエストで、最大5,000アカウントのListのフィードを読めます。

  3. 投稿を分割する。 tweets に対するSplit Out。

  4. 見た投稿を捨てる。 Remove Duplicatesノードで、OperationをRemove Items Processed in Previous Executions、Keep Items WhereをValue Is Newに設定します。Value to Dedupe Onに、投稿の id フィールドをドラッグします。投稿IDは一意なので、新しい投稿だけが通ります。

  5. メッセージを送る。 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回の実行に収まります。

  1. 手動で開始する。 Manual Trigger。完全なリストの取得は1回限りの作業だからです。

  2. フォロワーをリクエストする。 同じベースURLの /followers に、MethodをGETとしたHTTP Requestノードを置き、Send Query Parametersをオンにして、username に対象のアカウントを設定します。上のようにページネーションをオンにし、TypeをQueryにして、Max Pagesをフォロワー数を200で割った値に増やします。

  3. プロフィールを分割する。 users に対するSplit Out。

  4. シートに追加する。 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キーがなかったので、リクエスト、レスポンス、ワークフローは、実行したものではなく、それらのリファレンスに基づいて書いたものです。

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

変更点
  • 全面的に書き直しました。n8nのノードのオプションとXの料金の確認、next_cursorによるページネーション、n8nノードビルダー、インポートできるワークフロー、フォロワーとAI Agentのレシピ。
  • 初回公開。