本文へスキップ

Twitter 位置情報 API:フォロワーを国別に集計

Twitter アカウントのフォロワーがどこにいるかを知るには、フォロワーを一覧にして、X が各人に割り当てた国を調べます。ランダムに選んだ1,000人のサンプルなら、各国の割合を約3ポイント以内の誤差で把握できます。

結論: X は2025年11月から、公開プロフィールにその国を「アカウントの所在地」(Account based in)として表示しています。これはアカウントの IP アドレスから推定されたもので、プロフィールの所在地欄は X が確認しない自由入力のテキストです。Sorsa API では、GET /followers でページをたどり、サンプルにしたフォロワーごとに GET /about を呼びます。料金は1,000アカウントあたり$1.40から。100回分の無料リクエストにカードは不要です。

エンドポイント
GET /about
ページサイズ
1リクエストあたり1アカウント
料金
1,000アカウントあたり$1.40から

#Twitter アカウントのフォロワーの出身地を調べるには

X は他人のアカウントのフォロワーの地図を描きません。X 自身の分析は X Premium に付属し、対象は契約者本人のオーディエンスだけです。X が公開プロフィールに表示するのは、各アカウントを割り当てた国です。無料の Twitter アカウント所在地確認ツールは、アカウント1件についてそれを読み取ります。これをオーディエンス全体に繰り返せば、X が保持している2つの公開情報から、その地理分布ができあがります。

  1. フォロワーリスト。 公開アカウントのフォロワーは、新しい順に1ページずつ読めます。

  2. 各フォロワーの国。 2025年11月から、公開プロフィールには、登録日から開く「このアカウントについて」パネルがあり、そこに「Account based in」(アカウントの所在地)の行が表示されます。X はこれを、所有者が入力した内容ではなく、アカウントの IP アドレスの集計から埋めています(X のヘルプセンターによる(新しいタブで開きます))。

フォロワー全体でこれらの国を数えれば、その割合がオーディエンスの地理分布になります。自分のアカウントでも他人のアカウントでも、エクスポートして比較できる表になります。この表示の意味と、間違うケースについては、X の「アカウントの所在地」の意味をお読みください。

落とし穴は、プロフィールの所在地欄です。これは任意の自由入力テキストで、X 自身の開発者データディクショナリ(新しいタブで開きます)も「may not indicate a valid location」(有効な場所を示していない可能性がある)と注意しています。これで作った地図は、空欄の人や「Earth」と書いた人を落とし、残りを、本人が入力した内容で数えることになります。

#Sorsa API で6ステップ:フォロワーを国別にマッピング

Twitter(X)API 兼スクレイピングツールである Sorsa API は、両方の情報を返します。GET /followers(新しいタブで開きます) は公開アカウントのフォロワーを1リクエスト200件で一覧にし、GET /about(新しいタブで開きます) は、1リクエストにつき1アカウントについて X が割り当てた国を返します。オーディエンスを国別にマッピングするには、Sorsa API を使います。API キー1つで X の開発者アカウントは不要、各フォロワーの国は1,000アカウントあたり$1.40からです。

