競合店の数を半径1・2・3kmで調べる方法|GoogleマップのAPI(Places API)で候補を集めて店名で判定する手順と、漏れる範囲
競合店の数を半径1・2・3kmで調べる方法|GoogleマップのAPI(Places API)で候補を集めて店名で判定する手順と、漏れる範囲
「出店候補地の近くに同じ業態の店は何店あるのか」「うちの店のまわりは競合が多いほうなのか」。この問いに、地図アプリで目を凝らして数える方法だと、人によって数が変わり、店舗が増えるほど比べられなくなります。
結論から書くと、次の4段階で数えると、同じ物差しで何店舗分でも比べられます。
- 候補を集める: Googleマップのデータをプログラムから検索できる「Places API」で、業態を表す検索語を3つほど投げ、店舗の周囲の候補を集めます。
- 距離で絞る: 検索は四角い範囲でしか絞れないため、取れた候補の緯度・経度から店舗までの直線距離を計算し、半径1・2・3km以内に入るものだけ残します。
- 店名で判定する: 候補のほとんどは「美容室」という同じ種別で返ってくるので、種別では同業かどうか分かりません。店名に業態を示す言葉が入っているかで「同業」「あいまい」「除外」に振り分けます。
- あいまいな店だけ目で確かめる: 名前で決められない店だけを公式サイトや予約サイトで確認し、確認できなかった店は数に入れず、その旨を注記します。
以下、2026年9月に東海地方の美容サロンチェーン28店舗について、各店から半径1・2・3km以内の「同じ業態の専門店」(ここではヘアカラー・白髪染めの専門店)を数えた実例をもとに、手順と判断基準を説明します。
なぜ「目で数える」では比べられないのか
競合の数は、出店判断や開業前の集客計画で必ず話題になります。ところが手作業で数えると、次の3点がばらつきます。
- どこまでを「近く」とするか。 「近隣」「徒歩圏」「車で5分」は人によって違います。
- 何を「同業」とするか。 一般の美容室もヘアカラーをしますし、店名に「カラー」が入っていても脱毛サロンのこともあります。
- 距離の測り方。 地図上で目測すると、同じ店でも0.1〜0.2kmずれることがあります。
たとえば、住所の町丁目の代表点で距離を測ると、番地まで一致した座標で測った場合より0.2km前後ずれることがあります。実例のある店舗では、番地の座標で測ると2km以内に3店、その外側の2.1kmと2.3kmに1店ずつありました。この2店は、測り方しだいで「2km前後」の内側にも外側にも入ります。線の引き方と測り方を決めずに数えると、境界付近の店が出たり入ったりするということです。
半径と判定ルールを先に決め、全店舗を同じ手順で数えれば、この問題は消えます。
使うもの
| 使うもの | 役割 | 注意点 |
|---|---|---|
| Places API(New)のテキスト検索 | 検索語と範囲を指定して、店名・住所・緯度経度・営業状況・口コミ数を取得する | Google Cloudでの利用登録とAPIキーが必要。従量課金で、取得する項目によって料金区分が変わる |
| 店舗・候補地の緯度経度 | 距離計算の中心 | 番地まで一致した座標を使う。町丁目の代表点だと数百mずれる |
| 距離計算の小さなスクリプト | 2点の緯度経度から直線距離を出す | 球面上の距離の公式(ハバーサイン式)で十分 |
実例では、28店舗×検索語3つの84検索で、ページ送りを含めて合計119回の呼び出しになりました。1回で返るのは最大20件で、ページ送りをしても1つの検索語で取れるのは最大60件までです。実例でも84検索のうち4検索が60件の上限に達しており、店の多い都市部では取りこぼしが起こりえます。呼び出し回数は無料枠に対して十分小さいものでしたが、料金体系は改定されることがあるので、実行前にGoogleの料金ページで最新の条件を確認してください。取得する項目(口コミ数や評価など)を必要なものに絞ると、料金区分を上げずに済みます。
手順
1. 検索語を業態ごとに3つ程度決める
1つの言葉だけで検索すると、店名の付け方の違いで取りこぼします。実例では、同じ業態を指す言い方として次の3つを使いました。
- ヘアカラー専門店
- 白髪染め専門店
- カラー専門店
3つの検索結果は大きく重なります。実例で最終的に同業と数えた延べ82件のうち、76件は3語すべてに出てきましたが、1語だけで拾えたものも5件ありました。1語だけで検索すると、こうした店(実例では、1語だけで検索すると82件中最大5件、約6%)を取りこぼす可能性があります。言い換えを並べるのは、この取りこぼしを埋めるためです。結果は店のIDで重複を除いてからまとめます。
美容室全般の数を知りたい場合は、自治体が公開している美容所(美容室)の届出一覧を半径で集計するほうが網羅的です。APIの検索は「同じ業態の専門店」のように、絞った競合を数えるのに向いています。
2. 範囲は四角で指定し、角の分は後で落とす
テキスト検索では、結果を範囲内に限定する指定が「長方形」でしかできません。円では絞れないため、半径3kmの円がすっぽり入る長方形で検索し、後から距離で円の外を落とします。
実例では、店舗の座標から南北・東西へそれぞれ3.2km(一辺6.4km)の長方形を指定しました。緯度1度は約111km、経度1度は名古屋あたりの緯度で約91km(111km×緯度35度のコサイン約0.82)なので、これで度数に直しています。
長方形の角は円の外です。実例では28店舗で候補が延べ835件集まり、そのうち191件は直線距離で3kmを超えていたため除きました。四角で取った候補をそのまま「3km圏内の店」として数えると、約3割多く出るということです。
3. 直線距離で1・2・3kmに振り分ける
候補ごとに、店舗の座標との直線距離を計算します。ここで決めておくべきなのは「直線距離で数える」と明記することです。道のりや所要時間で数える方法もありますが、川や線路で迂回が必要な場所では値が大きく変わり、店舗間で比べにくくなります。まず直線距離で同じ物差しをそろえ、商圏を分断する川や幹線道路は地図を見て補足として書き添えるほうが、説明が通りやすくなります。
距離は小数点以下2桁(10m単位)で残しておくと、後で境界付近の店を確認するときに役立ちます。
4. 店名で「同業・あいまい・除外」に振り分ける
ここが一番手間のかかる部分です。APIは店ごとに「主な種別」を返しますが、実例では候補835件のうち805件が「美容室(hair_salon)」でした。種別では一般の美容室と専門店を区別できません。 そこで店名で判定します。
| 区分 | 判定の目安 | 実例での扱い |
|---|---|---|
| 同業 | 店名に「カラー専門」「白髪染め専門」「ヘアカラー専門」など業態を示す言葉がある/同業として知られたチェーンの屋号 | そのまま数える |
| あいまい | 「カラー」「COLOR」「カラーズ」などを含むが、専門店かどうか名前だけでは決められない | 目で確かめる候補に回す |
| 除外 | 調査する側のチェーン自身の店/店名に「カラー」が入る脱毛サロン/ヘナ専門店など業態が違う店/営業中でない店 | 数えない |
判定は、言葉のリストを使って機械的に振り分けると再現できます。同業チェーンの屋号は、一度目で確かめた結果をリストに足していくと、次回からは自動で判定されます。
実例では、3km以内に残った候補644件から、最終的に同業と数えたのは延べ82件です(次の手順でWebで確かめて追加した5件を含みます)。
5. あいまいな店だけを目で確かめる
あいまいな店は、公式サイトや予約サイトのメニュー構成を見て判断します。カット・パーマ・ヘアカラーが並ぶ一般の美容室なのか、ヘアカラーのメニューだけの専門店なのか、という見方です。
実例では、2km以内に入ったあいまいな店を中心に12件をWebで確認しました。結果は次のとおりです。
- 専門店として追加:5件(店名には「専門」が入らないが、Webで業態を確かめて専門店と判断)
- 除外:4件(一般の美容室、エステサロンなど)
- 確認できず:3件(公式の情報が見つからない)
確認できなかった3件は数に入れず、資料の注記に店名を書いて「未確認のため除外」と残しました。また、2〜3kmにあるあいまいな店は確認しておらず数に入れていないため、3km以内の数は少なめに出ている可能性があります。確認した範囲としなかった範囲を資料に書いておくこと、つまり数に入れるか迷った店を黙って足したり引いたりしないことが、後から数字を説明するときの信頼につながります。
6. 半径ごとに数えて一覧にする
最後に、店舗ごとに1km・2km・3km以内の件数を数えて一覧にします。実例の28店舗の分布は次のとおりでした。
| 同業の専門店の数 | 1km以内 | 2km以内 | 3km以内 |
|---|---|---|---|
| 0店 | 18店舗 | 8店舗 | 2店舗 |
| 1店 | 6店舗 | 12店舗 | 5店舗 |
| 2店 | 2店舗 | 1店舗 | 5店舗 |
| 3店 | 2店舗 | 5店舗 | 6店舗 |
| 4店 | — | — | 5店舗 |
| 5店以上 | — | 2店舗 | 5店舗 |
| 全店平均 | 0.6店 | 1.4店 | 2.9店 |
1km以内では約3分の2の店舗が0店ですが、3kmまで広げると0店は2店舗だけになります。同じ28店舗でも、半径をどこに置くかで「競合が少ない」とも「多い」とも言えてしまうので、資料には必ず3つの半径を並べて載せるようにしています。最も多い店舗では2km以内に5店ありました。
一覧には件数だけでなく、店名・距離・住所・口コミ数も一緒に残しておくと、次に数え直すときに増減の理由を追えます。
結果を読むときの判断基準
境界付近の店は「境界付近」として別に書く
前述のとおり、2.1kmや2.3kmにある店は、座標の取り方ひとつで2km以内に入ったり出たりします。資料では「2km以内3店(ほかに2.1km・2.3kmに各1店)」のように、線の外側0.3km程度にある店を別記すると、読み手が数字の揺れを理解できます。
口コミ数で強さを比べるなら、どのサイトの数かを書く
APIでは各店のGoogle口コミ数も取れますが、店によってはGoogleの口コミが0件でも、予約サイトでは88件の口コミを集めている例がありました。お客様がどこで口コミを書くかは店の集客経路によって違うため、Googleの口コミ数だけで競合の強さを判断すると見誤ります。 比べるなら「Google」「予約サイト」と出どころを分けて並べます。
競合の数を売上の予測に使わない
競合が少ない場所が有利とは限らず、多い場所はそれだけ需要があるとも読めます。数えた結果は、「同じ物差しで既存店と比べてどの位置か」「開業前の集客で何を打ち出すか(価格・立地・メニューの差)」を考える材料として使い、売上の見込みは既存店の実績推移から立てるのが筋です。商圏人口の扱いも同じ考え方で、詳しくは「出店候補地の商圏人口を無料で調べる方法」で解説しています。
数えきれない範囲(限界)
この方法でも、次のような店は漏れます。結果を資料にするときは、限界として明記しておきます。
- Googleマップに登録されていない店。 開業直後の店や、店舗情報を作っていない店は検索に出てきません。
- 店名に業態を示す言葉が入らない店。 検索語を増やしても、名前に手がかりがない店は拾いきれません。
- 検索結果に入らなかった店。 テキスト検索は範囲内の店を全件返すわけではありません。実例でも、ある店舗から1.3kmの美容室が、その店舗の検索では出ず、隣の店舗の検索でだけ出てきました。1つの検索語で最大60件という上限もあり、店の多い地域ほど漏れが起こりやすくなります。
- 閉店・移転の反映が遅れている店。 営業状況が「営業中」のまま残っている場合があります。
漏れを減らすには、地元の情報(チラシ・予約サイトのエリア検索・現地の看板)と突き合わせるのが確実です。ただし全店舗に毎回これをやると比較の物差しがそろわなくなるため、APIの結果を基準の数とし、現地で見つけた店は「補足」として別に書くのが扱いやすい形です。
実施前のチェックリスト
- 数える半径(1・2・3kmなど)と「直線距離で数える」ことを先に決めたか
- 業態を表す検索語を3つ程度用意したか
- 店舗・候補地の座標は番地まで一致しているか
- 長方形の角に入った候補を、距離計算で落としたか
- 自社店・業態違い(脱毛サロンなど)・営業中でない店を除外したか
- あいまいな店を目で確かめ、確認できなかった店を注記したか
- 境界付近の店を別記したか
- 調査日と方法、漏れる範囲を資料に書いたか
調べた数字を外部に発信するときの注意点は「自社の実績を数字で発信する前に確かめる3点」も参考にしてください。
まとめ
- 近隣の同業店は、Places APIのテキスト検索で候補を集め、直線距離で半径1・2・3kmに絞り、店名で判定すれば、何店舗分でも同じ物差しで数えられる
- 検索は長方形でしか絞れず、1つの検索語で最大60件まで。角に入った候補は距離計算で落とす(実例では835件中191件が3km外)
- 候補のほとんどは「美容室」という種別で返るので、同業かどうかは店名で判定し、あいまいな店だけ目で確かめる
- 実例の28店舗では、2km以内の同業店は平均1.4店、3km以内は2.9店。半径によって「少ない」とも「多い」とも読めるので、3つの半径を並べて載せる
- 境界付近の店は別記し、Googleマップ未登録の店や名前に手がかりがない店は漏れることを明記する
graciautoでは、美容サロンやFC本部の新店について、商圏や競合の調査資料づくりから、開業前の集客、Googleビジネスプロフィール・ホームページ・LINE公式アカウントの準備までをまとめて支援しています。出店前の調査でお困りの際は、お問い合わせからご相談ください。