1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

440 通 / 0 返信 / 3 週間:ICP pivot の全記録

1
Posted at

冷メール 440 通送って、本物の返信は 0 だった。

3 週間かけて、地方の税理士事務所、クリニック、建設会社、EC、不動産業者、計 10 業種に「うちの AI 実装サービス、どうですか」と送り続けた結果がこれ。

俺は 6 SaaS を本番に乗せて売上ゼロの個人開発者。AI で実装は 95% 自動化できてる。でも「売る」が全然できてない。今回も同じ轍。

ただ、3 週間で学んだことはあった。最大の学びは、ICP(誰に売るか)が完全に間違ってたこと。地方店舗系は「AI 困ってる」客じゃなかった。

この note では、その 3 週間の全工程と、ICP を引っ繰り返した経緯を書く。あと、その途中で AI に冷メール文面書かせたら嘘が量産された話と、それを止める hook を作った話も。

長くなるので心して読んでくれ。


第 1 章:旧 ICP(地方店舗系)が死んでた 4 つの理由

最初に、俺が選んだ ICP は「地方の中小企業」だった。10 業種:

  • 税理士事務所
  • 美容クリニック
  • 整骨院
  • 建設会社
  • EC ショップ
  • 不動産仲介業者
  • 個人事業主の士業
  • 飲食店経営会社
  • 介護事業者
  • 工務店

理由は単純で、「AI まだ使ってない側に AI 売り込んだら大きな市場」と思ったから。米国の AI 導入率 88% に対して日本は 42.7%(業界調査)。残り 57.3% にリーチすればいいやろと。

これが 4 つの理由で破綻した。

理由 1:「使ってない側」は AI に困ってない

冷メールの 1 行目で「米国 88% 導入、日本 42.7%、貴社は?」と煽っても、相手は「いや、別に困ってないけど」が普通。

AI を「使ってない」と「困ってる」は全く別の状態。地方の税理士事務所は、AI なくて十分回ってる。困ってないところに「AI どうですか」は、健康な人にサプリ売るのと同じ。

ICP を選ぶ時に俺がやらかしたのは、「市場サイズ(57.3%)」だけ見て「pain(実際に困ってる)」を見てなかったこと。pain がない market は market じゃない。

理由 2:info@ ゲートキーパー問題

地方店舗系に冷メールを送る時、抽出できるのは大抵 info@xxx.co.jp だけ。HP に書いてあるのは「お問い合わせ先」一択。

info@ は経営者の inbox じゃない。事務員 / 営業窓口の人が捌くインボックス。AI 導入みたいな経営判断のメールは、そこで止まる。

決裁者が読むメアドは別にある(recruit@ 代表 IT 室長 等)が、地方の中小には専門メアドはほぼない。社長の個人メアドを見つける手段もない。

つまり、ICP の選び方に「届くメアドがあるか」を入れてなかった。市場として届かないなら、市場じゃない。

理由 3:業種混在で文面が機能しない

10 業種に同じ件名・同じ本文を送ってた。「AI 導入率 88% / 42.7%」のようなテンプレ文面で、税理士にも建設にも EC にも。

業種ごとに「使えそうな AI」が全然違う。税理士なら自動仕訳、建設なら工程管理 AI、EC なら接客 chatbot、整骨院なら予約受付。これを 1 文で書けない。

業種絞り込みなしで「全業種に AI」って言ったら、全業種から「で、何ができるの?」になる。具体性ゼロのメールは即捨てられる。

理由 4:bounce 率 8% でドメインが死にかけてた

地方の中小企業の HP は古い。HP に書いてあるメアドが 5 年前で、もう使われてないことが普通にある。これが bounce する。

bounce 率 8% は B2B 健全水準(< 3%)の倍以上。Instantly 経由で bounce が積み上がると、送信ドメインの reputation が落ちる。落ちると、まともなメアドにもスパム判定で届かない。

3 週間目には、open 率は 86% と一見良さそうだったけど、これは Apple Mail Privacy Protection が tracking pixel を全部 prefetch してる嘘の数字。実際の人間 read 率は 30-40% 程度。reply 率は 0%。

数字をまとめる:

送信数:440 通
bounce:~35 通(8%)
"open":~378 通(86%、Apple Mail で水増し)
実 read(推定):~130 通(30%)
真の reply:0