フォロワー100万人のアカウント、1,000人を確認、1,000リクエストあたり$1.40 1 フォロワーを一覧化 GET /followers 1リクエスト200件 $7.00 全フォロワーID 2 サンプルを抽出 ランダムなID 1,000件 全リストから $0 自分のコードで実行 3 国を調べる GET /about 1回1アカウント $1.40 1,000回の照会 4 シェアを集計 各国の割合、 誤差±3.1ポイント $8.40 以内
4つの段階で、フォロワーリストが国別の割合になる。一覧化は1リクエスト200フォロワーで安く済み、サイズを決めるのは国の照会のほう。
  1. キーを取得する。 サインアップして、ダッシュボードから API キーをコピーします。新規アカウントには、カード不要で100回分の無料リクエストが付きます。

  2. 1アカウントを確認する。 ユーザー名を GET /about に送ります。country フィールドに、「アカウントの所在地」の値が入っています。

    Terminal
    curl -G "https://api.sorsa.io/v3/about" \
      -H "ApiKey: YOUR_API_KEY" \
      --data-urlencode "username=lisbon_tile_workshop"
    
    Response200 OK
    {
      "country": "Portugal",
      "source": "Portugal App Store",
      "username_change_count": 1,
      "last_username_change_at": "2019-05-14T09:12:40Z",
      "is_blue_verified": true,
      "premium_start_at": "2024-01-08T17:03:11Z",
      "affiliate_username": null
    }
    
  3. フォロワーを一覧にする。 GET /followers のページをたどり、カーソルが返らなくなるまで、各 next_cursor を送り返します。各フォロワーの id は保持してください。フォロワー100万人のアカウントなら、5,000リクエストかかります。

  4. ランダムにサンプルを抽出する。 最初のページは最新のフォロワーしか含まないので、そこからではなく、リスト全体から1,000件の ID をランダムに選びます。

  5. 各人の国を調べる。 サンプルにしたフォロワーごとに、user_id を指定して GET /about を呼びます。速度は毎秒最大20リクエストです。

  6. 割合を数える。 回答を国ごとにグループ化し、「Unknown」と地域名はそれぞれ独立した行として残し、各件数をサンプルサイズで割ります。

次のスクリプトは6つのステップをすべて実行し、各国の割合を誤差とともに表示します。429 は1秒間に20を超えるリクエストを送ったという意味なので、待ってからリトライします。403 は、キーがないか、リクエストを使い切っているという意味です。

import random
import time
from collections import Counter
from math import sqrt

import requests

API = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": "YOUR_API_KEY"}


def follower_ids(username):
    """Every follower's ID, 200 per request, newest first."""
    ids, params = [], {"username": username}
    while True:
        r = requests.get(f"{API}/followers", headers=HEADERS, params=params)
        r.raise_for_status()
        page = r.json()
        ids += [u["id"] for u in page.get("users", [])]
        cursor = page.get("next_cursor")
        if not cursor:
            return ids
        params["next_cursor"] = cursor


def country(user_id):
    """The country X assigns to one account, or Unknown."""
    r = requests.get(f"{API}/about", headers=HEADERS,
                     params={"user_id": user_id})
    if r.status_code == 429:  # over 20 requests in a second
        time.sleep(1)
        return country(user_id)
    if not r.ok:
        return "Unknown"
    return r.json().get("country") or "Unknown"


def geography(username, sample_size=1000):
    ids = follower_ids(username)
    sample = random.sample(ids, min(sample_size, len(ids)))
    counts = Counter()
    for user_id in sample:
        counts[country(user_id)] += 1
        time.sleep(0.05)  # one lookup at a time stays under 20 per second
    n = len(sample)
    for name, k in counts.most_common(15):
        p = k / n
        margin = 1.96 * sqrt(p * (1 - p) / n)
        print(f"{name:<24} {p:6.1%}  +/- {margin:.1%}")


geography("lisbon_tile_workshop")

Twitter のフォロワーのエクスポートや顧客のハンドルを並べた CSV のように、すでにリストがある場合は、ステップ3を飛ばして、その ID またはユーザー名を直接 GET /about に送ってください。

#X がアカウントの位置情報を保持している3つの場所

X のアカウントには3種類の位置情報が付き得ますが、X 自身が設定するのは「アカウントの所在地」の国だけです。オーディエンスの地理分布で数えるべきなのはこれです。X が設定する唯一の情報で、アカウントごとに答えが1つに決まるのもこれだけだからです。

X が設定するのは「アカウントの所在地」だけ。プロフィールの所在地と投稿の場所は、所有者が追加したものがそのまま入る。

次の表は、それぞれの情報を誰が設定し、API のどこで読めるかを示します。

