営業リスト作成+フォーム営業自動化エージェント
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 を参照。