SaaSの契約数と利用状況を突き合わせて、使われていないライセンスを洗い出す
各SaaSの利用状況と、契約台帳・人事の在籍データを突き合わせ、使われていないライセンス、退職者に残っているアカウント、契約数と利用者数のずれを一覧にします。担当者の作業は、40本のサービスに1つずつログインして数えることから、出てきた一覧を確認することに変わります。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Power Automate/Python
- 対象業界
- IT・SaaS/その他/製造/金融
- 対象部門
- 情報システム/購買
- 対象業務
- 台帳・マスタ管理/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/判断に時間がかかる
- AIで行う処理
- 判定
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- 既存ツールのみ(小)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 契約台帳を開き、その月に確認するサービスを選ぶ
- サービスの管理画面にログインする
- 契約しているライセンス数と、割り当てられているアカウント数を確認する
- 最終ログイン日が分かるサービスは、利用状況を書き出す
- アカウント一覧と人事の在籍者名簿を見比べ、退職者が残っていないか確認する
- 請求額と契約数が合っているかを会計システムで確認する
- 気になる点を業務部門へメールで確認する
- 結果を契約台帳に記録する
- 毎月1日に処理が始まる
- 自動APIのあるサービスは、アカウント一覧と利用状況を取得する
- 人APIのないサービスは、管理画面からCSVを書き出してフォルダへ入れる
- 自動形式の違う一覧を、共通の項目(アカウント・氏名・プラン・最終利用日・状態)に整える
- 自動人事の在籍データと突き合わせ、退職者・休職者のアカウントを抽出する
- 自動契約台帳の契約数と、割り当て済み数・実際に使われている数を比べる
- 自動一定期間使われていないアカウント、機能が重なるサービスを候補として挙げる
- 自動確認すべき点を、サービスごと・部署ごとに整理する
- 人情報システム部が内容を確認し、業務部門へ照会する
- 人退職者のアカウントは、確認のうえ速やかに停止する
各工程の詳しい説明を読む
- 契約台帳を開き、その月に確認するサービスを選ぶ
- サービスの管理画面にログインする
- 契約しているライセンス数と、割り当てられているアカウント数を確認する
- 最終ログイン日が分かるサービスは、利用状況を書き出す
- アカウント一覧と人事の在籍者名簿を見比べ、退職者が残っていないか確認する
- 請求額と契約数が合っているかを会計システムで確認する
- 気になる点を業務部門へメールで確認する
- 結果を契約台帳に記録する
問題は4つあります。
(a)サービスごとに画面も用語も違う。 「ライセンス」「シート」「メンバー」「編集者」と呼び方が違い、CSVの形式も統一されていません。40本分を毎回読み替えるのは、それだけで疲れる作業です。
(b)最終ログイン日が取れないサービスがある。 取れないサービスでは、使われているかどうかが分かりません。
(c)退職者のアカウントが残る。 全社共通のシステムは退職手続きで止まりますが、部署が個別に契約したサービスは手続きの対象になっていないことがあります。
(d)棚卸しが後回しになる。 障害対応や問い合わせが優先され、四半期に1度の棚卸しが半年空くことがあります。
- 毎月1日に処理が始まる
- 【自動】 APIのあるサービスは、アカウント一覧と利用状況を取得する
- 【人】 APIのないサービスは、管理画面からCSVを書き出してフォルダへ入れる
- 【自動】 形式の違う一覧を、共通の項目(アカウント・氏名・プラン・最終利用日・状態)に整える
- 【自動】 人事の在籍データと突き合わせ、退職者・休職者のアカウントを抽出する
- 【自動】 契約台帳の契約数と、割り当て済み数・実際に使われている数を比べる
- 【自動】 一定期間使われていないアカウント、機能が重なるサービスを候補として挙げる
- 【自動】 確認すべき点を、サービスごと・部署ごとに整理する
- 【人】 情報システム部が内容を確認し、業務部門へ照会する
- 【人】 退職者のアカウントは、確認のうえ速やかに停止する
自動化されるのは「集める」「形式を揃える」「突き合わせる」の3つです。残るのは「解約・減数するかの判断」と「業務部門との調整」です。
02今回想定するシステム構成
【トリガー】毎月1日(時間主導型トリガー) │ ▼ Google Apps Script │ ├──▶ Admin SDK の Reports API(Google Workspace の利用状況) │ GET /admin/reports/v1/usage/dates/yyyy-mm-dd │ ├──▶ APIのある他のSaaS(アカウント一覧・最終ログイン) │ ├──▶ 手で書き出したCSV(APIのないサービス) │ ├──▶ Claude API ── 形式の違う一覧を共通項目へ整え、確認事項を作る │ ├──▶ 人事の在籍データと突合(退職者・休職者) │ └──▶ 棚卸しシート(サービス別・アカウント別)+ 情シスへ通知 │ ▼【人が確認】業務部門へ照会・退職者アカウントの停止
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Python |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 利用状況の取得 | Admin SDK の Reports API | Microsoft Graph のレポート |
| 台帳 | Googleスプレッドシート | Microsoft Lists、kintone |
Google Workspace を使っている会社では、Admin SDK の Reports API から利用状況を取れます。 このAPIには、ドメイン全体の利用状況を返す顧客単位のレポートと、利用者ごとのレポート、操作の記録(アクティビティ)、エンティティ単位のレポートがあります。顧客単位の利用状況は GET https://admin.googleapis.com/admin/reports/v1/usage/dates/yyyy-mm-dd の形で日付を指定して取得します。各レポートで既定かつ最大の対象期間は直近450日です。
Microsoft 365 中心の会社では、同様のレポート機能に置き換えて同じ構成が組めます。
03どうやって実装するのか
処理の起点を決める
毎月1日の定期起動にします。Google Apps Script の時間主導型トリガーで月次の実行を設定します。
退職者のアカウント確認だけは、月1回では遅いことがあります。人事システムの退職者情報を週次で取得し、該当アカウントが残っているサービスを知らせる処理を別に動かしてください。 費用の棚卸しと、アカウントの停止は、必要な速さが違います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 契約台帳 | サービス名、契約数、単価、契約期間、更新日、契約部署、管理者 | スプレッドシート |
| アカウント一覧 | アカウント、氏名、プラン、権限、状態 | 各SaaS(API またはCSV) |
| 利用状況 | 最終ログイン日、期間内の利用回数 | 各SaaS(API またはCSV) |
| 在籍データ | 社員番号、氏名、メールアドレス、在籍区分、退職日、部署 | 人事システム |
| 請求実績 | サービスごとの月額・年額 | 会計システム |
4番目の在籍データが、この構成でもっとも重要な入力です。 これが無いと、アカウントが誰のものかを判定できません。
データの取得方法を決める
APIのあるサービス: アカウント一覧と最終ログイン日を取得します。項目名はサービスごとに違うため、取得後に共通の形へ整えます。
APIのないサービス: 管理画面からCSVを書き出し、所定のフォルダへ入れます。この手作業は残ります。 40本のうち半数程度はここに当たると見ておいてください。書き出し手順をサービスごとに手順書にしておくと、担当が替わっても回ります。
Google Workspace の利用状況: Reports API から取得します。日付を指定して取る形のため、当日や前日のデータはまだ揃っていないことがあります。 数日前の日付を指定する設計にしてください。
人事の在籍データ: 人事システムから月次(退職者は週次)で書き出します。メールアドレスで突合できる形にしておくことが前提です。 氏名での突合は同姓同名で誤ります。
AIへ渡す前に整形する
- 項目名の統一 … 「ライセンス」「シート」「メンバー」を1つの項目に揃えます
- 日付形式の統一 … サービスごとに表記が違います
- アカウントの名寄せ … 会社のメールアドレスを軸に、別ドメインや個人アドレスで登録されたアカウントを拾います
- 共有アカウントの識別 …
info@、sales@のような共有アカウントを別扱いにします。個人に紐づかないアカウントは、退職者判定の対象外にします - 無料枠の分離 … 無料プランのアカウントは費用の対象外ですが、情報の管理の対象にはなります
3番と4番を飛ばすと、退職者判定の結果が信用されなくなります。
AIに処理させる
| 処理 | 内容 |
|---|---|
| 形式の統一 | サービスごとに異なる項目名・表記を、共通の項目へ対応づける |
| 状態の判定 | 利用あり/一定期間利用なし/未ログイン/退職者/共有アカウント |
| 重複の候補 | 機能が重なるサービスの組み合わせを挙げる(チャット、ファイル共有、タスク管理など) |
| 確認事項の作成 | 部署へ聞くべきこと(今後も使うか、誰が使っているか) |
| 台帳との差の指摘 | 契約数と割り当て済み数、請求額の食い違い |
解約や減数の提案を書かせないでください。 「このサービスは解約できます」と書かれた一覧が回ると、業務部門との関係が悪くなります。出すのは「3か月間ログインがありません。今後も必要かご確認ください」までです。
指示内容を固定する
あなたは情報システム部でSaaSの棚卸しを担当しています。
サービスごとの利用状況、契約台帳、在籍データを渡します。
確認すべき点を整理してください。
【厳守事項】
- 解約、減数、プラン変更を提案しないでください。
事実と、部署に確認すべき点だけを書いてください。
- 「不要」「無駄」といった評価を書かないでください。
利用がないことと、不要であることは違います。
- 最終ログイン日が取得できないサービスは「利用状況不明」としてください。
利用がないと判定しないでください。
- 在籍データに無いアカウントは、まず「要確認」としてください。
退職者と断定するのは、退職日が確認できる場合だけです。
- 共有アカウントは個人の利用状況で判定しないでください。
- 契約数と割り当て済み数の差は、計算した値をそのまま書いてください。
金額の試算をしないでください。
- 機能が重なるサービスの指摘は、どの機能が重なるかを具体的に書いてください。
【契約台帳】
{contracts}
【利用状況(サービス別)】
{usage_data}
【在籍データ】
{hr_data}
「利用がないことと、不要であることは違う」という前提を書いておくことが大切です。 年に2回の監査対応でしか使わないサービスは、11か月間ログインがありません。
出力形式を固定する
{
"service": "",
"contract_seats": 0,
"assigned_accounts": 0,
"active_accounts": 0,
"usage_available": true,
"findings": [
{
"type": "未利用 | 退職者の可能性 | 要確認 | 契約数の差 | 機能の重複",
"account": "",
"detail": "",
"last_login": ""
}
],
"questions_for_department": [],
"renewal_date": "",
"days_to_renewal": 0
}
usage_available が false のサービスは、判定の対象から外して一覧に表示します。 「利用状況が取れないサービス」として可視化しておくことに意味があります。
days_to_renewal は、確認を急ぐべきサービスを見分けるために持ちます。年間契約は更新日を過ぎると1年動かせません。
システムへ連携する
| 出し先 | 内容 |
|---|---|
| 棚卸しシート | サービス別・アカウント別の状態と確認事項 |
| 退職者アカウントの一覧 | 週次。費用の一覧とは別に、すぐ対応する |
| 部署への照会 | 契約部署の管理者へ、確認事項をまとめて送る(人が確認してから) |
| 契約台帳の更新 | 確認の結果を反映(人が入力) |
契約台帳を自動で書き換えないでください。 台帳は契約の記録であり、突合の結果で上書きするものではありません。
人が確認する
全件、人が確認します。 判断は3つに分かれます。
| 判断 | 誰が決めるか |
|---|---|
| 退職者アカウントの停止 | 情報システム部(在籍データで確認のうえ、速やかに) |
| 未利用アカウントの扱い | 契約部署の管理者(今後も使うかの判断) |
| 解約・減数・プラン変更 | 契約部署と購買(更新日から逆算して) |
1つ目だけは、費用の話とは切り離して急いでください。 残っていること自体が問題になります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 最終ログイン日が取れない | 「利用状況不明」とする。未利用と判定しない |
| 在籍データに無いアカウント | 「要確認」にする。業務委託、派遣、退職者のいずれかを人が確認 |
| 共有アカウント | 個人の判定から外す。ただし、退職者が使っていた可能性は別途確認する |
| 年に数回しか使わないサービス | 部署の回答を台帳に記録し、次回以降は「低頻度利用」として扱う |
| 更新日が近いサービス | 確認を優先する。更新後は1年動かせないことを明示する |
| 無料プランへ落とすとデータが消える | 解約・降格の前に、データの保全を確認する項目を設ける |
| 部署が個別契約しているサービスが台帳にない | 会計システムの支払先から候補を拾い、台帳への追加を促す |
| 同じ人が複数アカウントを持っている | 重複として挙げる。役割が違う場合もあるため人が判断 |
| 利用状況の取得が失敗した | 前回の値を使い回さない。取得できなかったことを記録する |
記録を残す
- サービスごとの契約数・割り当て数・利用者数(月ごと)
- 判定結果と、人が変更した内容
- 部署への照会と回答
- 停止したアカウントと停止日
- 解約・減数した内容と、その後の請求額
1番目を月ごとに残すと、推移が見えます。 契約数が増え続けているサービス、利用者が減り続けているサービスが分かり、更新の交渉材料になります。
利用状況のデータは、個人がいつ何を使ったかの記録でもあります。保存期間と閲覧範囲を決めてください。
04実装レベルの3段階
半自動化で30分が8分程度になります。 本格構成にしても、管理画面からのCSV書き出しは残るため、時間の差は大きくありません。本格構成の価値は、退職者アカウントを週次で見つけられることにあります。
05工数削減シミュレーション
導入後 40件 × 8分 ÷ 60 = 5.3 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 部署ごとに契約したSaaSが20本以上あり、契約数と実際の利用者数が合っているか把握できていない会社。退職者のアカウントが残っていないかを定期的に確認したい場合。
- SaaSが数本で、情報システム部門がすべて把握している場合。SaaS管理の専用サービスをすでに導入している場合。
07最小構成で試す方法
- 契約数の多いサービスを3本選ぶ
- それぞれの管理画面からアカウント一覧をCSVで書き出す
- 人事から在籍者の一覧(メールアドレス付き)をもらう
- 表計算で突き合わせ、在籍データに無いアカウントを数える
- 最終ログイン日が90日以上前のアカウントを数える
4番の結果で、この棚卸しの価値が分かります。 在籍データに無いアカウントが1件でも見つかれば、それだけで実施する理由になります。
判断の目安は次のとおりです。
| 3本の結果 | 判断 |
|---|---|
| 在籍データに無いアカウントがあった | すぐに全サービスへ広げる |
| 未利用アカウントが1割以上あった | 半自動化に進む価値がある |
| どちらも無かった | 頻度を落としてよい。四半期に1度で足りる |
この段階では生成AIを使いません。 表計算の突き合わせで十分です。サービスが増えて形式の違いが負担になった段階で、整形の部分にAIを使います。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 最終ログイン日が取れないサービスがある | 「利用状況不明」として分ける。未利用と混ぜない |
| 氏名での突合が同姓同名で誤る | メールアドレスを軸に突合する |
| 共有アカウントが退職者として上がる | 共有アカウントの一覧を持ち、判定から外す |
| 業務委託・派遣のアカウントが在籍データにない | 対象者の一覧を別に用意する |
| 「不要」と書かれた一覧が部署に回って揉める | 評価を書かせない。確認事項の形にする |
| 更新日を過ぎてから気づく | 更新日までの日数を一覧に出し、60日前に通知する |
| 取得に失敗した月のデータが前回値で埋まる | 取得失敗を記録し、空欄のままにする |
| 解約したらデータが消えた | 解約・降格の前にデータ保全の確認項目を通す |
| 個人の利用状況が評価に使われる | 目的を明示し、閲覧範囲を限定する |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: SaaSのアカウント一覧、利用状況、在籍データ、契約金額。アカウントと利用状況は、誰がいつ何を使ったかという個人の活動記録です。
- 監視目的で使わない … 利用状況は、ライセンスの要否を見るために集めるものです。個人の勤務状況の把握や評価に使わないことを、導入時に明示してください。 目的外に使われると、現場の協力が得られなくなります
- 退職者アカウント … 棚卸しで見つかった退職者のアカウントは、費用の判断を待たずに停止してください。残っていること自体が情報の管理上の問題です
- 外部AIへの入力 … アカウント名(多くはメールアドレス)が外部のサービスへ渡ります。氏名やメールアドレスを渡さず、アカウントIDに置き換えて整形させる方法も取れます。 判定に必要なのは「在籍しているか」「最終利用日」であり、氏名は必須ではありません
- 契約金額 … 取引条件にあたります。渡す必要がなければ、整形の対象から外します
- 学習利用 … 入力を学習に使わない設定または契約のサービスを選びます
- 自動実行してよい範囲 … 収集、整形、突合、確認事項の作成までです。アカウントの停止、解約、減数は、確認のうえ人が行います。 特に自動停止は、業務を止める事故につながります
誤りが起きた場合のリスクは、使用中のアカウントを止めて業務を止めること、逆に退職者のアカウントを見落とすことです。前者は影響が大きく、後者は気づかれにくいという違いがあります。
10まず何から始めるか
1週目:在籍データを受け取る形を決める
人事から、メールアドレス付きの在籍者一覧を定期的に受け取る形を決めます。ここが決まらないと、この棚卸しは成立しません。
2週目:3サービスで突き合わせる
契約数の多い3本で、アカウント一覧と在籍データを突き合わせます。在籍データに無いアカウントと、90日以上未ログインのアカウントを数えます。
3〜4週目:対象を全サービスに広げる
契約台帳を整え、40本分の書き出し手順を作ります。APIのあるサービスから順に自動取得へ切り替えます。
2か月目以降: 退職者チェックを週次で回し、更新日の60日前通知を加えます。月ごとの推移を残し、契約更新の交渉材料にしてください。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Google Workspace の顧客単位の利用状況レポートを GET https://admin.googleapis.com/admin/reports/v1/usage/dates/yyyy-mm-dd の形式で日付を指定して取得できること。各レポートの既定かつ最大の対象期間が直近450日であること | Google for Developers: Reports API - Customers Usage Report | 2026-09-15 |
| Admin SDK の Reports API に、操作の記録(activities)、顧客単位の利用状況(customerUsageReports)、エンティティ単位(entityUsageReports)、利用者単位(userUsageReport)のリソースがあること | Google for Developers: Admin SDK Reports API リファレンス | 2026-09-15 |
SaaSごとのAPIの有無、取得できる項目、最終ログイン日の取得可否は、サービスによって異なります。この部分は利用しているサービスごとの個別確認が必要です。 利用状況データの取り扱いは、自社の個人情報保護方針と労使の取り決めに照らして判断してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0088)についてのご相談はこちらから。