情報設定者内容API で読める場所
アカウントの所在地X(集計した IP アドレスから)国、または所有者が表示を選んだ地域Sorsa API の GET /about の country。公式 X API にはなし
プロフィールの所在地所有者(自由テキスト)都市、冗談、または空欄両方の API で、すべてのプロフィールの location
投稿の場所作者(投稿ごと)名前付きのエリアまたは施設作者が場所をタグ付けした投稿のみ
  • アカウントの所在地

    設定者
    X(集計した IP アドレスから)
    内容
    国、または所有者が表示を選んだ地域
    API で読める場所
    Sorsa API の GET /about の country。公式 X API にはなし
  • プロフィールの所在地

    設定者
    所有者(自由テキスト)
    内容
    都市、冗談、または空欄
    API で読める場所
    両方の API で、すべてのプロフィールの location
  • 投稿の場所

    設定者
    作者(投稿ごと)
    内容
    名前付きのエリアまたは施設
    API で読める場所
    作者が場所をタグ付けした投稿のみ

公式 X API がアカウントについて返すのはプロフィールの所在地だけです。ユーザーオブジェクトには入力された location があり、国のフィールドはありません。フォロワーの読み取りは、X の従量課金の料金表(新しいタブで開きます)では1件$0.010なので、100万フォロワーのリストは$10,000かかり、それでも結果は自由テキストです。

投稿の場所が答えるのは別の問いで、アカウントの所在地ではなく、何かが投稿された場所です。投稿に場所が付くのは、作者がアプリで位置情報をオンにして場所を追加した後だけで(X のヘルプセンターの説明(新しいタブで開きます))、ほとんどの投稿には付いていません。ある都市からの投稿を探すには、Twitter の検索演算子のガイドにある near: と within: の演算子を使ってください。

#何人のフォロワーを調べればよいか

ランダムに選んだ1,000人のフォロワーのサンプルなら、アカウントのフォロワーが5万人でも5,000万人でも、各国の割合を約3.1ポイント以内の誤差で、100回中95回の確度で把握できます。誤差を決めるのは、アカウントのフォロワー数ではなく、調べるフォロワーの数です。大きなアカウントでは全数調査よりサンプルが優れているのはそのためです。

国別シェアの誤差幅(信頼度95%、確認したフォロワー数別) フォロワー400人 ±4.9ポイント フォロワー1,000人 ±3.1ポイント フォロワー2,000人 ±2.2ポイント フォロワー5,000人 ±1.4ポイント フォロワー1万人 ±1.0ポイント
400人ではなく1,000人を調べると、誤差は4.9ポイントから3.1ポイントに縮む。5,000人を超えると、追加の1人あたりで得られるものはごくわずか。

以下の誤差は、単純無作為抽出で信頼度95%の場合です。オーディエンスの約半分を占める国は誤差が最も広く、小さい国ほど精度よく分かります。

調べたフォロワー数割合50%の場合の誤差割合10%の場合の誤差
400±4.9ポイント±2.9ポイント
1,000±3.1ポイント±1.9ポイント
2,000±2.2ポイント±1.3ポイント
5,000±1.4ポイント±0.8ポイント
全フォロワーなしなし
  • 400

    割合50%の場合の誤差
    ±4.9ポイント
    割合10%の場合の誤差
    ±2.9ポイント
  • 1,000

    割合50%の場合の誤差
    ±3.1ポイント
    割合10%の場合の誤差
    ±1.9ポイント
  • 2,000

    割合50%の場合の誤差
    ±2.2ポイント
    割合10%の場合の誤差
    ±1.3ポイント
  • 5,000

    割合50%の場合の誤差
    ±1.4ポイント
    割合10%の場合の誤差
    ±0.8ポイント
  • 全フォロワー

    割合50%の場合の誤差
    なし
    割合10%の場合の誤差
    なし

サンプルの信頼性を保つルールが2つあります。サンプルはフォロワーリスト全体から抽出すること。最初のページには最新のフォロワーしか含まれないからです。そして、問いに合わせてサイズを決めること。1,000人なら30%の市場と20%の市場は区別できますが、6%の国と4%の国を区別するには約5,000人が必要です。

知っておきたいこと

最新のフォロワーが表しているのは、オーディエンスではなく直近の成長です。この違いはそれ自体が役に立ちます。最新の1,000人のフォロワーの国と、リスト全体からランダムに選んだ1,000人の国を比べると、予想外の1か国から突然まとまった数が現れた場合にすぐ分かります。そうした波は、購入されたフォロワーによくある兆候で、Twitter のボット判定で詳しく扱っています。

