著者:Sorsa Editorial

2026年6月13日公開。2026年7月3日更新。料金は、2026年4月20日の更新後の公式 X API の従量課金レートと、Sorsa の現行のリクエスト単位プランを反映しており、2026年7月に確認済みです。

2026年7月3日更新:X API と Sorsa のコストの数値を現行のリクエスト単位モデルに刷新し、Sorsa の料金を1,000ツイートあたりで述べ直し、100回分の無料リクエストの開始オファーを追加しました。

要点: Twitter(X)データを Google スプレッドシートにエクスポートする方法は4つあります。ノーコードのコネクタ(IFTTT、Make)、Sheets の API コネクタ・アドオン、ローコードのワークフロー(n8n)、または時間ベースのトリガーで動く Google Apps Script です。ノーコード以外の各経路は API キーを必要とし、ページネーション、スケジューリング、重複排除は自分で処理します。

難しいのは、たいていスプレッドシートではありません。それに供給するデータソースです。Twitter/X の代替 API である Sorsa API は、公開ツイート、プロフィール、フォロワーリストを1つのヘッダーの背後でプレーンな JSON として返すため、Sheets へのエクスポートは数行のコードで済みます。課金はフラットで、返るツイートやプロフィールの数にかかわらず1回の呼び出しは1リクエストとして数えられ、作者プロフィールはすべてのツイートの中に無料で含まれます。このフラットなモデルこそが、Sorsa がツイートをバッチ基準で1,000あたり$0.02から、プロフィールを Proプランで1,000あたり$0.01から読める理由です。一方、公式 X API は1,000投稿の読み取りに$5.00を課金します(2026年4月レート、2026年7月確認)。スケジュールされたジョブを枯渇させるツイート単位のメーターはなく、制限はすべてのプランで一律の毎秒20リクエスト、そして1回限りの100回分の無料リクエストで、支払い前にエクスポート全体を構築・テストでき、クレジットカードは不要です。

目次

