競合の製品・価格ページを毎週巡回して変更点を一覧にする
競合8社の製品・価格・事例ページを毎週決まった曜日に取得し、前回分との差分から意味のある変更だけを拾って一覧にします。担当者の作業は、各社のサイトを開いて読み比べることから、上がってきた変更点を見て社内に流すかを決めることに変わります。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Make/n8n/Power Automate/Python/Zapier
- 対象業界
- EC/IT・SaaS/商社/小売/製造
- 対象部門
- マーケティング/営業
- 対象業務
- 情報検索/比較検討/集計・分析
- 主な課題
- 人手が足りない/判断に時間がかかる/情報が見つからない
- AIで行う処理
- エージェント
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当者が週に1回、競合8社のサイトを順番に開く
- 価格ページを見て、前に見たときと違う点がないかを思い出しながら確認する
- 機能ページ、事例ページ、お知らせを同様に見る
- 変わっていそうな箇所をスクリーンショットに撮る
- 気づいた点をスプレッドシートに書く
- 重要そうなものを Slack の営業チャンネルに投稿する
- 四半期ごとに、競合比較表を作り直す
- 毎週月曜の朝7時に巡回が自動で始まる
- 自動対象ページを1件ずつ取得する(間隔を空けて順番に)
- 自動HTMLから本文テキストを抜き出し、表記を揃える
- 自動前回保存分と比較して、変わった箇所を取り出す
- 自動変更が意味のあるものかをAIが判定し、区分と影響度を付ける
- 自動意味のある変更だけを一覧にして Slack へ投稿する
- 人担当者が一覧を見て、営業へ流すもの・調べ直すものを決める
- 人重要な変更は、担当者が実際のページを開いて裏を取る
- 自動今回取得分を次回比較用に保存する
各工程の詳しい説明を読む
- 担当者が週に1回、競合8社のサイトを順番に開く
- 価格ページを見て、前に見たときと違う点がないかを思い出しながら確認する
- 機能ページ、事例ページ、お知らせを同様に見る
- 変わっていそうな箇所をスクリーンショットに撮る
- 気づいた点をスプレッドシートに書く
- 重要そうなものを Slack の営業チャンネルに投稿する
- 四半期ごとに、競合比較表を作り直す
問題は4つあります。
(a)「前と違う」が記憶頼りになる。 前回のページを保存していないため、細かい変更は気づけません。価格表の注記が1行増えたような変更は、まず見落とします。
(b)巡回が飛ぶ。 他の業務が重なると、その週は見ません。飛んだ週に起きた変更は、次に誰かが気づくまで社内に共有されません。
(c)見ているページが担当者の頭の中にある。 どの会社のどのページを見るべきかは担当者しか知らず、担当が替わると巡回対象から作り直しになります。
(d)共有が遅い。 気づいてからSlackに書くまで数日空きます。商談中の案件に関わる変更でも、間に合わないことがあります。
- 毎週月曜の朝7時に巡回が自動で始まる
- 【自動】 対象ページを1件ずつ取得する(間隔を空けて順番に)
- 【自動】 HTMLから本文テキストを抜き出し、表記を揃える
- 【自動】 前回保存分と比較して、変わった箇所を取り出す
- 【自動】 変更が意味のあるものかをAIが判定し、区分と影響度を付ける
- 【自動】 意味のある変更だけを一覧にして Slack へ投稿する
- 【人】 担当者が一覧を見て、営業へ流すもの・調べ直すものを決める
- 【人】 重要な変更は、担当者が実際のページを開いて裏を取る
- 【自動】 今回取得分を次回比較用に保存する
自動化されるのは「見に行く」「覚えておく」「見比べる」の3つです。残るのは「これは重要か」を決めることと、重要なものを自分の目で確かめることです。
02今回想定するシステム構成
【トリガー】毎週月曜 07:00(Schedule Trigger) │ ▼ n8n ワークフロー │ ├──▶ 対象URL一覧(スプレッドシート)を読む │ ├──▶ HTTP Request ノードで1ページずつ取得(間隔を空ける) │ ├──▶ 本文テキストの抽出と正規化(Python) │ ├──▶ 前回保存分との差分抽出(Python) │ └─ 差分がなければここで終了 │ ├──▶ Claude API ── 意味のある変更かを判定し、区分・影響度を付ける │ ├──▶ Slack へ投稿 + スプレッドシートへ履歴を追記 │ └──▶ 今回分をストレージへ保存(次回の比較用) │ ▼ 【人が判断】担当者が一覧を見て、営業へ流すかを決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Power Automate、Zapier |
| 処理 | Python | Google Apps Script |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 通知 | Slack | Microsoft Teams |
| 履歴の保管 | Googleスプレッドシート | データベース |
n8n を置いているのは、巡回の間隔・順番・エラー時の再試行を画面上で組めるためです。 同じことは Python のスクリプトと定時実行でも作れます。すでに社内にワークフローツールがあるなら、それを使ってください。この構成でツールの選択が結果を左右する部分はほとんどありません。
03どうやって実装するのか
処理の起点を決める
曜日と時刻を決めた定期起動にします。n8n の Schedule Trigger ノードは、秒・分・時・日・週・月の単位、またはCron式で起動間隔を指定できます。週次であれば「Weeks」で曜日と時刻を指定します。
タイムゾーンには注意が必要です。n8n のタイムゾーンは、ワークフロー個別の設定があればそれが使われ、無ければインスタンスの設定が使われます。セルフホスト版の既定値は America/New_York です。日本時間で動かすつもりが、前日の夜に走っていたという取り違えが起きるため、ワークフロー側でタイムゾーンを明示してください。
週次にする理由は、価格や機能の改定が日単位で起きる市場はまれだからです。日次にすると差分の量に対して得られるものが釣り合いません。四半期に一度しか改定がない市場なら、隔週でも足ります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 巡回対象の一覧 | 競合名、ページ種別、URL、確認する観点 | スプレッドシート |
| 前回取得分 | 前回巡回時の本文テキスト | ストレージ(1ページ1ファイル) |
| 自社の基準 | 何を重要な変更と見なすかの定義 | プロンプトに固定で埋め込む |
| 自社の価格・機能 | 比較の基準になる自社側の情報 | スプレッドシート |
4番目を渡すと、判定の質が変わります。 「competitorが月額5,000円に改定」だけでは影響度が判断できませんが、自社が月額6,000円だと分かっていれば「自社より安い水準に入った」と書けます。
データの取得方法を決める
巡回対象: スプレッドシートで管理します。列は「競合名/ページ種別(価格・機能・事例・お知らせ)/URL/確認観点/最終取得日時/状態」です。ここを人が足し引きできる形にしておくことが、この構成を続けられるかどうかを決めます。
ページの取得: n8n の HTTP Request ノードでURLを取得します。取得時には次を守ります。
- 相手サイトの利用規約と robots.txt を事前に確認する。 自動取得を禁じているサイトは対象に入れない
- 1ページごとに数秒の間隔を空け、短時間に連続して叩かない
- User-Agent に自社が分かる情報と連絡先を入れる
- 会員登録やログインが必要なページには入らない。ログインが要る時点で対象外とする
この確認を飛ばさないでください。 技術的に取得できることと、取得してよいことは別です。判断に迷う場合は法務に確認し、対象から外します。外しても構成は成立します。その競合だけ手動で見る運用にすればよいだけです。
JavaScriptで描画されるページ: HTTP Request で取得したHTMLに本文が入っていない場合があります。ヘッドレスブラウザを使えば取れますが、負荷と保守の手間が増えます。まずは対象外にして、静的に取れるページだけで始めることを勧めます。
AIへ渡す前に整形する
ここがこの構成の要です。生のHTMLを差分にかけると、毎回大量の差分が出ます。
- 本文テキストの抽出 … ナビゲーション、フッター、サイドバーを落とし、本文だけを取り出します。タグの属性やクラス名は捨てます
- 動的要素の除去 … 現在日時、アクセス数、ランダムに並ぶ「おすすめ記事」、広告枠を落とします。ここを残すと毎回差分が出ます
- 表記の正規化 … 全角と半角、空白の連続、改行位置を揃えます。「5,000円」と「5000円」を別物として扱わないようにします
- 差分の抽出 … 前回分と行単位で比較し、追加・削除・変更された行だけを取り出します。変わっていないページはここで処理を終え、AIに渡しません
- 差分量の上限 … 差分が一定量を超えたページは、サイトの全面リニューアルである可能性が高いので、「大規模変更」として人に回し、AIには渡しません
4番と5番でAPIの呼び出し回数が大きく減ります。8社分を毎週渡す構成にすると費用も時間も無駄になります。
AIに処理させる
差分テキストを渡し、次の判定をさせます。
| 処理 | 内容 |
|---|---|
| 意味の判定 | その変更が価格・プラン・機能・対応業種・導入企業・体制のどれに関わるか。どれにも当たらなければ「対象外」 |
| 区分付け | 価格改定/プラン追加・廃止/機能追加/表現変更/事例追加/その他 |
| 変更前後の要約 | 何が何に変わったのかを1文で |
| 影響度 | 自社の価格・機能と比べて、提案や価格判断に影響するか(高・中・低) |
| 確認すべき点 | 人が実際のページで裏を取るべき箇所 |
「対象外」を積極的に出させることが重要です。 判定の価値は、拾うことより捨てることにあります。
指示内容を固定する
あなたは競合調査の担当者です。
あるページの前回と今回の差分を渡します。自社にとって意味のある変更かを判定してください。
【厳守事項】
- 差分に現れていない内容を推測しないでください。
「おそらく値下げの前触れ」といった解釈を書かないでください。
- 金額、プラン名、機能名は、差分に書かれたとおりに転記してください。
概算や言い換えをしないでください。
- 次のものは category を「対象外」としてください。
更新日の表示、キャンペーンバナー、記事の並び替え、誤字修正、
画像の差し替え、問い合わせ導線の文言変更。
- 影響度は、下に示す自社の価格・機能と比べて判断してください。
自社情報と比べられない場合は "unknown" としてください。
- 差分の解釈に自信がない場合は confidence を low にし、
needs_human_check に確認すべき箇所を書いてください。
【自社の価格・機能】
{own_product}
【対象ページ】
競合: {competitor} 種別: {page_type} URL: {url}
【前回との差分】
{diff_text}
「対象外」の列挙を具体的に書くことが効きます。 抽象的に「重要でない変更は除外して」と書くと、判断が毎回ぶれます。実際に出てきたノイズを、この列挙に足していく運用にします。
出力形式を固定する
{
"competitor": "",
"page_type": "",
"url": "",
"checked_at": "",
"changes": [
{
"category": "価格改定 | プラン追加・廃止 | 機能追加 | 表現変更 | 事例追加 | その他 | 対象外",
"before": "",
"after": "",
"summary": "",
"impact": "high | medium | low | unknown",
"confidence": "high | medium | low",
"needs_human_check": ""
}
],
"large_change": false,
"fetch_error": ""
}
before と after には、差分の該当部分をそのまま入れさせます。要約だけを受け取ると、後から「本当にそう書いてあったか」を確認できません。
fetch_error を出力に持たせているのは、取得できなかったことを「変更なし」と区別するためです。ここを分けないと、ページ構造の変更で取得に失敗し続けているのに、「今週も変更なし」と報告され続けます。
システムへ連携する
出力は2か所へ流します。
| 出し先 | 中身 | 目的 |
|---|---|---|
| Slack | 影響度 high と medium の変更だけ | その週に気づくべきことを届ける |
| スプレッドシート | 対象外を含む全件 | 後から追える履歴を残す |
Slackへの投稿は、競合ごとにスレッドをまとめます。1変更1投稿にすると、改定のあった週にチャンネルが埋まります。
Salesforce など営業側のシステムへの自動連携は、最初は作らないでください。競合の動きを案件へ自動で紐づけると、誤判定が商談の判断材料として流れてしまいます。 担当者が確認したものだけを、人の手で共有する形から始めます。
人が確認する
社内へ流す前に、必ず人が確認します。
理由は、差分の解釈を誤ったまま「競合が値下げした」と社内に流れると、営業が現場で誤った前提で話すためです。訂正しても、一度流れた情報は止まりません。
確認を速くするための設計が要ります。
- Slackの投稿に、該当ページのURLと該当箇所を必ず含める
- 影響度 high は、担当者が実際のページを開くまで「未確認」の印を付ける
- 前回の巡回で「対象外」と判断した変更と同じ文面は、まとめて折りたたむ
- 取得エラーは、変更とは別のチャンネルへ流す
例外に対処する
| 起きること | 対応 |
|---|---|
| ページが取得できない(404・接続エラー) | fetch_error に記録し、3週続いたら対象一覧の見直しを通知する。「変更なし」として扱わない |
| サイトが全面リニューアルされた | 差分量の上限で検出し、人に回す。前回分を新しい構造で取り直す |
| 本文の抽出に失敗し、ナビゲーションが混ざる | 差分にメニュー項目が並ぶ。抽出ルールを見直す。この兆候を放置すると毎週ノイズが出続ける |
| JavaScriptで描画されていて本文が取れない | 対象外にして、そのページだけ手動確認にする |
| bot対策で遮断される | 回避策を実装しない。 対象から外し、手動確認に切り替える |
| 価格がログイン後にしか出ない | 対象外。公開情報だけを扱う |
| 差分はあるが意味がない変更ばかり | 「対象外」の列挙にその類型を追加する |
| 巡回が失敗して気づかない | 巡回完了そのものを毎回通知する。無通知を異常と見なす運用にする |
記録を残す
- 取得したページの本文テキスト(日付付き。1ページ1ファイル)
- 抽出した差分
- AIの判定結果(対象外を含む全件)
- 担当者が社内へ流したもの・流さなかったもの
- 取得エラーの履歴
1番目を残すことが、この構成の資産になります。 半年分たまると、「競合A社は毎年4月に価格を見直している」といった周期が見えます。これは毎週の差分からは分かりません。
保存先は自社のストレージにします。取得したページの内容は、社内での検討材料としての利用にとどめ、社外への転載や公開資料への引き写しはしないでください。
04実装レベルの3段階
半自動化の時点で、35分が15分程度になります。 見に行く手間と、前回との比較が消えるためです。本格構成にすると7分程度になりますが、ノイズを抑える前処理と「対象外」定義の作り込みが必要です。 この業務は、半自動化で止める判断も十分あり得ます。 競合が3社程度なら、差分を人が読んでも数分で終わります。
05工数削減シミュレーション
導入後 32件 × 7分 ÷ 60 = 3.7 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 競合が5社以上おり、価格や機能の改定が四半期に複数回起きる市場。自社の提案や価格改定の判断に競合の動きを使っている会社。
- 競合の情報が公開ページにほとんど出ていない業種。巡回対象が会員登録や見積依頼の先にしかない場合。相手サイトの利用規約が自動取得を禁じている場合。
07最小構成で試す方法
- 競合2社の価格ページだけを選ぶ
- 今日の時点のページ本文を手作業で保存する(ブラウザからテキストとして保存)
- 1週間後、同じページを保存する
- 2つの差分を取り、生成AIの画面に貼り付けて「意味のある変更か」を判定させる
- 判定結果を見て、自分の感覚と合っているかを確かめる
この2週間の検証で、ほとんどのことが分かります。 差分がそもそも出ない市場なら、週次の巡回を作る意味がありません。逆に差分が大量に出るなら、前処理の設計にどれだけ手をかけるべきかが見えます。
判断の目安は次のとおりです。
| 2週間で出た差分 | 判断 |
|---|---|
| 意味のある変更が含まれていた | 週次で作る価値がある |
| 差分は出たが全部ノイズだった | 前処理を先に作り込む。もしくは隔週・月次に落とす |
| 差分が出なかった | 巡回頻度を月次にし、対象ページを増やす |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 毎週大量の差分が出て読まれない | 本文抽出と動的要素の除去を作り込む。「対象外」の列挙を具体化する |
| 更新日やアクセス数で毎回差分が出る | 前処理で落とす。落とす対象を一覧で管理する |
| ページ構造が変わって抽出が壊れる | 差分量の上限で検出する。抽出失敗を通知の対象にする |
| 取得エラーが続いているのに気づかない | 巡回完了を毎回通知し、無通知を異常と見なす |
| 「値下げした」の誤判定が社内に流れる | 社内共有の前に人が実ページで確認する。自動投稿を営業チャンネルへ直結させない |
| アクセス頻度が高すぎて相手に負荷をかける | 1ページごとに間隔を空ける。並列取得をしない |
| 対象ページが増え続けて費用と時間が膨らむ | 四半期ごとに対象一覧を見直す。半年間ノイズしか出ていないページは外す |
| 取得した内容を資料へそのまま転載してしまう | 社内の検討材料にとどめる運用を明文化する |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 競合各社が公開しているページの内容と、比較の基準になる自社の価格・機能情報。
- 取得先の規約 … 相手サイトの利用規約と robots.txt を確認し、自動取得を禁じているサイトは対象に入れません。bot対策に遭ったら、回避策を作らずに対象から外します。 ここは技術的な可否ではなく、方針として決めておく事項です
- アクセスの作法 … 取得間隔を空け、User-Agent に自社が分かる情報を入れます。相手のサービスに負荷をかけない範囲で行います
- 取得した内容の扱い … 社内の検討材料としての利用にとどめ、公開資料や提案書へそのまま引き写さないでください。引用が必要なら出典を明示し、引用の範囲を守ります
- 自社情報の入力 … 比較のために自社の価格・機能を生成AIへ渡します。未公開の価格改定案を渡すかどうかは、情報管理規程に照らして判断してください。渡さなくても構成は成立します
- 学習利用 … 入力を学習に使わない設定または契約のサービスを選びます
- 自動実行してよい範囲 … 巡回と判定までは自動で構いません。社内への共有、特に営業向けの共有は人が行います
誤りが起きた場合のリスクは、誤った競合情報にもとづいて価格や提案の判断をしてしまうことです。この構成が出すのは一次情報ではなく差分の解釈です。 重要な判断の前には、必ず実際のページを確認してください。
10まず何から始めるか
1週目:対象を決めて、今日の状態を保存する
競合2社の価格ページを選び、本文テキストを保存します。同時に、その2社の利用規約と robots.txt を確認します。ここで自動取得が禁じられていたら、その時点で対象を変えます。
2週目:1週間後の差分を見る
同じページを保存し、差分を取ります。生成AIに判定させ、自分の感覚と合うかを確かめます。合わなければ「対象外」の定義を書き足します。
3〜4週目:巡回を組む
対象を8社に広げ、定期起動で取得と差分抽出までを自動化します。まだAIの判定は挟まず、差分をそのままメールで受け取って読みます。ここでノイズの量が実測できます。
2か月目以降: ノイズの傾向が見えたら前処理を作り込み、AIの判定と Slack への投稿をつなぎます。並行して、取得したページの保存を積み上げ、四半期ごとに対象一覧を見直す運用を決めます。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| n8n の Schedule Trigger ノードで、秒・分・時・日・週・月の単位またはCron式による定期起動が設定できること。タイムゾーンはワークフロー設定が優先され、無ければインスタンス設定(セルフホスト版の既定は America/New_York)が使われること | n8n Docs: Schedule Trigger | 2026-09-14 |
| n8n の HTTP Request ノードで任意のURLへのリクエストと認証設定ができること | n8n Docs: HTTP Request | 2026-09-14 |
取得対象サイトの利用規約、robots.txt の内容、および取得した内容の社内利用の範囲は、サイトごと・自社の方針ごとに異なります。この部分は法務への確認が必要です。 JavaScriptで描画されるページの取得可否も、対象サイトによって変わります。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0051)についてのご相談はこちらから。
