見出し画像

【超有料級!15分で完了!】店舗経営者なら知っておきたい!Googleマップで競合店舗を徹底調査する方法!

はじめに

Google Maps APIとGASを用いて特定の地域にある「居酒屋」、「パーソナルジム」、「エステサロン」などといった調査したい業種の店舗情報を一括でGoogleスプレッドシートに収集する方法をまとめました。


取得できるデータ

  • 店名

  • 住所

  • ウェブサイト

  • 評価

  • 総口コミ数

  • 口コミ 上位表示5件まで

    • ■の記号で一つ一つの口コミを分けています

取得例


例:川崎市内の美容クリニックの店舗情報

作業流れ

1. Google Cloud Platform で API キーを取得

  1. Google Cloud Platform にアクセスし、プロジェクトを選択または新規作成します。

    1. 無料で使用できるリクエスト数が決まっているのでご注意ください。

      1. 大量の店舗情報を収集しなければ問題ないと思います。

  2. 「APIとサービス」のダッシュボードに移動し、「+ APIとサービスを有効化」をクリックします。

  3. 「Places API」と検索し、選択して「有効化」をクリックします。

  4. APIが有効になったら、認証情報画面に移動し、「認証情報を作成」からAPIキーを作成します。


赤下線部分をクリックするとAPIキーが表示されます

5.APIキーをメモしておきます(このキーは後でスクリプトに使用します)。

2. Google スプレッドシートの準備

  1. Google スプレッドシート にアクセスし、新しいスプレッドシートを作成します。

  2. スプレッドシートに名前を付け、必要に応じてシートの初期設定を行います。

3. Google Apps Script を作成

スプレッドシートで「拡張機能」メニューを開き、「Apps Script」を選択します。

赤下線をクリックでスクリプトエディタが起動します。
  1. Apps Script のエディタが開きますので、新規スクリプトファイルに下記のコードをコピー&ペーストします。

  2. コード中の YOUR_API_KEY 部分を、Google Cloud Platform で取得した 1.5でメモしたAPI キーに置き換えます。

  3. コード内の調べたい業種、調べたい地域を編集します。

    • それ以外のコードはいじらないでください

  4. スクリプトファイルに名前を付けます(例:SearchBeautyclinic)。

調べたい業種、調査したい地域に書き換える

4. スクリプトの実行

  1. Apps Script のエディタで、実行したい関数(この場合は SearchBeautyclinic)を選択します。

  2. 実行ボタン(▶アイコン)をクリックします。

  3. 初回実行時には、Google からの認証が求められますので、指示に従ってアクセス許可を与えます。

    1. このアプリはGoogleで確認されていませんと出ますが、左下の「詳細」をクリックして進めます。

5. 結果の確認

  • スクリプトが正常に実行されると、スプレッドシートに店舗の名前、住所、ウェブサイトの URL が追加されます。

  • エラーが発生した場合は、Apps Script エディタの「ログ」や「実行ログ」を確認して、問題の原因を特定します。

注意事項

  • Google Maps API の使用には制限があり、大量のリクエストや誤った使い方をすると追加料金が発生する可能性があります。APIの利用規約と料金設定を事前に確認してください。

    • 一回でおおよそ200店舗くらいの情報を取得くらいが限界だと思います。調査地域を広げすぎないようにしましょう。

  • スクリプトを実行する際には、Googleアカウントにログインしている必要があります。

  • リクエスト数が多くデータの取得が5分以上かかるとタイムオーバーでリクエストが中断されます。

コード

function searchbeautyclinicByCity() {
  const apiKey = 'YOUR API KEY'; // Google Cloud Platformで取得したAPIキー
  const baseSearchQuery = '居酒屋'; // 検索クエリ(検索したい業種)
  const cities = ['hogehoge','hogehoge'  ]; // 検索したい都道府県、市町村区を記入最大10地域まで複数の地域名で検索したい場合は,で区切ってください

  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const options = {
    'method' : 'get',
    'contentType': 'application/json',
  };

  cities.forEach(city => {
    const searchQuery = `${city} ${baseSearchQuery}`; // 市町村区ごとに検索
    const sheet = spreadsheet.getSheetByName(city) || spreadsheet.insertSheet(city);
    sheet.clear(); // 既存のデータをクリア
    sheet.appendRow(['店名', '住所', 'ウェブサイト', '評価', '総口コミ数', '口コミ']); // カラムタイトルを設定

    const url = `https://maps.googleapis.com/maps/api/place/textsearch/json?query=${encodeURIComponent(searchQuery)}&language=ja&key=${apiKey}`; // 言語設定を追加
    const response = UrlFetchApp.fetch(url, options);
    const json = JSON.parse(response.getContentText());
    const results = json.results;

    results.forEach(place => {
      const placeId = place.place_id;
      const detailsUrl = `https://maps.googleapis.com/maps/api/place/details/json?placeid=${placeId}&language=ja&key=${apiKey}`; // 詳細リクエスト
      const detailsResponse = UrlFetchApp.fetch(detailsUrl, options);
      const detailsJson = JSON.parse(detailsResponse.getContentText());

      const name = detailsJson.result.name;
      const address = detailsJson.result.formatted_address;
      const website = detailsJson.result.website || '情報なし';
      const rating = detailsJson.result.rating || '情報なし';
      const totalReviews = detailsJson.result.user_ratings_total || '情報なし'; // 総口コミ数
      const reviews = detailsJson.result.reviews
        ? detailsJson.result.reviews
            .slice(0, 10) // 最大10件の口コミ
            .map(review => '■ ' + review.text) // 先頭に■を追加
            .join('\n') // 改行で区切る
        : '口コミ情報なし';

      // 取得した情報をスプレッドシートに追加
      sheet.appendRow([name, address, website, rating, totalReviews, reviews]);
    });
  });
}

最後に

・Googleの口コミ評価が高い競合店舗がどういう施策をしているのか、口コミからどんなサービス、おもてなしをして高い評価を得ているのか。
・逆に悪い口コミからこういう部分をお客様はみているのか、ウチもこの部分に気を付けよう。
といったように今後講じていく施策や提供していくサービスの良い判断材料が収集できると思います。

今後も店舗経営に役立つ情報を発信していく予定なのでぜひフォロー&いいねのほどよろしくお願いいたします。


この記事が気に入ったらサポートをしてみませんか?