この数字を見て、俺は「ICP 自体が破綻してる」と気づくのに 3 週間かかった。


第 2 章:ICP pivot の決断(5/9)

5/9 朝、ChatGPT に reply 0 の状況を相談したら、論破された。

「440 通送って 0 返信なら、ICP が間違ってる確率が一番高い。地方店舗系は AI を『使ってない』だけで『困ってない』。困ってる側を狙え。」

「困ってる側」って何やねん、って聞き返したら、こう返ってきた。

「自己申告で『AI 人材足りない』って言ってる側を狙え。それ、求人に書いてある」

これが転機だった。

求人を出してる時点で、その会社は「AI 人材を内製で確保できない」を自己申告してる。Wantedly や PR Times を見ると、「AI エンジニア募集」「機械学習エンジニア募集」「LLM 実装エンジニア募集」が大量にある。

これは Forge(俺がやってる業務委託エンジニア紹介サービス)のオファーとピタリ合う。「貴社で募集してる職種、Forge の業務委託エンジニアでも対応できますよ。月額のフィーは 30%、合わなければ 0 円」。

ICP の定義が変わった瞬間:

旧 ICP:AI 使ってない地方店舗(広いが pain ない)
   ↓
新 ICP:AI エンジニア募集中の企業(狭いが pain 顕在化)

新 ICP に切り替える決断を、その日の昼に固めた。


第 3 章:新 ICP の見つけ方(playbook)

新 ICP「AI エンジニア募集中の企業」を見つける具体的な手段を 3 つ。

Source 1:Wantedly(無料 API、最速)

Wantedly は気軽に応募できる SNS 型求人サイト。検索結果ページが SPA で HTML scrape は効かないけど、内部 API(/api/v1/projects?type=engineering&q=AI...&page=N)は健在。

const res = await fetch(
  `https://www.wantedly.com/api/v1/projects?type=engineering&q=AI&page=${page}`,
  { headers: { 'X-Requested-With': 'XMLHttpRequest' } }
);
const data = await res.json();

返ってくる JSON には:

  • 募集タイトル
  • 会社名
  • 会社 URL
  • 場所
  • 公開日

会社 URL が分かれば、そこから contact ページや採用ページを scrape して、recruit@ careers@ hr@ info@ のメアドを取りに行ける。

Source 2:PR Times(AI 導入プレスリリース系企業)

PR Times は企業が自社プレスリリースを出す場所。/topics/keywords/AI%E5%B0%8E%E5%85%A5(AI 導入トピック)から、AI 関連プレスリリースを出した企業 ID を抜ける。

各プレスリリースのページから、外部リンク(公式 HP)を取って、そこから採用ページに飛んで、メアド抽出。

Source 3:GitHub(AI SDK 使ってる org)

GitHub Code Search で import anthropic @anthropic-ai/sdk import openai で検索。出てきた repo の owner profile を見て、location が日本なら、その org は AI 開発してる。

gh api -X GET search/code -f q='import anthropic language:python' -f per_page=10

org の HP が分かれば、メアド抽出。

メアド優先順位の鉄則

抽出したメアドの中で、優先順位が決まってる:

recruit@ > hr@ > careers@ > saiyou@ > info@ > contact@ > 他

recruit@ が一番、決裁者寄り。次が hr@info@ は最後の手段。

俺が書いた priorityEmail() 関数:

function priorityEmail(emails) {
  const priorities = ['recruit', 'hr', 'careers', 'saiyou'];
  for (const p of priorities) {
    const found = emails.find(e => e.startsWith(`${p}@`));
    if (found) return found;
  }
  return emails.find(e => e.startsWith('info@')) || emails[0];
}

この関数で 100 社をスクリーニングしたら、recruit@ がある会社は 12%、hr@ が 8%、careers@ が 5%、残り 75% は info@ だけ。地方店舗系よりは決裁者寄りメアドの確保率が圧倒的に高い。


第 4 章:subplot — AI に冷メール文面書かせたら嘘を量産した話

ここから別のドラマが始まる。

5/9 夜、ICP pivot を決めて 30 件の lead を取得した。これを Forge の冷メール用に personalize する作業を、Claude Sonnet 4.5 にやらせた。