Twitterデータを Google スプレッドシートにどうエクスポートする? {#how-do-you-export-twitter-data-to-google-sheets}

Twitter データを Google スプレッドシートにエクスポートするとは、ツイート、プロフィール、またはフォロワーリストを API から取得し、それらを行として書き込むことを意味します。4つの経路があらゆるケースをカバーします。自分のアカウントに対する単純なアクション向けのノーコードのコネクタ、シートの中から API を呼ぶ Sheets アドオン、ローコードのワークフローツール、またはカスタムスクリプトです。適切なものは、データ量、スキーマの制御、そして自分の技術レベルによって決まります。

各経路は同じ考え方の上に成り立っています。何かがエンドポイントを呼び、JSON を受け取り、レコードごとに1行を追記します。異なるのは制御です。ノーコードのアプレットはリクエストを隠し、固定の列を与えます。スクリプトはレスポンス全体を露出させるため、スキーマ、スケジュール、そして重複の扱い方を自分で決められます。

選ぶ前に、1つの区別が重要です。自分のアカウントに紐づくデータ(自分の投稿、自分のフォロワー)の取得は、ほぼどこでも簡単です。任意のキーワード、メンション、または他のアカウントを大量に取得するには、検索とタイムラインのデータを直接返す API が必要です。ノーコードツールに組み込まれた公式のプラットフォームコネクタは、2023年の API 変更後に大きく制限されたためです。

どのエクスポート方法を使うべき? {#which-export-method-should-you-use}

カスタムスキーマを伴う本番のエクスポートには Apps Script、多くのコードなしでのスケジュールされたインポートにはアドオンか n8n、そして自分のアカウントに対する単純なアクションにのみノーコードのコネクタを使います。セットアップ時間は、ノーコードの10分未満から、完全な Apps Script の数時間までの幅があり、信頼できる重複排除と正確な列の制御を与えるのは、スクリプトによる経路だけです。

方法セットアップ時間スキルスケジューリング重複排除最適な用途
ノーコード(IFTTT、Make)10分未満不要限定的なし自分のアカウント、単純なアクション
Sheets API コネクタ・アドオン15〜30分あり手動コードを書かない API アクセス
n8n ワークフロー30〜60分低〜中ありデータストア併用ビジュアルなパイプライン、セルフホスト
Google Apps Script1〜2時間あり完全な制御カスタムスキーマ、本番のエクスポート

トレードオフは、制御と手間のあいだにあります。固定された列のセットとおおよそのタイミングでよければ、コネクタやアドオンが半日を節約します。下流のレポートが正確なスキーマに依存する、あるいは重複が数値を壊すなら、スクリプトによる経路は追加のセットアップに値します。

Google Apps Script でツイートを Sheets に取り込む {#pull-tweets-into-sheets-with-google-apps-script}

Google Apps Script は最も柔軟な経路です。Google のインフラの中で動く JavaScript 関数で、API を呼び、行を書き込み、自動で走るよう時間ベースのトリガーに紐づけられます。スキーマ、重複排除、エラー処理、ロギングに対する完全な制御を与える唯一の選択肢であり、サードパーティのコネクタを必要としません。

以下の例は、検索クエリのツイートを取得し、新しいものをタブに追記します。これは Sorsa の ツイート検索エンドポイント を呼びます。このエンドポイントは、クエリと popular または latest の並び順を受け付け、作者プロフィールを添えて1ページあたり最大20件のツイートを返します。次の手順に従ってください。

  1. Google スプレッドシートに Tweets という名前のタブを作成します。
  2. 拡張機能メニューを開き、Apps Script を選びます。
  3. プロジェクトの設定で、自分のキーを持つ SORSA_API_KEY という名前のスクリプトプロパティを追加します。
  4. 以下の関数を貼り付け、検索クエリを設定します。
  5. 関数を一度実行し、認可のプロンプトを承認します。
  6. トリガーを開き、時間主導のトリガーを追加し、実行間隔を選びます。
javascript
function exportTweetsToSheet() {
  var apiKey = PropertiesService.getScriptProperties().getProperty('SORSA_API_KEY');
  var query = 'your search query here';

  var response = UrlFetchApp.fetch('https://api.sorsa.io/v3/search-tweets', {
    method: 'post',
    contentType: 'application/json',
    headers: { 'ApiKey': apiKey },
    payload: JSON.stringify({ query: query, order: 'latest' }),
    muteHttpExceptions: true
  });

  var status = response.getResponseCode();
  if (status === 401) { Logger.log('Unauthorized: check the ApiKey value'); return; }
  if (status === 429) { Logger.log('Rate limited: wait one second, then retry'); return; }
  if (status !== 200) { Logger.log('Unexpected status: ' + status); return; }

  var tweets = (JSON.parse(response.getContentText()).tweets) || [];
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tweets');

  // Keep the ID column as text so 19-digit IDs do not lose precision
  sheet.getRange('A:A').setNumberFormat('@');

  if (sheet.getLastRow() === 0) {
    sheet.appendRow(['tweet_id', 'created_at', 'username', 'full_text',
                     'likes_count', 'retweet_count', 'reply_count']);
  }

  var lastRow = sheet.getLastRow();
  var seen = lastRow > 1
    ? sheet.getRange(2, 1, lastRow - 1, 1).getValues().flat().map(String)
    : [];

  var added = 0;
  tweets.forEach(function (t) {
    var id = String(t.id || '');
    if (!id || seen.indexOf(id) !== -1) return;
    var user = t.user || {};
    sheet.appendRow([id, t.created_at || '', user.username || '', t.full_text || '',
                     t.likes_count || 0, t.retweet_count || 0, t.reply_count || 0]);
    added++;
  });

  Logger.log('Done. Added ' + added + ' new tweets.');
}

実務的な注意が2点。キーはスクリプトプロパティに保持し、決して関数本体にハードコードしないことで、共有されるスクリプト履歴の外に保ちます。そして構文に不慣れなら、まずクエリを視覚的に組み立てます。ビジュアルクエリビルダー は、from:since:until: のような高度な検索コマンドを、貼り付けられるテスト済みの文字列に変えます。

1ページを超えて収集するには、レスポンスから next_cursor フィールドを読み、null が返るまでそれを本文に入れて再度呼びます。仕組みはページネーションに対応したエンドポイント全体で同じです。カーソルページネーションのリファレンス がそのループを示します。ツイートではなくフォロワーリストをエクスポートするには、ユーザー名を付けてフォロワーエンドポイントを呼びます。各ページは最大200プロフィールを返すため、大きな フォロワーリストのエクスポート でも数回のリクエストに収まります。

ノーコードとローコードの経路 {#no-code-and-low-code-routes}

ノーコードとローコードのツールは、制御を速度と引き換えにします。IFTTT と Make は X を Google スプレッドシートに数分で接続し、自分のアカウントに紐づく単純なアクションに向いています。n8n は本格的なロジックを持つ1段上に位置します。Sheets アドオンは、シートの中から直接 API を呼びます。いずれも、スクリプトほどきれいには重複排除やカスタムスキーマを扱いません。

純粋なノーコードの経路の正直な限界はこうです。2023年のプラットフォーム変更後、これらのツールに組み込まれた X コネクタは、任意の検索結果をデータストアに読み込むことではなく、自分のアカウントと投稿に向いています。自分の投稿を記録したり、自分の活動に反応したりするには、うまく機能します。キーワード、メンション、または競合を大量にモニタリングするには、アドオンやスクリプトを通じて供給される、検索とタイムラインの結果を返すデータソースが欲しくなります。

n8n は最も強力な中間点です。ワークフローを視覚的に構築しつつ、分岐、変換、ページネーションのループ、そしてスケジュールトリガーを保てます。典型的な形は、スケジュールトリガー、検索エンドポイントを呼ぶ HTTP Request ノード、レスポンス配列を項目に分割するノード、そして各行を追記する Google Sheets ノードです。n8n は状態を保持できるため、スクリプトと同じやり方で重複排除のステップを加えられます。

API コネクタのような Sheets アドオンでは、シートの中で URL、ヘッダー、パラメータを設定し、スケジュールで更新できます。コードを書かずにスケジュールされたインポートが欲しいときによく合います。API キーはログやブラウザ履歴に残らないよう、URL ではなくリクエストヘッダーに入れて送ります。

エクスポートにはどの列を含めるべき? {#what-columns-should-your-export-have}

きれいなエクスポートは、安定した名前付きの列とともに、ツイートごとに1行を与えます。最低限、ツイート ID、タイムスタンプ、作者のハンドル、本文、そして3つの中核的なエンゲージメント数を取り込みます。ID は重複排除のための一意のキーであり、テキストとして保存すべきです。それ以外はすべてレスポンスから直接マッピングされます。

Sorsa フィールド備考
tweet_ididテキストで保存、重複排除のための一意のキー
created_atcreated_atISO 8601 のタイムスタンプ
usernameuser.username作者オブジェクトの下に入れ子
full_textfull_textツイートの完全な本文
likes_countlikes_count整数、空ではなく0
retweet_countretweet_count整数
reply_countreply_count整数

ヘッダーは契約として扱いましょう。レポートや数式が一度それに依存すると、列名の変更は静かに物事を壊すため、スキーマは一度定義して維持します。作者プロフィールがすべてのツイートの中に返されるため、ハンドルとフォロワー数は追加のリクエストなしで同じレスポンスから得られます。これが、ここでフラットなリクエスト単位の請求が低く保たれる理由の一部です。

公開前によくある落とし穴 {#common-gotchas-before-you-ship}

3つの問題が、最初のエクスポートの大半でつまずきます。ツイート ID の精度が失われること、スケジュールされた実行が静かに失敗すること、そしてページネーションが1ページで静かに止まることです。それぞれに単純な対処があり、最初に正しくしておけば、レポートが既にシートに組み込まれた後の作り直しを避けられます。

ツイート ID は、Sheets が数値として保存するには大きすぎます。 それらは18〜19桁の値で、Google スプレッドシートは数値を64ビット浮動小数点として保存するため、有効数字は約15桁しか保てません。末尾の桁が0 に丸められ、ID は実際のツイートと一致しなくなります。ID の列を書式なしテキストにするか、シートに届く前に値を文字列として書き込みます。

ページネーションは自動ではありません。 検索とタイムラインのエンドポイントは1ページあたり約20レコード、フォロワーエンドポイントは最大200を返します。1ページを超えるには、next_cursor の値が null で返るまでループします。バッチエンドポイントは、データがそれに合う場合に役立ちます。最大100件のツイート ID または100件のユーザー名を既に持っているなら、1回のバルク呼び出しがそれらすべてを返し、これがリクエスト量を削減する主要なレバーになります。

スケジュールされた実行は、知らせずに失敗し得ます。 エラーで落ちた時間ベースのトリガーは、アラートを組み込まない限り通知しません。catch ブロックに MailApp.sendEmail の呼び出しを加えるか、Apps Script の実行ログを定期的に確認します。レート制限では、429 は単に「1秒待って再試行せよ」を意味します。すべてのプランで一律の毎秒20リクエストなら、まともな間隔でそれに達することはめったにありません。

これに公式の Twitter/X API は必要? {#do-you-need-the-official-twitterx-api-for-this}

いいえ、データをシートに読み込むためには必要ありません。公式 X API が必要なのは、投稿やダイレクトメッセージの送信のような書き込みアクションのときだけです。公開ツイート、プロフィール、フォロワーリストの読み取りには、読み取り専用の代替がリソース単位ではなくリクエスト単位で課金します。これが、同じエクスポートにおける数セントと数ドルの違いです。

コストの差は、各側が何を単位に課金するかから来ます。公式 X API は取得したリソース単位で課金し、1,000投稿の読み取りに$5.00、1,000ユーザープロフィールに$10.00で、月間200万投稿の読み取りという固定の上限があります(2026年4月レート、2026年7月確認、詳細は X API 料金の詳細 にあります)。フラットなリクエスト単位のモデルは、1回の呼び出しを1リクエストとして数え、作者プロフィールを無料で取り込むため、同じ読み取りが Sorsa の検索基準で1,000ツイートあたり約$0.10、バッチ基準で1,000あたり$0.02からになります。

タスク(読み取り、シートへ)公式 X API(従量課金)Sorsa(Proプラン)
1,000ツイート(作者プロフィール込み)約$5〜$15(投稿+ユーザー読み取り)$0.02から(バッチ基準)
10,000フォロワープロフィール約$100(10,000ユーザー読み取り)約$0.10(リクエストあたり200)
月間の読み取り上限200万投稿の読み取り、その後ブロックリクエストベースのプラン、ツイート単位のメーターなし

投稿や DM には、公式 API が唯一の選択肢であり、それがその領分です。公開データをフラットで予測しやすい価格でシートに読み込むには、読み取り専用 API のほうがはるかに安く、組み込みも簡単です。これが、月中ずっと走るスケジュールされたエクスポートや ソーシャルリスニングの構成 に向いている理由です。同じソースが、同じフラットな請求で ブランドメンションのトラッカー を動かします。

実際のエクスポート構成 {#a-real-export-setup}

約10人の分析チームは、予算の想定外の超過をきっかけにこの方法にたどり着きました。同チームはブランドメンションと競合の投稿を公式 API を通じて Sheets に記録しており、スケジュールされた取得のたびに投稿ごと・作者読み取りごとに課金されるため、複数のキーワードを毎日追跡し始めると、コストが急速に膨らみました。同じ読み取りをフラットなリクエスト単位の API に移したことで、データコストは最大50分の1に下がりました。作者プロフィールが無料で付いてきて、バッチ呼び出しが1回として数えられるため、リソース単位の課金から離れる読み取りの多いワークロードでは、これは想定どおりの結果です。投稿の読み取りだけでも、公式レートの1,000あたり$5.00から、Sorsa の検索基準で1,000あたり約$0.10へと下がり、ツイート ID によるバッチ収集は1,000あたり$0.02近くに収まります。いずれにせよ98%超の節約です。

構築そのものは小さく保たれました。キーワードごとに1つの Apps Script、1時間ごとのトリガー、重複排除のキーとしてのツイート ID、そしてシートが大きくなっても照会が素早いままになるよう、既知の ID を分けたタブです。同チームが得た教訓は、ツールではなく「適合」でした。Sheets はレポート表示には優れますが、データの保管庫としては貧弱です。数十万行を超えると遅くなり、そこが生データをデータベースに移し、その上のビューとして Sheets を残すべき地点です。

よくある質問 {#frequently-asked-questions}

コーディングなしで Twitter データを Google スプレッドシートにエクスポートできる?

はい、限度内で。IFTTT や Make のようなノーコードのプラットフォームは、X を Google スプレッドシートに接続し、自分のアカウントに紐づく単純なアクションに最も向いています。任意のキーワード、メンション、または他のアカウントを大量に読み取るには、Sorsa のような読み取り専用 API を呼ぶ Sheets アドオンや短い Apps Script のほうが頼りになります。ページネーション、スケジューリング、どの列を書き込むかを制御するためです。

なぜツイート ID が Google スプレッドシートで間違って見える?

ツイート ID は18〜19桁の数値で、Google スプレッドシートは数値を64ビット浮動小数点として保存するため、有効数字は約15桁しか保てません。末尾の桁が0 に丸められるため、ID は実際のツイートと一致しなくなります。代わりに ID をテキストとして保存します。ID の列を書式なしテキストにするか、シートに届く前に値を文字列として書き込みます。

スケジュールされたエクスポートで重複行をどう避ける?

ツイート ID を一意のキーとして使います。スケジュールされた各実行の前に、シートに既にある ID を読み、その ID が存在するツイートをスキップします。大きなシートでは、これまでに見た ID だけを保持する別のタブを設けて、照会を速く保ちます。すべてのツイート ID は一意なので、実行が重なっても重複を防げます。

Twitter から Sheets へのエクスポートはどのくらいの頻度で実行すべき?

データが意思決定を動かす頻度に間隔を合わせます。1時間ごとは時間に敏感なメンションのアラートに、1日ごとはトレンドレポートやキーワードの要約に十分で、1週間ごとはゆっくり動く監査に合います。必要以上に頻繁に実行するとノイズが増え、従量制の API では、わずかな見返りのためにお金を使います。スケジュールされたトリガーで任意の間隔を設定でき、後で変更もできます。

Sheets にデータをエクスポートするのに公式 Twitter API は必要?

いいえ。公式 X API が必要なのは、投稿や DM の送信のような書き込みアクションのときだけです。公開ツイート、プロフィール、フォロワーリストをシートに読み込むには、Sorsa API のような読み取り専用の代替が、単一の ApiKey ヘッダーを通じて機能し、リクエスト単位で課金するため、スケジュールされたエクスポートはツイート単位でカウントされません。Proプランでは、バッチ基準で1,000ツイートあたり$0.02からで、1回限りの100回分の無料リクエストで、まずエクスポート全体をテストできます。

Google スプレッドシートはツイートを何件保持できる?

1つの Google スプレッドシートのファイルは、すべてのタブ合わせて最大1,000万セルを保持し、行数は使う列の数によって上限が決まります。7列のツイートエクスポートは、およそ140万行でその上限に達します。2026年4月時点で、Google は上限を2,000万セルに倍増するベータを開始しました。数十万行を超えると、パフォーマンスが落ち、データベースがより良い置き場所になります。

始め方 {#getting-started}

データの形を見る最も速い方法は、コードを書く前にクエリを試すことです。API playground を開き、検索を実行し、列にマッピングする JSON を読みます。スキーマが良さそうなら、上記の Apps Script をシートに落とし込み、トリガーを追加します。1回限りの100回分の無料リクエストはおよそ10,000ツイートまたは20,000プロフィールをカバーし、プランを選ぶ前にエクスポートを最初から最後まで構築・検証するのに十分で、有効期限もありません。

スケールする準備ができたら、フラットなリクエストベースのプラン は、ツイートをバッチ基準で1,000あたり$0.02から、プロフィールを1,000あたり$0.01から読み、一律で毎秒20リクエスト、審査待ちの行列もありません。クイックスタートガイド が、ヘッダー認証と最初の呼び出しをカバーします。

監修:Keksich(Sorsa創業者、マーケター兼X APIリサーチャー)

本ガイドは、Sorsa API と稼働中の API およびそのドキュメントを運用する当チームの実地の作業に加え、スケジュールされたトリガーとヘッダーリクエストに関する Google 公式の Apps Script の挙動に基づいています。Google スプレッドシートの容量の数値は、2026年4月の Google Workspace の更新情報 に対して確認し、X API のリソース単位の料金は、現行の公開された内訳と Sorsa 自身の料金分解と突き合わせて確認しました。4つのエクスポート経路を比較しました。Sorsa について詳しくは about ページ にあります。2026年7月3日確認。