Twitterの全フォロワーをエクスポートする方法
Xにはエクスポートボタンがありません。公開アカウントの全フォロワーを保存するには、APIでフォロワーリストを200件ずつ読み取り、各ページをCSVファイルに追記します。100万フォロワーなら5,000リクエストです。
要点: 1回のリクエストでフォロワー1ページ分と次ページへのカーソルが返り、カーソルが返らなくなればエクスポートは完了です。公式X APIは1,000フォロワーあたり$10.00を課金します。Sorsa APIの GET /followers なら1,000人あたり$0.007からで、100リクエストの無料分で最初の2万フォロワーをエクスポートできます。
- エンドポイント
GET /followers- 1ページの件数
- 1リクエストあたり200件
- 料金
- 1,000人あたり$0.007から
#Twitterフォロワーのエクスポートの仕組み
Xには、自分のアカウントを含め、どのアカウントのフォロワーについてもエクスポート機能がありません。フォロワーリストをXから取り出す方法は4つです。データアーカイブ、ブラウザ拡張機能、TwitterフォロワーをCSVにエクスポートのような無料のWebツール、そしてAPIです。対象にできるリストと取得できる量が、それぞれ異なります。
- Xのデータアーカイブは無料ですが、取得できるのは自分のアカウントだけです。各フォロワーはアカウントIDとリンクで表され、名前はなく、届くまでに数日かかります。
- ブラウザ拡張機能は、ログイン中のXセッションをスクロールしながらリストを読み取ります。無料枠は数百行までで、エクスポートはすべて自分のアカウントとして実行されます。
- 無料のWebツールは、任意の公開アカウントの最新200件のフォロワー、フォロー、認証済みフォロワーをCSV、Excel、JSONで保存します。
- APIは、任意の公開アカウントのリスト全体をページ送りで取得します。各リクエストが1ページとカーソルを返し、カーソルが返らなくなった時点でリストは終わりです。公式X APIは
GET /2/users/{id}/followers(新しいタブで開きます) で1ページ最大1,000件まで取得できますが、開発者アカウントの開設とOAuthの設定が必要で、1,000フォロワーあたり$10.00が課金されます。
どの方法でも取得できないリストが、非公開アカウントのものです。Xは、そのフォロワーを承認した相手にしか見せません。それ以外のリストはすべて公開されており、各フォロワーは、スプレッドシートで並べ替えやフィルタができる公開プロフィールとして取得できます。
#Sorsa APIで4ステップでフォロワーリスト全体をエクスポート
任意の公開アカウントのリスト全体を取得するなら、Sorsa APIが向いています。GET /followers は、1リクエストでフォロワーを最大200件、それぞれ公開プロフィール全体で返し、次ページへのカーソルも付きます。全プランで毎秒20リクエストに対応し、開発者アカウントは不要です。カーソルとは、APIが各ページとともに返すしおりのようなもので、次のリクエストでそれを送り返すと、次の200フォロワーが届きます。
-
キーを取得します。 サインアップして、ダッシュボードからAPIキーをコピーします。最初の100リクエストは無料で、カードは不要です。
-
最初のページをリクエストします。
ApiKeyヘッダーにキーを入れ、アカウントのユーザー名をGET /followers(新しいタブで開きます) に送ります。user_idや、user_linkに入れたプロフィールのリンクでも指定できます。ターミナル curl -G "https://api.sorsa.io/v3/followers" \ -H "ApiKey: YOUR_API_KEY" \ --data-urlencode "username=northwind_roasters"レスポンス200 OK { "users": [ { "id": "1592041833471827968", "username": "harbor_street_coffee", "display_name": "Harbor Street Coffee", "description": "Small-batch roaster. Open 7 to 3.", "location": "Portland, OR", "created_at": "2022-11-14T06:28:46Z", "followers_count": 1840, "followings_count": 312, "tweets_count": 2741, "verified": false, "can_dm": true, "protected": false, "bio_urls": ["https://hsc.example"] } ], "next_cursor": "1849212213712385091" } -
カーソルをたどります。 レスポンスの
next_cursorを読み取り、next_cursorパラメータとして送り返します。空、または含まれていなければ、リストは完了です。フォロワー5,000人のアカウントは25リクエストで済みます。各ページは届くたびにファイルへ書き込まれ、カーソルのないページでエクスポートが終わります。 -
各ページをファイルに書き込みます。 ページが届くたびに行を追記すれば、100万フォロワーのエクスポートでもリスト全体をメモリに持たずに済みます。
import csv import requests URL = "https://api.sorsa.io/v3/followers" HEADERS = {"ApiKey": "YOUR_API_KEY"} FIELDS = ["id", "username", "display_name", "description", "location", "followers_count", "created_at"] RISKY = ("=", "+", "-", "@", "\t", "\r") def cell(value): if isinstance(value, list): value = " ".join(value) if isinstance(value, str) and value.startswith(RISKY): value = "'" + value # opens as text, never a formula return value def export(username, path="followers.csv"): params = {"username": username} with open(path, "w", newline="", encoding="utf-8-sig") as f: out = csv.writer(f) out.writerow(FIELDS) while True: r = requests.get(URL, headers=HEADERS, params=params) r.raise_for_status() page = r.json() for user in page.get("users", []): out.writerow([cell(user.get(k)) for k in FIELDS]) cursor = page.get("next_cursor") if not cursor: break params["next_cursor"] = cursor export("northwind_roasters")
どちらのスクリプトも7列の followers.csv を書き出します。ファイルはExcelで正しく読めるUTF-8で保存され、スプレッドシートの数式のように始まるプロフィール文の前にはアポストロフィが付きます。どちらも、後述のExcelのセクションで説明しています。403 はキーがないか、リクエストを使い切ったことを意味します。429 は1秒間に20リクエストを超えたことを意味するので、1秒待ってからリクエストを再送してください。
#フォローリストや認証済みフォロワーだけをエクスポートする
ユーザーがフォローしているアカウントのリストを取得するには、代わりに GET /follows を呼び出します。認証バッジつきのフォロワーだけが必要なら、GET /verified-followers を呼び出します。どちらも GET /followers と同じ入力とカーソルを受け取り、同じプロフィールのフィールドを返すので、スクリプトの変更はURLの1行だけです。
このガイドのすべてのリストは、Sorsa APIの4つのエンドポイントでカバーできます。3つはカーソルでリストをページ送りし、1つはハンドルまたはIDのバッチを受け取ります。
| エクスポートするもの | エンドポイント | 1リクエストあたり |
|---|---|---|
| アカウントをフォローしているアカウント | GET /followers | フォロワー最大200件 |
| アカウントがフォローしているアカウント | GET /follows(新しいタブで開きます) | アカウント最大200件 |
| 認証済みフォロワーのみ | GET /verified-followers(新しいタブで開きます) | 1ページ、同じカーソル |
| ハンドルまたはIDのリストのプロフィール | GET /info-batch | プロフィール最大100件 |
アカウントをフォローしているアカウント
- エンドポイント
GET /followers- 1リクエストあたり
- フォロワー最大200件
アカウントがフォローしているアカウント
- エンドポイント
GET /follows(新しいタブで開きます)- 1リクエストあたり
- アカウント最大200件
認証済みフォロワーのみ
- 1リクエストあたり
- 1ページ、同じカーソル
ハンドルまたはIDのリストのプロフィール
- エンドポイント
GET /info-batch- 1リクエストあたり
- プロフィール最大100件
フォローリストを見れば、そのアカウントが何を読んでいるのかが分かります。注目しているクリエイター、ライバル、ニュースソースです。フォロワーリストと並べてエクスポートすれば、相互フォローかどうかが分かり、2つのアカウントのオーディエンスの重なりは、どのスプレッドシートでも id でのマッチングで求められます。エクスポートの後に続くオーディエンス分析、つまり絞り込みから多数のアカウントにわたる重なりの分析までは、Twitterフォロワー APIのガイドで詳しく解説しています。
#フォロワー全件エクスポートのコスト
Sorsa APIでフォロワーを全件エクスポートするコストは、1,000フォロワーあたり$0.007からです。同じ公開リストに対して、公式X APIは1,000人あたり$10.00を請求し、1,000倍の差があります。
公式X API
$10,000
100万フォロワーの場合
1フォロワー$0.010
Sorsa API
$7から
100万フォロワーの場合
1,000人あたり$0.007から
コストは1,000分の1
この料金だと、1万フォロワーはSorsa APIで$0.07から、公式X APIで$100です。10万なら$0.70からに対して$1,000、100万なら$7からに対して$10,000、1,000万なら$70からに対して$100,000になります。自分の開発者アプリで自分のフォロワーを読み取る場合にXが設定している低い料金、1人あたり$0.001でも、1,000人あたり$1.00です(X APIの料金(新しいタブで開きます))。
Sorsa APIはプロフィール単位ではなくリクエスト単位で課金します。1回の呼び出しで最大200フォロワーを返し、失敗したリクエストには課金されず、GET /key-usage-info(新しいタブで開きます) による残高の確認も無料です。無料の100リクエストで最初の2万フォロワーを取得できるため、プランを選ぶ前に、フォロワー2万人までのアカウントなら最初から最後までエクスポートできます。
#データを失わずにExcelやGoogleスプレッドシートで開く
CSVはダブルクリックで開かず、インポートしてください。Excelが保持するのは有効桁数15桁までなので、1592041833471827968のような19桁のXアカウントIDは1.59204E+18になり、下4桁は0になってしまいます(Microsoftサポート(新しいタブで開きます))。
- Excel: データ、テキストまたはCSVからの順に選び、ファイルを指定して、データ型の検出を「データ型を検出しない」に設定して読み込みます。すべての列がテキストとして届き、IDも保たれます。
- Googleスプレッドシート: ファイル、インポートの順に選び、ファイルをアップロードして、インポート前に「テキストを数値、日付、数式に変換する」のチェックを外します(Googleのインポートのヘルプ(新しいタブで開きます))。
このガイドの2つのスクリプトは、どちらもファイルをバイトオーダーマークつきのUTF-8で保存します。これはファイルの先頭に付く見えない目印で、Excelに読み方を伝えるため、絵文字や、日本語、アラビア語、キリル文字の名前が書いたとおりに表示されます。以降の作業では id をキーとして扱ってください。ユーザー名は変わりますが、アカウントIDは変わりません。同じリストをスケジュールでシートに取り込みたい場合は、TwitterデータをGoogleスプレッドシートにエクスポートする方法をご覧ください。
知っておきたいこと
プロフィール文は自由入力のテキストです。=、+、-、@ で始まるプロフィール文は、Excelで開くと数式として扱われます。これはOWASPがCSVインジェクション(新しいタブで開きます)と呼ぶリスクです。スクリプトはそうしたセルの前にアポストロフィを付けるので、プレーンテキストとして開きます。このガードを外してよいのは、ファイルの渡し先がスプレッドシートを使う人ではなく、コードやデータベースの場合だけです。
#ファイルに含める列を選ぶ
各フォロワーは19個のフィールドを持つ公開プロフィール全体として返ります。作業に必要なものだけを残し、id は必ず残してください。
そのうち13個のフィールドが、オーディエンス分析の大半に必要な情報を担います。アカウントが誰なのか、どこまで届くのか、どれだけ活動しているのか、連絡できるのかです。
| フィールド | 内容 | 例 |
|---|---|---|
id | 変わらないアカウントID。文字列で送られる。ファイル同士の照合に使う | 1592041833471827968 |
username | @なしのハンドル。変更される場合がある | harbor_street_coffee |
display_name | プロフィールに表示される名前 | Harbor Street Coffee |
description | プロフィール文 | Small-batch roaster. |
location | ユーザーが入力したとおりの所在地 | Portland, OR |
followers_count | そのアカウント自身のフォロワー数 | 1840 |
followings_count | そのアカウントがフォローしている数 | 312 |
tweets_count | 公開した投稿数 | 2741 |
created_at | アカウントの作成日(ISO 8601) | 2022-11-14T06:28:46Z |
verified | 認証バッジの有無 | false |
can_dm | ダイレクトメッセージを受け付けるか | true |
protected | 投稿が非公開か | false |
bio_urls | プロフィール内のリンク(リスト) | https://hsc.example |
id- 内容
- 変わらないアカウントID。文字列で送られる。ファイル同士の照合に使う
- 例
1592041833471827968
username- 内容
- @なしのハンドル。変更される場合がある
- 例
harbor_street_coffee
display_name- 内容
- プロフィールに表示される名前
- 例
Harbor Street Coffee
description- 内容
- プロフィール文
- 例
Small-batch roaster.
location- 内容
- ユーザーが入力したとおりの所在地
- 例
Portland, OR
followers_count- 内容
- そのアカウント自身のフォロワー数
- 例
1840
followings_count- 内容
- そのアカウントがフォローしている数
- 例
312
tweets_count- 内容
- 公開した投稿数
- 例
2741
created_at- 内容
- アカウントの作成日(ISO 8601)
- 例
2022-11-14T06:28:46Z
verified- 内容
- 認証バッジの有無
- 例
false
can_dm- 内容
- ダイレクトメッセージを受け付けるか
- 例
true
protected- 内容
- 投稿が非公開か
- 例
false
bio_urls- 内容
- プロフィール内のリンク(リスト)
- 例
https://hsc.example
残りの6個は、favourites_count、media_count、profile_image_url、profile_background_image_url、pinned_tweet_ids、possibly_sensitive です。
知っておきたいこと
Xのアプリもサービスも、あるアカウントが別のアカウントをいつフォローしたかは記録していないため、フォロワーのファイルにフォロー日は含まれません。誰が加わり、誰が外れたかを知るには、リストを定期的にエクスポートして、ファイル同士を
idで比較します。新しいIDは新しいフォロワー、なくなったIDは外れたフォロワーです。
下のビルダーは、ステップ4のスクリプトを、対象のリスト、列、ファイルを開く場所に合わせて書き換えます。
ハンドルまたはプロフィールのリンク。デモ用のハンドルは16文字以上で、Xに存在しないものです。
import csv
import requests
URL = "https://api.sorsa.io/v3/followers"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
FIELDS = ["id", "username", "display_name", "description",
"location", "followers_count", "created_at"]
RISKY = ("=", "+", "-", "@", "\t", "\r")
def cell(value):
if isinstance(value, list):
value = " ".join(value)
if isinstance(value, str) and value.startswith(RISKY):
value = "'" + value # opens as text, never a formula
return value
def export(username, path="followers.csv"):
params = {"username": username}
with open(path, "w", newline="", encoding="utf-8-sig") as f:
out = csv.writer(f)
out.writerow(FIELDS)
while True:
r = requests.get(URL, headers=HEADERS, params=params)
r.raise_for_status()
page = r.json()
for user in page.get("users", []):
out.writerow([cell(user.get(k)) for k in FIELDS])
cursor = page.get("next_cursor")
if not cursor:
break
params["next_cursor"] = cursor
export("northwind_roasters")
リストと列を選ぶと、スクリプトとファイル名が変わります。
#アカウントの一覧からフォロワー数を取得する
多数のアカウントのフォロワー数をまとめて取得するには、GET /info-batch(新しいタブで開きます) に、1リクエストあたり最大100件のユーザー名またはユーザーIDを送ります。どのプロフィールにも followers_count、followings_count、tweets_count が含まれ、料金は1,000プロフィールあたり$0.014からです。
handles.txt に1行1ハンドルで書いてスクリプトを実行すると、アカウントごとに1行ずつ入った counts.csv が作られます。
import csv
import requests
URL = "https://api.sorsa.io/v3/info-batch"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
COLUMNS = ["username", "followers_count", "followings_count",
"tweets_count"]
with open("handles.txt", encoding="utf-8") as f:
handles = [h.strip().lstrip("@") for h in f if h.strip()]
with open("counts.csv", "w", newline="", encoding="utf-8-sig") as f:
out = csv.writer(f)
out.writerow(COLUMNS)
for i in range(0, len(handles), 100):
batch = {"usernames": handles[i:i + 100]}
r = requests.get(URL, headers=HEADERS, params=batch)
r.raise_for_status()
for user in r.json().get("users", []):
out.writerow([user.get(k) for k in COLUMNS])
1万アカウントは100リクエストで済み、無料の100リクエストで全件まかなえます。公式X APIはユーザー1人につき$0.010を課金するので、同じリストで$100かかります。
Xのアーカイブをフォロワーの完全なリストにする
Xのデータアーカイブ(新しいタブで開きます)には自分のフォロワーが含まれていますが、data/follower.js ファイルでは、各フォロワーが accountId とリンクで表されるだけで、名前もプロフィール文もカウントもありません。そのIDを user_ids として、100件ずつ GET /info-batch に送れば、すべての行が完全なプロフィールになります。
import json
with open("data/follower.js", encoding="utf-8") as f:
raw = f.read()
rows = json.loads(raw[raw.index("["):])
ids = [row["follower"]["accountId"] for row in rows]
# send ids[i:i + 100] as "user_ids" to GET /info-batch
アーカイブが対象にするのはサインインしているアカウントだけで、届くまでに数日かかることもあるため、自分のリストの1回限りのバックアップに向いています。APIなら、どの公開アカウントにも今すぐ届きます。
#フォロワーをエクスポートする方法の比較
任意の公開アカウントのリストを最後まで取得できるのはAPIだけです。方法ごとに、セットアップ、各行に含まれる内容、1,000フォロワーあたりの料金が異なります。
| 方法 | 対象のリスト | 得られるもの | 1,000フォロワーあたりのコスト |
|---|---|---|---|
| Sorsa API | 任意の公開アカウント、全ページ | フォロワーごとに19個のプロフィールフィールド、Xアカウントへのリスクなし | $0.007から |
| 公式X API | 任意の公開アカウント | 開発者アカウントとOAuthトークンを用意したうえでのプロフィール | $10.00 |
| ブラウザ拡張機能 | 任意の公開アカウント(セッションが続く間) | ログイン中のXアカウント経由で読み取った行。無料枠は数百件まで | 無料枠を超えるとサブスクリプション |
| Xのデータアーカイブ | 自分のアカウントのみ | アカウントIDとリンクのみで名前なし、届くまで数日 | 無料 |
Sorsa API
- 対象のリスト
- 任意の公開アカウント、全ページ
- 得られるもの
- フォロワーごとに19個のプロフィールフィールド、Xアカウントへのリスクなし
- 1,000フォロワーあたりのコスト
- $0.007から
公式X API
- 対象のリスト
- 任意の公開アカウント
- 得られるもの
- 開発者アカウントとOAuthトークンを用意したうえでのプロフィール
- 1,000フォロワーあたりのコスト
- $10.00
ブラウザ拡張機能
- 対象のリスト
- 任意の公開アカウント(セッションが続く間)
- 得られるもの
- ログイン中のXアカウント経由で読み取った行。無料枠は数百件まで
- 1,000フォロワーあたりのコスト
- 無料枠を超えるとサブスクリプション
Xのデータアーカイブ
- 対象のリスト
- 自分のアカウントのみ
- 得られるもの
- アカウントIDとリンクのみで名前なし、届くまで数日
- 1,000フォロワーあたりのコスト
- 無料
ブラウザ拡張機能は、自分のXセッションの中でリストをスクロールするため、エクスポートはすべて自分のアカウントとして実行されます。有名な拡張機能の1つは、ストアのページで、エクスポート専用に別のXアカウントを使うよう勧めています。Sorsa APIはXのログイン情報もCookieも求めないので、エクスポートがXアカウントを危険にさらすことはなく、ブラウザにインストールするものもありません。
#まずは2万フォロワーを無料で
任意の公開アカウントのフォロワーリスト全体には、Sorsa APIが向いています。1リクエストで200フォロワー、1,000人あたり$0.007からで、最初の2万フォロワーはカード不要で無料です。キーを取得し、ステップ4のスクリプトを貼り付けて、上のインポート手順でファイルを開いてください。同じカーソルのループで、アカウントの投稿もエクスポートできます。詳しくは、ユーザーの全ツイートをダウンロードのガイドをご覧ください。
#よくある質問
Twitterのフォローリストを抽出するのに最適なツールは何ですか?
Sorsa APIです。GET /follows は、任意の公開アカウントのフォローリスト全体を、1リクエスト200アカウントずつ、APIキー1つで、1,000件あたり$0.007から返します。ツールを評価する基準は4つあります。リストの最後まで届くか、1,000件あたりの料金、自分のXアカウントで実行されるか、速度です。Sorsa APIはそのすべてを満たします。全ページを取得でき、公式X APIの1,000分の1のコストで、アカウントへのリスクがなく、毎秒20リクエストに対応します。
他人のTwitterフォロワーもエクスポートできますか?
公開アカウントならできます。Sorsa APIの GET /followers にユーザー名、ユーザーID、プロフィールのリンクのいずれかを渡し、カーソルでページ送りしてください。Sorsa APIは、Xのログイン情報もCookieも一切求めません。非公開アカウントのフォロワーは、承認した相手にしか表示されないため、どのツールでもエクスポートできません。リクエストは失敗しますが、課金はされません。
他人のフォローリスト全体をXで見るにはどうすればよいですか?
エクスポートしてください。Xが他のアカウントのフォローリストを見せるのはスクロールするフィードとしてだけで、検索も絞り込みもダウンロードもできません。全件を確実に読むには、ファイルにするのが唯一の方法です。Sorsa APIの GET /follows は、公開プロフィールがフォローしているすべてのアカウントを、1リクエスト200件で返します。無料のTwitter最新フォロワートラッカーなら、コード不要で最新のフォロー20件が見られます。
Twitterのフォロワーを無料でエクスポートする方法はありますか?
あります。3つあります。1つ目は、無料のTwitterフォロワーCSVエクスポートツールで、任意の公開アカウントの最新200フォロワーを保存できます。2つ目は、Sorsa APIで、アカウントごとに100リクエストの無料分があり、最初の2万フォロワーをまかなえます。カード不要で、有効期限もありません。3つ目のXの公式アーカイブも無料ですが、対象は自分のアカウントだけで、フォロワーは名前のないIDとして並びます。
Twitterのフォロワーをエクスポートするのに、スクレイパーやブラウザ拡張機能は必要ですか?
いいえ、不要です。Sorsa APIはREST APIです。キーを付けたリクエスト1回で整ったJSONが返り、ブラウザで動かすものも、Xアカウントも要らないため、短いスクリプトだけでエクスポートできます。ブラウザ拡張機能はログイン中のXセッションからリストを読み取り、無料枠は多くても数百行までです。Sorsa APIはリストの最後まで届き、Xアカウントには一切触れません。
#検証方法
2026年11月2日に、このガイドで扱うすべてのエンドポイント、パラメータ、ページサイズ、レスポンスのフィールドを、最新のSorsa APIリファレンス(45エンドポイント)と、/followers、/follows、/verified-followers、/info-batch のドキュメントページと照合しました。サンプルのレスポンスにはデモ用のアカウントを使っています。公式X APIの料金とフォロワーのエンドポイントはdocs.x.comから、同じ日に確認しました。Excelの15桁の制限はMicrosoftサポート、数式のリスクはOWASP、インポートの手順はGoogleスプレッドシートのヘルプによります。
出典
- Sorsa API reference: Followers(新しいタブで開きます)
- Sorsa API reference: User Profile (Batch)(新しいタブで開きます)
- X API pricing(新しいタブで開きます)
- X API: Get followers(新しいタブで開きます)
- Microsoft Support: Keeping leading zeros and large numbers(新しいタブで開きます)
- OWASP: CSV Injection(新しいタブで開きます)
- Google Docs Editors Help: Import data sets and spreadsheets(新しいタブで開きます)
- X Help Center: How to download your X archive(新しいタブで開きます)