プロンプトはざっくりこんな感じ:

あなたは Forge のセールス担当者。
以下の会社に冷メールを書いてください。
- 会社名: {company}
- 募集職種: {wantedly_title}
- HP: {url}

35 件の本文を 3 分で生成。これを Instantly に push して、5/12 火に送信予定だった。

5/10 朝、出力 preview させたら、20 件中数件で問題発覚。

問題 1:LLM が相手の状況を勝手に推測してた

ある会社の本文:

Quartz を活用した生成 AI 環境のセットアップ支援を拝見しました。導入後の内製化フェーズで、LLM 実装や RAG 構築の実務経験者が不足するケースが多いとお聞きします。

「お聞きします」?俺は誰からも何も聞いてない。LLM が勝手に「相手の状況」を推測して書いた。

別の会社(LLM プラットフォームを提供してる業界大手)には:

貴社では、LLM 基盤の拡張やエンタープライズ対応が加速するフェーズかと存じます。

「かと存じます」も俺の知らないこと。LLM が想像で書いた。

これは Forge / mint brand「失敗 transparency」と完全に矛盾する。受信者が「想像で書いてる」と気づいた瞬間、信用が消滅する。

問題 2:会社名 typo

業界大手の社名で、頭文字 1 文字 LLM が間違えた(K → N の入れ替え)。LLM が変換時に typo した。これは送信したら一発アウト。

問題 3:ICP 不適合 lead が混ざってた

LLM 開発プラットフォームを提供してる業界大手に「Forge から AI エンジニア紹介します」のメール。彼らは LLM 開発プラットフォームを 提供してる側。Forge から AI エンジニアを紹介されても、彼らの方が圧倒的にエンジニア持ってる。

これも俺の ICP fit check 漏れ。Wantedly で AI 求人出してる ≠ Forge ターゲット ICP、ということを LLM 生成前のフィルターに入れてなかった。

3 件削除、残り 17 件は再生成必要。

解決策:memory ≠ skill ≠ hook の 3 層防御

5/9 夜、俺は「捏造禁止」というルールを memory file に書いた:

~/.claude/projects/.../memory/no-invented-numbers.md

▼ **ルール**
- 想像で相手の状況を書かない
- 数字は memory 裏付けある実数のみ
- 想像系の禁則語使わない

5/10 の昼、Claude が同じ間違いを再発した。memory に書いても、Claude は読まない / 忘れる。

次に「skill」を組んだ:

~/.claude/skills/no-fabrication/SKILL.md

▼ **トリガー**
コールドメール / X 投稿 / note 記事を書く時

これも効かなかった。skill は Claude が「自分で発動条件を判定して呼ぶ」passive な機構。Claude が autopilot mode で ship を急いでる時、メタチェックの呼び出しが落ちる。

最後に「hook」に降りた。Claude Code の harness(OS 層)が強制実行する layer:

~/.claude/hooks/check-fabrication.sh

#!/bin/bash
# PostToolUse on Write|Edit
input=$(cat)
file_path=$(echo "$input" | jq -r '.tool_input.file_path')