#オーディエンスを国別にマッピングするコスト

Sorsa API で100万フォロワーのオーディエンスを1,000人のサンプルでマッピングすると、$8.40からです。全フォロワーの一覧が$7.00、1,000件の国の照会が$1.40です。代わりに全フォロワーを調べると、$1,407からになります。公式 X API は、フォロワーリストだけで$10,000かかり、そのデータには数えられる国がありません。

アカウントのフォロワー数
チェックするフォロワー
$10,000
公式X API
フォロワー一覧だけで1フォロワーあたり$0.010。データには国のフィールドがなく、入力されたプロフィールの所在地のみです。
最安 $8.40
Sorsa API
全フォロワーを取得し、Xの「アカウントの所在地」から1,000か国を読み取ります。各国の割合の誤差は±3.1ポイント以内です。

国の取得: 1,000件、所要時間は約50秒(毎秒20リクエスト)。料金は1,000リクエストあたり$1.40で計算しています。

オーディエンスの規模とチェックするフォロワー数を選んでください。誤差は、オーディエンスの半数を占める国を基準にしています。

大きなアカウントでは、サンプルの費用は一覧化に比べてほとんどゼロに近く、一覧化の費用も全数調査に比べればほとんどゼロに近いです。以下の Sorsa API の料金は、最低レートの1,000リクエストあたり$1.40を使っています。

フォロワー数Sorsa API(1,000人を調査)Sorsa API(全フォロワー)公式 X API(リストのみ)
1万$1.47から$14.07から$100
10万$2.10から$140.70から$1,000
100万$8.40から$1,407から$10,000
1,000万$71.40から$14,070から$100,000
  • 1万

    Sorsa API(1,000人を調査)
    $1.47から
    Sorsa API(全フォロワー)
    $14.07から
    公式 X API(リストのみ)
    $100
  • 10万

    Sorsa API(1,000人を調査)
    $2.10から
    Sorsa API(全フォロワー)
    $140.70から
    公式 X API(リストのみ)
    $1,000
  • 100万

    Sorsa API(1,000人を調査)
    $8.40から
    Sorsa API(全フォロワー)
    $1,407から
    公式 X API(リストのみ)
    $10,000
  • 1,000万

    Sorsa API(1,000人を調査)
    $71.40から
    Sorsa API(全フォロワー)
    $14,070から
    公式 X API(リストのみ)
    $100,000

時間も同じように分かれます。Sorsa API は全プランで毎秒20リクエストなので、1,000件の国の照会は1分未満で終わりますが、大きなアカウントの100万フォロワー全員を調べるには、その速度でキー1つなら約14時間かかります。Starter プランの1,000リクエストあたり$4.90では、100万フォロワーのサンプルは$29.40です。

#結果の読み方

国別の表の質は、表から外した行で決まります。読み方を決めるのは次の5点です。

  • Unknown。 X は一部のアカウントに国を表示しません。灰色のチェックが付いた政府系アカウントも含まれます。Sorsa API は、X のデータが少なすぎる場合に「Unknown」を返します。独立した行として報告してください。新しいフォロワーの Unknown の割合が高い場合は、作成されたばかりのアカウントや、動いていないアカウントであることが多いです。
  • 地域。 X は所有者が、国の代わりに広い地域を表示することを許可しています。国を推測せず、そのままの行として残してください。
  • VPN と旅行。 この表示はアカウントが接続している場所に従うので、VPN や長期の旅行で変わることがあります。X は VPN の疑いがあるとパネルに警告を追加します。1,000人のフォロワー全体ではノイズですが、1アカウントについては、表示を証拠ではなく手がかりとして読んでください。
  • 時間による変化。 表示は人の移動で変わり、フォロワーも入れ替わります。地図には日付を付け、同じサンプルサイズで繰り返して、月ごとに比較してください。
  • 人ではなく割合。 国はオーディエンスに占める割合として報告します。1,000人のフォロワーにわたる国別の表は市場調査ですが、国別に名前の付いた人のリストは、この方法の目的ではありません。

