投稿する

営業リスト作成+フォーム営業自動化エージェント

Googleマップから「地名×業種」で営業リストを自動生成し、問い合わせフォームへの営業文面送信を完結させる自動運転エージェントです。Apifyを用いたリード収集、公式サイトからのフォーム解析、そして送信までをワンストップで行います。 標準的なフォームへのスクリプト送信に加え、JavaScript依存の強い難読フォームにはブラウザ操作(Playwright/MCP)で自動フォールバックする2段構えの確実な送信が特徴です。 重複送信の防止、送信間隔のオート調整、特定電子メール法に配慮したオプトアウト文言の自動挿入など、エンジニアが求める安全面も標準実装されています。地域密着型の店舗や法人への効率的なアウトリーチ・自動化パイプラインの構築に最適です。
zip未取得

maps-outreach — Googleマップ起点 フォーム営業 自動化ツール

「地名 × 業種」でGoogleマップから会社をリスト化し、各社の公式サイト → 問い合わせフォームを

自動で特定して、営業文面を送信するための Claude Code 用サブエージェント(+3スキル) です。

①集める  →  ②見つける  →  ③送る
Apifyで       公式サイトから      型に合わせて送信。
会社リスト化   フォームを解析      送れない難フォームはブラウザで送信

---

構成(Claude Code 公式仕様に準拠)

  • サブエージェントは1枚のMarkdown(.claude/agents/maps-outreach.md)。
  • スクリプト・設定・テンプレ・データはスキル側(.claude/skills/.../)にまとまっています。
.claude/
├── agents/
│   └── maps-outreach.md                  # サブエージェント定義(これ1枚)
└── skills/
    ├── gmaps-lead-scraper/                # ①収集(Apify Googleマップ)
    ├── contact-form-finder/              # ②フォーム特定(型判定・項目マッピング)
    └── contact-form-sender/              # ③送信(型別アダプタ+ブラウザ送信)
        ├── scripts/                          submit_form / browser_send / dryrun_report / store / selftest
        ├── templates/sales_email.md          営業文面テンプレ
        ├── config/                           settings.md(差出人情報)/ .env.local(APIキー)
        └── data/                             実行時に生成(leads/sent/logs)

docs/
└── maps-outreach-setup.md                 # セットアップ補足

---

パイプライン(3ステップ)

ステップスキル内容
①集めるgmaps-lead-scraper地名×業種 → 会社リスト(Apify compass/crawler-google-places)
②見つけるcontact-form-finder公式サイト → 問い合わせフォームを特定。型を判定(CF7/WPForms/formzu/Googleフォーム等)し、項目の意味づけと送信可否(verdict)を出す
③送るcontact-form-sender型別アダプタで送信。送れない難フォームは browser_send.py(Playwright)が人の代わりに入力

---

セットアップ

1. Python依存

pip install -r requirements.txt
python -m playwright install chromium   # ブラウザ送信フォールバック用(任意)

2. Apifyトークン

Apify で取得し、記入します。

cd .claude/skills/contact-form-sender/config
cp .env.local.example .env.local        # .env.local に APIFY_API_TOKEN を貼り付け

(環境変数 APIFY_API_TOKEN でも可)

3. 差出人情報

Claude Code に「新潟市の会計事務所に営業フォーム送信したい」のように頼むと、

初回は対話でヒアリングが走り、contact-form-sender/config/settings.md の sender: を埋めます。

必須5項目(会社名・担当者・商材・自社URL・返信先メール)が揃うまで送信は解禁されません。

---

動作確認(送信せずに確認できます)

# 送信アダプタの自己テスト(ローカル擬似サーバのみ・外部送信なし)
python .claude/skills/contact-form-sender/scripts/selftest_adapters.py

# 収集済みデータでドライラン(実送信なしの送信可否スコアカード)
python .claude/skills/contact-form-sender/scripts/dryrun_report.py \
  --forms    .claude/skills/contact-form-sender/data/forms.jsonl \
  --template .claude/skills/contact-form-sender/templates/sales_email.md \
  --settings .claude/skills/contact-form-sender/config/settings.md

---

安全・コンプライアンス

  • 差出人情報・配信停止(オプトアウト)案内の無い文面は送らない(特定電子メール法等に配慮)
  • 二重送信しない(sent.jsonl に記録し再送しない)/送信間隔をあける(既定45〜90秒・コードで強制)
  • CAPTCHA/画像認証は突破しない(検出したら中断)
  • 公開されている企業の連絡先のみ対象。弁護士・税理士ポータル等の「本人サイトでない場所」は自動除外
⚠️ config/.env.local(APIキー)と data/(実行履歴)は .gitignore 済み。共有・コミット時は含めないでください。

---

配布

配布用ZIP(~/Desktop/maps-outreach.zip)は、上記 .claude/ ツリーから実APIキーと実行データを除いたもの。

受け取った人は .claude/ の中身を自分のプロジェクト(または ~/.claude)にコピーして使えます。

詳細は ZIP 内の README を参照。