# 対象ファイルのみ check
case "$file_path" in
  /tmp/forge_*draft*.json|*/articles/*.md)
    ;;
  *)
    exit 0
    ;;
esac

# 禁則語 grep
banned_file="$HOME/.claude/state/forge-banned-phrases.txt"
while IFS= read -r phrase; do
  if grep -qF -- "$phrase" "$file_path"; then
    echo "🚨 FABRICATION DETECTED: $phrase" >&2
    exit 2  # block
  fi
done < "$banned_file"

exit 0

settings.local.json で登録:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Write|Edit",
      "hooks": [{
        "type": "command",
        "command": "$HOME/.claude/hooks/check-fabrication.sh"
      }]
    }]
  }
}

これだと、Claude が想像系フレーズを含む draft を書こうとした瞬間、harness が exit 2 で書き込みを block する。Claude 本人が忘れても効く。

3 層を表にすると:

Layer 効果 弱点
memory 参照のみ、Claude が読まないと無効
skill Claude が自分で呼ばないと動かない
hook OS 層、harness が強制実行

memory ≠ skill ≠ hook。強制実行は OS 層しか効かない、というのが今回の学び。


第 5 章:5/12 火 送信開始

5/10 夜の時点で、最終的に campaign に残った lead は 21 件:

  • 4 件は手書き(5/8 から練ってた hand-curated v2、200-360 字)
  • 17 件は LLM 再生成(strict prompt、禁則語 self-check 付き、3 回 retry loop)

送信スケジュール:

5/12 火 10:00-15:00 JST → 15 通送信
5/13 水 10:00-15:00 JST → 残り 6 通送信
5/14 木〜5/16 金 → reply 監視
5/16 金 → 判定

Etc/GMT-12 timezone で 13:00-18:00 にすると、JST 10:00-15:00 のゴールデンタイムに着弾する。Tue-Thu のみ送信、月金週末は B2B で逆効果なので除外。

daily_limit は 15 に絞った(旧 30 から削減)。新ドメインは 4 月取得で warmup 中、bounce 率を絶対 3% 未満に抑える必要がある。


第 6 章:5/16 金 判定ロジック

5/16 金の時点で reply 数を見て、次の打ち手を決める:

Forge reply 次のアクション
1+ 来た ICP 検証 OK → 50 通版でテスト規模拡大、source 拡大
0 ICP も悪い疑い濃厚 → 「AI 開発受託」vs「業務委託エンジニア紹介」vs 別の何か、根本見直し

ちなみに この記事を書いてる 5/15 金 18:00 時点の reply 数:0件。残り 24 時間で結果が出る。5/22 月の note #3 で全数字載せる予定。


第 7 章:3 週間で学んだ 5 つ

  1. ICP は「困ってる側」を狙え、「使ってない側」じゃない

    • 市場サイズだけ見て pain を見ないと死ぬ。求人 = 自己申告で困ってる人。
  2. 入口(メアド)は ICP より先にチェック

    • info@ で送るのは事務員に売り込むのと同じ。recruit@ hr@ 代表 経路を確保できない ICP は ICP じゃない。
  3. 業種混在は禁止、1 campaign に 1 ICP

    • 10 業種に同じ文面を送ったら、全業種から無視される。1 ICP に絞り込んで、文面も最適化する。
  4. 数字は嘘を言う、reply 率しか見るな

    • bounce 8% / open 86% / read 推定 30% / reply 0% で、open に騙されない。reply だけが Truth。
  5. AI に文面書かせる時、必ず人間 review、できれば hook 強制

    • LLM は想像で書く。送信前に必ず diff 確認、捏造防止 hook を強制実行。memory も skill も効かない、hook まで降りる。

次回予告:5/22 月 note #3

5/16 金の Forge campaign 結果数字を、全部載せる:

  • 21 通送信したうち bounce 何件
  • open 何件(実 read 何件)
  • reply 何件(本物 / 自動返信)
  • 反応あった会社のプロフィール
  • 次の打ち手

俺はこの数字が 0 でも全部出す。それが mint だから。


──

俺が運営してるプロダクト

🎬 VideoTracker — 不動産業者向け動画自動生成 SaaS
動画1本¥596。SUUMO 問合せ平均1.8倍。
https://komugi-ai.jp/realestate

🤖 Mint Agent — Slack で @AI に話しかけて業務代行(近日リリース)
議事録投稿・メール返信・データ集計が Slack 内で完結
→ ベータ Waitlist:https://agent.komugi-ai.jp

🏭 Forge — 企業向け AI 実装・運用ファーム
構築 → 評価 → 運用まで一気通貫で請け負う
https://forge.komugi-ai.jp

業務効率化・SaaS 開発相談 → X DM @mintnekoneko0
過去記事まとめ:https://note.com/mintototo1

mint について

mint は永遠に無料。広告もサブスクも作らない。

俺ら個人開発者の戦いを、嘘なく続ける場所が必要だから、ただ続ける。

「AI で楽に稼げる」が溢れる SNS で、現実の数字を出す場所は、俺の方が珍しいと思う。

X で続けてる:@mintnekoneko0
note の前回記事:#1 冷メール 0 返信は ICP じゃなく入口(メアド)が真因だった

来週 5/22 月の #3 で、結果の数字を全部出す。

#個人開発 #saas #失敗談 #startup #buildinpublic

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?