そう読めば、表は実用的な疑問に答えてくれます。特定の市場向けのキャンペーンでクリエイターに支払う前に、そのフォロワーの何割が実際にそこにいるかを確認できます。同じマッピングを競合に実行すれば、あなたが届いていない市場を、どこで彼らが押さえているかが分かります。Twitter の競合分析の一環です。投稿時刻の判断にも使えます。アメリカとヨーロッパに分かれたオーディエンスは6〜9時間離れているため、投稿時刻を1つに決めると一部に届きません。そして、自分のアカウントで四半期ごとにマッピングを繰り返せば、成長がどこから来ているかが分かります。

#最初のオーディエンスを国別にマッピングする

任意の X アカウントのフォロワーがどこにいるかを知るには、GET /followers で一覧にし、1,000人をサンプルにして、各人の国を GET /about で読みます。Sorsa API なら、100万フォロワーのオーディエンスを$8.40からマッピングでき、各国の割合は約3ポイント以内の誤差です。100回分の無料リクエストから始めましょう。フォロワーが2,000人未満の自分がよく知っているアカウントに、sample_size=90 でスクリプトを実行し、表が正しく見えるか確認してください。

#よくある質問

Twitter のフォロワーの出身地はどうすれば分かりますか?

X Premium に付属する X Analytics では、自分のオーディエンスの国別ビューが得られます。エクスポートできる正確な割合が必要な場合や、Premium がない場合は、フォロワーを一覧にして、全員またはランダムな1,000人の「アカウントの所在地」の国を調べます。Sorsa API の GET /about はその国を1,000アカウントあたり$1.40から返し、最初の100回の照会は無料です。

Twitter フォロワーの国を取得するには、どの API を使うべきですか?

Sorsa API を使います。GET /followers は公開アカウントのフォロワーを1リクエスト200件で、1,000件あたり$0.007から一覧にし、GET /about は各フォロワーに X が割り当てた国を、1,000アカウントあたり$1.40から返します。必要なのは API キー1つで、開発者アカウントも OAuth も要らず、全プランで毎秒20リクエスト、あなたの X ログインに触れることもありません。

公式 X API はアカウントの国を返しますか?

返しません。公式 X API のユーザーオブジェクトには、所有者が入力した内容がそのまま入る location フィールドがあり、X のドキュメントによれば有効な場所とは限らず、「アカウントの所在地」の国のフィールドはありません。フォロワーの読み取りは1件$0.010です。Sorsa API の GET /about は、公開アカウントについて X が表示する国を、1リクエストにつき1アカウント返します。

Twitter はアカウントの正確な位置を表示しますか?

いいえ。X が表示するのは国か広い地域で、都市、通り、リアルタイムの位置は表示せず、IP アドレスも公開していません。この表示はアカウントの集計された IP アドレスから決まるため、旅行や VPN で変わることがあります。投稿に場所が付くのは作者がタグ付けしたときだけなので、ユーザー名だけから住所をたどることはできません。

他人のフォロワーの国も見られますか?

公開アカウントなら見られます。X Analytics が対象とするのは自分のアカウントだけで、X アカウントでログインするツールが地図にできるのも自分のフォロワーだけです。公開アカウントのフォロワーを一覧にして、各人の「アカウントの所在地」の国を読む方法なら、クリエイターでも競合でもブランドでも同じようにできます。非公開アカウントはフォロワーリストを非公開にしているので、誰もマッピングできません。

#検証方法

2026年11月2日に、最新の Sorsa API リファレンスの /about と /followers の項目、国設定と投稿の位置情報に関する X のヘルプセンターの記事、そして docs.x.com のユーザーフィールドと料金を確認しました。リクエストとレスポンスはそのリファレンスに沿っており、ハンドルは架空のものです。誤差は単純無作為抽出の95%信頼区間で、コストは Sorsa API の最低レート、1,000リクエストあたり$1.40を使っています。

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

変更点
  • 全面的に書き直しました。誤差を示すサンプリング、公式 X API と比べたコストプランナー、新しい Python と Node.js のパイプラインを追加し、事実は X のヘルプセンターと docs.x.com で確認しています。
  • 初公開。