美容サロンの再来率UP!GASで施術履歴管理と次回予約リマインドを自動化する方法
美容サロンの施術履歴と次回予約を、Googleスプレッドシートで一元管理します。GASで予約前の通知を自動化し、記録漏れや来店忘れを減らす仕組みを、約90分で作る方法を紹介します。
📌 この記事のポイント
- 再来店率の数字は目安 — 「新規顧客の再来店率は40%程度」という数値は一般的な経験則であり、特定の調査に基づくものではありません
- 施術履歴を共有 — 紙や記憶に頼らず、カウンセリングに必要な情報を確認できます
- GASとLINE WORKSで予約通知を自動化 — 無料で始められる構成を紹介します。ただし、Bot APIの利用条件は導入前に公式情報を確認してください
- 予約日の7日前と1日前に通知 — キャンセル率低下などが期待されますが、効果は一般的な知見であり、サロンごとに検証が必要です
- 約90分で初期設定 — まずは代表者1名と少数の顧客でテストします
- 運用上の失敗を先回り — API仕様変更、入力漏れ、実行時間制限への対策を確認します
編集長の見解: 高価な予約管理システムを導入する前に、GASとLINE WORKSで小さく試す方法があります。まず施術履歴と次回予約を同じ表で管理し、通知の送信結果を自店のデータで確認しましょう。無料で始められる場合でも、個人情報の管理と公式仕様の確認は必要です。
🎯 施術履歴と次回予約を管理する理由
美容サロンでは、初回来店後の顧客に再来店してもらう仕組みが重要です。
再来店率の数字は自店の確認を優先
美容業界では、新規顧客の再来店率が40%程度という経験則が語られることがあります。ただし、この数値は特定の一次情報源に基づくものではありません。地域、メニュー、価格帯、来店目的で結果は変わります。
そのため、記事内の数値は自店の実績を判断する基準ではなく、確認を始めるきっかけとして扱います。まずは直近3か月の新規顧客数と再来店数を集計しましょう。
再来店が1回増えると、新規顧客を広告で獲得する場合とは異なる改善効果が見込めます。実際の効果額は、客単価や来店頻度によって異なります。
手作業で起きやすい問題
紙や記憶に頼った管理には、次のような問題があります。
| 管理方法 | 起きやすい問題 | 経営への影響 |
|---|---|---|
| 紙のカルテ | 記入漏れ、紛失、検索に時間がかかる | カウンセリングの質が下がり、顧客を待たせる |
| 記憶頼み | 担当者しか情報を把握していない | 引き継ぎが難しくなる |
| 表計算ソフトの個別管理 | 更新が分散し、重複入力が起きる | 情報の鮮度が下がる |
特に注意したいのが、次回予約の通知漏れです。予約が1〜3か月先になると、顧客もスタッフも予定を確認しにくくなります。
リマインド送信で期待できること
予約前の通知には、次の効果が期待されます。ただし、これらは一般的なマーケティング知見であり、特定の調査事例を示すものではありません。効果を断定せず、自店の送信数やキャンセル数で検証してください。
- 予約内容の再確認: 来店日時や施術内容を顧客が確認できます
- 変更連絡の早期化: 予定変更がある場合に、早めの連絡を促せます
- 電話対応の削減: 定型的な確認連絡を自動化できます
通知は顧客との関係を補助する手段です。次は、導入に必要なものを確認します。
🔧 準備するものと費用
この仕組みは、次の3つで始められます。LINE WORKSのBot APIなどはプラン条件が変わる可能性があるため、契約前に公式情報を確認してください。
| 必要なもの | 費用の目安 | 用途 |
|---|---|---|
| Googleアカウント | 無料 | スプレッドシートとGASの実行環境 |
| LINE WORKSアカウント | 無料プランあり | 顧客への通知送信 |
| パソコンと通信環境 | 既存環境を利用 | 初期設定と運用 |
Googleアカウント
GASを使うにはGoogleアカウントが必要です。GmailやGoogleドライブを利用している場合は、そのアカウントを使えます。
スタッフ間で共有する場合は、アカウントの共有ではなく、必要なメンバーに権限を付与してください。顧客情報を扱うため、公開設定には注意が必要です。
LINE WORKSアカウント
LINE WORKSは、業務向けの連絡サービスです。料金や利用人数はプランによって異なります。最新の料金と機能は、LINE WORKS公式サイトで確認してください。
小規模サロンでは、次のような始め方が考えられます。
- 代表者1名で試す: 顧客数を限定して送信テストを行う
- スタッフを追加する: 権限と担当範囲を決めて共有する
- 有料プランを比較する: 必要なID数とBot APIの条件を確認する
無料プランでBot APIが利用できるかは、契約プランや最新仕様によって異なる場合があります。導入前に、必ずLINE WORKSの公式ドキュメントで確認してください。
スプレッドシートの設計
次の3シートを1つのスプレッドシートに作成します。
顧客情報シート
| 列 | 例 | 説明 |
|---|---|---|
| 顧客ID | C001 | 顧客を識別する番号 |
| 顧客名 | 田中 美咲 | 顧客名 |
| 電話番号 | 090-1234-5678 | 連絡先 |
| LINE WORKS ID | tanaka.misaki | 通知先ID |
| 初回来店日 | 2026/04/01 | 初回来店日 |
| 累計来店回数 | 3 | 来店回数 |
施術履歴シート
| 列 | 例 | 説明 |
|---|---|---|
| 顧客ID | C001 | 顧客情報と紐づけるID |
| 施術日 | 2026/05/15 | 施術日 |
| 施術内容 | カット・カラー | 施術の種類 |
| 使用薬剤 | A社カラー 7N | 薬剤やカラー |
| 施術者 | 佐藤 | 担当スタッフ |
| 次回予約日 | 2026/07/15 | 次回予約日 |
| メモ | ハイライト希望 | 要望や特記事項 |
予約管理シート
| 列 | 例 | 説明 |
|---|---|---|
| 予約ID | R001 | 予約を識別する番号 |
| 顧客ID | C001 | 顧客情報と紐づけるID |
| 予約日 | 2026/07/15 | 予約日 |
| 予約時間 | 10:00 | 予約時間 |
| 施術内容 | カット・カラー | 予約内容 |
| リマインド送信済み | FALSE | 送信済みかどうか |
| ステータス | 確定 | 確定、キャンセル、完了など |
個人情報は必要な範囲だけ登録し、共有権限を絞ります。準備ができたら、次は処理を実装します。
⚙️ GASで自動化する仕組み
ここでは、次の2つを実装します。
- 施術履歴をスプレッドシートに記録する
- 予約日が近い顧客を抽出して通知する
スプレッドシートとGASの準備
Googleスプレッドシートに「顧客情報」「施術履歴」「予約管理」の3シートを作成します。
次に、スプレッドシートの「拡張機能」から「Apps Script」を開きます。初回実行時は、Googleアカウントの権限確認が表示されます。
施術履歴を記録するコード
function recordTreatment(customerId, treatmentDate, treatmentContent, productsUsed, staffName, nextAppointmentDate, memo) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const historySheet = ss.getSheetByName('施術履歴');
const newRow = historySheet.getLastRow() + 1;
historySheet.getRange(newRow, 1, 1, 7).setValues([[
customerId,
treatmentDate,
treatmentContent,
productsUsed,
staffName,
nextAppointmentDate,
memo
]]);
updateCustomerVisitCount(customerId);
}
この関数は、施術後に手動で呼び出すか、フォームなどの入力処理から呼び出します。updateCustomerVisitCount は別途実装が必要です。
予約日の近い顧客を抽出するコード
function extractUpcomingAppointments() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const appointmentSheet = ss.getSheetByName('予約管理');
const customerSheet = ss.getSheetByName('顧客情報');
const appointmentData = appointmentSheet.getDataRange().getValues();
const customerData = customerSheet.getDataRange().getValues();
const customerMap = {};
for (let i = 1; i < customerData.length; i++) {
const customerId = customerData[i][0];
customerMap[customerId] = {
name: customerData[i][1],
lineWorksId: customerData[i][3]
};
}
const today = new Date();
today.setHours(0, 0, 0, 0);
const reminderTargets = [];
for (let i = 1; i < appointmentData.length; i++) {
const appointmentId = appointmentData[i][0];
const customerId = appointmentData[i][1];
const appointmentDate = new Date(appointmentData[i][2]);
const reminderSent = appointmentData[i][5];
const status = appointmentData[i][6];
if (!reminderSent && status === '確定') {
const daysUntilAppointment = Math.ceil(
(appointmentDate - today) / (1000 * 60 * 60 * 24)
);
if (daysUntilAppointment === 7 || daysUntilAppointment === 1) {
const customer = customerMap[customerId];
if (customer) {
reminderTargets.push({
appointmentId,
customerName: customer.name,
lineWorksId: customer.lineWorksId,
appointmentDate,
daysUntil: daysUntilAppointment
});
}
}
}
}
return reminderTargets;
}
この例では、予約日の7日前または1日前の予約を抽出します。7日前と1日前の両方で送信する場合は、送信済みフラグを1つではなく、送信日ごとに管理してください。
トリガーを設定する
GASのトリガー機能を使うと、処理を定期実行できます。
| 設定項目 | 設定値 |
|---|---|
| 実行する関数 | sendReminders |
| 実行する時間 | 午前9時〜10時 |
| 頻度 | 日次タイマー |
| 通知 | エラー発生時のみ |
GASの時間主導トリガーは、指定した時間帯の中で実行されます。毎朝9時ちょうどの実行を保証するものではありません。
仕組みができたら、次はLINE WORKSへの送信設定です。
💬 LINE WORKSへ通知を送る
Bot APIの設定
LINE WORKSでBot APIを使う場合は、管理画面でBotを作成し、必要な認証情報を発行します。画面名や認証方式は変更される可能性があるため、公式ドキュメントを確認してください。
一般的には、次の情報を使います。
- Bot ID
- Consumer Key
- Consumer Secret
- Server Access Token
認証情報はコードに直接書かず、GASのスクリプトプロパティに保存します。共有シートや公開リポジトリには記載しないでください。
メッセージ送信コード
エンドポイントや認証方式は、LINE WORKS公式APIドキュメントの最新仕様に合わせてください。
function sendLineWorksMessage(lineWorksId, message) {
const accessToken = PropertiesService
.getScriptProperties()
.getProperty('LINE_WORKS_ACCESS_TOKEN');
const botId = PropertiesService
.getScriptProperties()
.getProperty('LINE_WORKS_BOT_ID');
const url =
'https://www.worksapis.com/v1.0/bots/' +
botId +
'/users/' +
lineWorksId +
'/messages';
const payload = {
content: {
type: 'text',
text: message
}
};
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + accessToken
},
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode();
if (responseCode < 200 || responseCode >= 300) {
logError('LINE WORKS送信エラー', response.getContentText());
return false;
}
return true;
}
通知文の例
顧客名や予約日時を差し込んで通知します。
function sendReminders() {
const reminderTargets = extractUpcomingAppointments();
for (const target of reminderTargets) {
const appointmentDate = Utilities.formatDate(
target.appointmentDate,
'Asia/Tokyo',
'yyyy/MM/dd'
);
const daysLabel = target.daysUntil === 7 ? '1週間後' : '明日';
const message =
'こんにちは、' + target.customerName + '様。\n\n' +
'次回ご予約の' + daysLabel + '前になりましたので、ご案内します。\n\n' +
'予約日: ' + appointmentDate + '\n' +
'ご予約内容: 予約管理シートの内容をご確認ください。\n\n' +
'変更やキャンセルがある場合は、サロンまでご連絡ください。';
const success = sendLineWorksMessage(
target.lineWorksId,
message
);
if (success) {
markReminderSent(target.appointmentId);
}
}
}
通知文は、顧客が返信や変更連絡をしやすい内容にします。実際の送信前に、テスト用アカウントで表示を確認してください。
送信失敗時のログ
function logError(errorType, errorMessage) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const logSheet = ss.getSheetByName('エラーログ');
const newRow = logSheet.getLastRow() + 1;
logSheet.getRange(newRow, 1, 1, 3).setValues([[
new Date(),
errorType,
errorMessage
]]);
}
エラーの発生日時、種類、内容を記録すると、原因を調べやすくなります。
function sendErrorAlert(errorType, errorMessage) {
const recipient = Session.getActiveUser().getEmail();
const subject = '【美容サロン自動化】エラー発生: ' + errorType;
const body =
'以下のエラーが発生しました。\n\n' +
errorMessage;
MailApp.sendEmail(recipient, subject, body);
}
送信処理の実装後は、テストと運用ルールを整えます。
📅 導入から定着までの運用フロー
中小規模のサロンでは、代表者1名と少数の顧客で始めると、問題を見つけやすくなります。
💡 導入のポイント: 最初から全機能を作り込まず、予約通知だけを小さく試します。送信結果と顧客からの反応を確認してから、施術履歴の項目を増やしましょう。
顧客情報、施術履歴、予約管理の3シートを作成します。まずは少数の顧客データで始めます。
コードを追加し、スクリプトプロパティにLINE WORKSの認証情報を登録します。
テスト用の予約を登録し、通知の宛先、日時、文面を確認します。
日次トリガーを設定します。最初の1週間は、実行履歴を毎日確認します。
施術後の入力手順と、入力内容の確認方法をスタッフに共有します。
スタッフが守る入力ルール
自動化の効果は、元データの正確さに左右されます。次のルールを決めてください。
- 施術後に記録する: その日のうちに施術内容を入力します
- 予約日を登録する: 次回予約が決まった時点で予約管理シートに入力します
- IDを確認する: LINE WORKS IDの入力ミスを防ぎます
施術履歴は単なる記録ではありません。前回の施術内容を確認できれば、次回のカウンセリングで具体的な提案ができます。
月次で効果を確認する
導入後は、次の成果指標を毎月確認します。
| 指標 | 計算方法 | 見直し方 |
|---|---|---|
| 再来店率 | 再来店した顧客数 ÷ 新規顧客数 | 通知時期や接客内容を確認 |
| 次回予約率 | 次回予約を設定した顧客数 ÷ 施術完了顧客数 | 予約提案の方法を見直す |
| 無断キャンセル率 | 無断キャンセル数 ÷ 総予約数 | 通知文と送信時期を確認 |
| 通知成功率 | 成功数 ÷ 送信試行数 | IDとAPI設定を確認 |
通知によるキャンセル率低下や満足度向上は、一般的な知見として期待されるものです。自店での効果を断定せず、導入前後の数字を比較してください。
改善サイクルを回すことで、サロンに合う通知のタイミングが見つかります。次は、運用で起きやすい失敗を確認します。
⚠️ 失敗しやすい3つのパターン
パターン1: API仕様変更で送信が止まる
LINE WORKSのAPIは、認証方式やエンドポイントが変更される可能性があります。
原因: 公式情報を確認せず、古いコードを使い続けることです。
回避策:
- LINE WORKSの開発者向け情報を定期的に確認する
- エラーログを確認する
- 送信失敗時のメール通知を設定する
パターン2: 顧客情報の入力漏れ
予約管理シートに入力漏れがあると、通知対象から外れる場合があります。
原因: 施術後や予約確定時の入力が、担当者の記憶に依存することです。
回避策:
- 入力を施術フローの必須手順にする
- 未入力の予約を確認するチェック処理を作る
- 毎週、予約管理シートを確認する
パターン3: GASの実行時間制限を超える
GASには1回の実行時間に制限があります。Googleアカウントの種類やGoogle Workspaceの契約によって上限が異なります。無料の個人アカウントでは、一般に1回あたり6分が目安です。最新の上限は、Google公式ドキュメントで確認してください。
原因: 顧客数や予約件数が増え、1回の処理量が大きくなることです。
回避策:
- 対象を分割して処理する
- 古いデータをアーカイブする
- データをまとめて取得し、読み書きの回数を減らす
⚠️ 注意: 実行時間の上限は、無料の個人アカウントとGoogle Workspaceで異なる場合があります。大規模な処理が必要になったら、公式仕様を確認して構成を見直してください。
APIと実行時間の制限を把握しておけば、運用停止のリスクを抑えられます。
❓ よくある質問
Q1: LINE WORKSの無料プランで使える範囲は?
LINE WORKSの料金と機能は、プランによって異なります。Bot APIの利用可否や上限も変わる可能性があるため、導入前に公式サイトと公式ドキュメントで最新情報を確認してください。
最初は代表者1名と少数の顧客でテストし、運用できることを確認してからスタッフを追加します。
Q2: 施術履歴の項目はどう設計する?
最低限、次の項目を用意します。
| 項目 | 理由 |
|---|---|
| 顧客ID | 顧客情報との紐づけに必要 |
| 施術日 | 来店頻度の確認に使う |
| 施術内容 | 顧客の好みを把握する |
| 使用薬剤 | トラブル時の確認に使う |
| 施術者 | 引き継ぎや担当確認に使う |
| 次回予約日 | 通知処理に必要 |
| メモ | 要望や注意点を残す |
最初は項目を絞り、入力が定着してから増やします。
Q3: 予約システムと併用できる?
予約システムからCSVを出力できる場合は、スプレッドシートに取り込んで処理できます。CSVの自動取り込みには制限があるため、完全自動化には予約システム側のAPI連携が必要な場合があります。
Q4: セキュリティ面で注意することは?
次の対策を行ってください。
- 共有権限を絞る: 必要なスタッフだけにアクセス権を付与します
- 認証情報を分離する: APIトークンはスクリプトプロパティに保存します
- バックアップする: 定期的にデータを複製します
- 利用目的を確認する: 顧客への説明やプライバシー方針を確認します
Q5: 通知の頻度はどう設定する?
次の2段階が一例です。
| 時期 | 内容 | 目的 |
|---|---|---|
| 予約日の7日前 | 予約内容の確認 | 変更連絡の機会を作る |
| 予約日の1日前 | 翌日の来店確認 | 来店忘れを防ぐ |
この設定でキャンセル率が下がるとは限りません。顧客の反応と自店の数字を見ながら調整してください。
Q6: GASが動かなくなったら?
次の順に確認します。
- エラーログ: 記録されたエラー内容を確認します
- 実行履歴: GASエディタで失敗箇所を確認します
- API仕様: LINE WORKSの公式情報を確認します
- 認証情報: トークンの期限や設定を確認します
解決しない場合は、Google Apps ScriptやLINE WORKSの公式サポート情報を確認してください。
📚 参考情報・出典
| 参考情報 | URL | 内容 |
|---|---|---|
| Google Apps Script公式ドキュメント | https://developers.google.com/apps-script | GASの構文、トリガー、API |
| LINE WORKS公式サイト | https://line.worksmobile.com/jp/ | Bot API、料金、最新仕様 |
| Google Apps Scriptの割り当てと上限 | https://developers.google.com/apps-script/guides/services/quotas | 実行時間などの制限 |
| Googleスプレッドシートヘルプ | https://support.google.com/docs/ | シートの操作と共有設定 |
再来店率やリマインドの効果について、この記事では特定の調査結果として数字を提示していません。一般的な経験則やマーケティング知見として紹介し、導入後は自店のデータで確認してください。
まとめ:美容サロンが今日から始める予約通知
この記事では、GASとLINE WORKSを使い、施術履歴と次回予約を管理する方法を紹介しました。
- 施術履歴と予約情報を一元管理する
- 予約日の7日前と1日前に通知する
- APIの利用条件と実行時間の上限を確認する
- 導入前後の再来店率やキャンセル率を自店で比較する
- まず代表者1名と少数の顧客で試す
編集長の最終見解: この仕組みは、顧客との関係づくりを補助する小さな業務改善です。効果を断定せず、まずは1か月間、通知数や変更連絡、再来店状況を記録してください。結果を見ながら、通知文や運用方法を自店に合わせて調整しましょう。
次のステップとして、以下の記事も参考にしてください。
- GASで売上管理を自動化する方法 — 売上データを集計し、経営判断に活用する方法
- 美容サロン向け顧客管理の自動化 — 顧客情報と次回予約を管理する方法
Mira / AI経営ラボ 編集長