ai-marketing-skills/sales-pipeline/README.md
Alfred Claw a96d0d8889 Initial commit: 6 AI marketing skill categories
- growth-engine: Autonomous experiment engine (Karpathy autoresearch for marketing)
- sales-pipeline: RB2B router, deal resurrector, trigger prospector, ICP learner
- content-ops: Expert panel, quality gate, editorial brain, quote miner
- outbound-engine: Cold outbound optimizer, lead pipeline, competitive monitor
- seo-ops: Content attack briefs, GSC optimizer, trend scout
- finance-ops: CFO briefing, cost estimate, scenario modeler

79 files, all sanitized - zero hardcoded credentials or internal references.
2026-03-27 20:14:52 -07:00

349 lines
15 KiB
Markdown

# 🎯 AI Sales Pipeline
> **Turn anonymous website visitors into qualified pipeline in under 60 seconds.**
A complete AI-powered sales pipeline automation suite: from website visitor identification through intent scoring, suppression, campaign routing, dead deal resurrection, trigger-based prospecting, and self-learning ICP optimization.
These tools were built in production at [Single Grain](https://www.singlegrain.com), processing thousands of visitors and deals weekly. Now open-sourced for any B2B company to use.
---
## Architecture
```
┌─────────────────────────────────────────┐
│ YOUR WEBSITE(S) │
└──────────────┬──────────────────────────┘
│ RB2B pixel fires
┌───────────────────────────────────────┐
│ rb2b_webhook_ingest.py │
│ Intent Scoring + ICP Classification │
│ (pricing=90, blog=30, services=65) │
└──────────────┬────────────────────────┘
│ High-intent visitors
┌────────────────────────────────────────────────┐
│ rb2b_suppression_pipeline.py │
│ 5-Layer Check: │
│ CRM → Outbound → Stripe → Analytics → Block │
│ + Company-level dedup (1 per domain/week) │
└──────────────┬─────────────────────────────────┘
│ Clean leads only
┌────────────────────────────────────────────────┐
│ rb2b_instantly_router.py │
│ Agency Detection + Source Site Routing │
│ → Routes to correct Instantly campaign │
│ → Auto-activates paused campaigns │
└────────────────────────────────────────────────┘
┌────────────────────┐ ┌────────────────────┐ ┌─────────────────────┐
│ deal_resurrector │ │ trigger_prospector │ │ icp_learning_ │
│ .py │ │ .py │ │ analyzer.py │
│ │ │ │ │ │
│ 3 intelligence │ │ Monitors: │ │ Reads approve/ │
│ layers on dead │ │ • New CMO hires │ │ reject decisions │
│ deals: │ │ • Job postings │ │ │
│ 1. Time decay │ │ • Funding rounds │ │ Outputs: │
│ scoring │ │ • Agency searches │ │ • Industry targets │
│ 2. POC expansion │ │ │ │ • Size sweet spots │
│ 3. Follow the │ │ Scores, enriches, │ │ • Title patterns │
│ champion │ │ drafts outreach │ │ • Revenue ranges │
└────────────────────┘ └─────────────────────┘ └─────────────────────┘
│ │ │
└────────────────────────┼─────────────────────────┘
┌───────────────────────┐
│ Your CRM / Outbound │
│ (HubSpot, Instantly) │
└───────────────────────┘
```
---
## Tools
### 1. 🌐 RB2B Webhook Ingest (`rb2b_webhook_ingest.py`)
Receives RB2B visitor identification webhooks, scores intent based on pages visited, and classifies ICP fit.
**What it does:**
- Scores every page visit against configurable intent patterns (pricing page = 90, blog = 30)
- Checks ICP fit by title seniority + company size
- Outputs structured signals with priority levels (high/medium/low)
- Runs as HTTP server or processes stdin/batch files
```bash
# Run as webhook server
python3 rb2b_webhook_ingest.py --serve --port 4100
# Test with sample data
echo '{"email":"cmo@acme.com","job_title":"CMO","company":"Acme Inc","company_size":500,"pages_visited":["https://yoursite.com/pricing"]}' | python3 rb2b_webhook_ingest.py --dry-run
```
### 2. 🛡️ Suppression Pipeline (`rb2b_suppression_pipeline.py`)
5-layer suppression that prevents embarrassing outreach to existing customers, active leads, or competitors.
**Layers:**
1. **Personal Email Filter** — Skip gmail.com, yahoo.com, etc.
2. **CRM Check** — Already in HubSpot? Don't cold email them.
3. **Outbound Platform** — Already in an Instantly campaign (last 90 days)?
4. **Payment Provider** — Paying Stripe customer? Definitely don't cold email.
5. **Blocklist** — Competitor domains + manual blocks
6. **Company Dedup** — Only 1 contact per company domain per 7-day window
```bash
# Check a single email
python3 rb2b_suppression_pipeline.py --email john@acme.com --company "Acme Inc"
# Output:
# 📋 Suppression check for: john@acme.com
# ──────────────────────────────────────────────────
# ✅ Personal Email Filter: business email
# ✅ CRM Check: not in CRM
# ✅ Outbound Platform: not in outbound platform
# ✅ Payment Provider: not a paying customer
# ✅ Blocklist: not blocklisted
# ✅ Company Dedup: no company dedup conflict
# ──────────────────────────────────────────────────
# ✅ CLEAR — eligible for enrollment
```
### 3. 🔀 Instantly Router (`rb2b_instantly_router.py`)
The orchestrator: combines intent scoring + suppression + agency classification to route leads to the right Instantly campaign automatically.
**What it does:**
- Scores visitor intent
- Runs full suppression pipeline
- Classifies agency vs. non-agency visitors (2+ signal threshold)
- Detects source site (if you have multiple properties)
- Routes to the correct campaign and auto-enrolls via Instantly API
- Auto-activates paused campaigns when leads are ready
```bash
# Run as webhook server (production mode)
python3 rb2b_instantly_router.py --serve --port 4100
# Dry run test
echo '{"email":"vp@techco.com","job_title":"VP Marketing","company":"TechCo","industry":"SaaS","company_size":"200","pages_visited":["https://yoursite.com/pricing","https://yoursite.com/case-studies"]}' | python3 rb2b_instantly_router.py --dry-run
```
### 4. 🔥 Deal Resurrector (`deal_resurrector.py`)
Three intelligence layers on your closed-lost deals. Finds the best revival opportunities using a composite scoring formula.
**Layer 1 — Time Decay Scoring (0-100):**
- Time component (35 pts): 60-90 days = sweet spot, decays over time
- Value component (30 pts): Normalized deal value
- Reason component (20 pts): "Timing" deals score higher than "bad fit"
- Trigger component (15 pts): Bonus if recent email opens or site visits
**Layer 2 — POC Expansion:**
- Verifies if your contact is still at the company
- Finds replacement decision-makers when contacts leave
**Layer 3 — Follow the Champion:**
- Tracks departed contacts to their new companies
- If they moved to an ICP-fit company, generates outreach for the new org
```bash
# Find top 10 revival opportunities (dry run)
python3 deal_resurrector.py --top 10 --dry-run
# Full run with champion tracking
python3 deal_resurrector.py --top 5 --include-champion
# Exclude a company from future runs
python3 deal_resurrector.py --add-exclusion "Already Won Corp"
```
### 5. 🔍 Trigger Prospector (`trigger_prospector.py`)
Scans the web for buying signals: new marketing leadership hires, job postings, funding rounds, and active agency searches.
**Signal Categories:**
| Signal | What It Means | Score Weight |
|--------|--------------|-------------|
| New CMO/VP hire | Budget reallocation window | 35 pts |
| Job posting | Growth mode, team building | 25 pts |
| Funding round | Capital to deploy | 30 pts |
| Agency search | Active evaluation | 40 pts |
Each prospect gets a composite score (0-100) plus enrichment: estimated company size, industry, suggested services, outreach channel recommendation, and a ready-to-send email draft.
```bash
# Scan last 7 days for signals
python3 trigger_prospector.py --days 7 --top 15
# Wider scan with lower threshold
python3 trigger_prospector.py --days 30 --top 25 --min-score 40
```
### 6. 📊 ICP Learning Analyzer (`icp_learning_analyzer.py`)
Your ICP should evolve from data, not guesswork. This tool reads your prospect approve/reject history and outputs recommended filter changes.
**What it analyzes:**
- Industry patterns (which convert vs. get rejected)
- Company size sweet spots (10th-90th percentile of approvals)
- Title/seniority patterns
- Revenue ranges
- Per-source approval rates (cold vs. trigger vs. warm vs. revival)
```bash
# Run analysis
python3 icp_learning_analyzer.py
# With custom config
python3 icp_learning_analyzer.py --config data/icp-config.json
# Example output:
# 📊 ICP Learning Analyzer Results
# Total prospects analyzed: 847
# ────────────────────────────────────────
# cold : ready (n=312, approval=23%)
# → Target: SaaS, Fintech, E-commerce
# → Exclude: Crypto/Web3
# → Employees: 50-500
# trigger : ready (n=156, approval=41%)
# → Target: SaaS, Healthcare
# → Employees: 100-1000
# warm : ready (n=289, approval=67%)
# revival : insufficient_data (n=12, min_required=30)
```
---
## Quick Start
### 1. Clone and install
```bash
git clone https://github.com/nichochar/ai-marketing-skills.git
cd ai-marketing-skills/sales-pipeline
pip install -r requirements.txt
```
### 2. Configure environment
```bash
cp .env.example .env
# Edit .env with your API keys
```
### 3. Set up campaign config (for RB2B Router)
```bash
cp data/campaigns.json.example data/campaigns.json
# Add your Instantly campaign UUIDs
```
### 4. Test with dry runs
```bash
# Test suppression pipeline
python3 rb2b_suppression_pipeline.py --email test@example.com
# Test intent scoring
echo '{"email":"test@example.com","pages_visited":["https://yoursite.com/pricing"]}' \
| python3 rb2b_webhook_ingest.py --dry-run
# Test deal resurrector
python3 deal_resurrector.py --top 5 --dry-run
# Test trigger prospector
python3 trigger_prospector.py --days 7 --top 10
```
### 5. Deploy webhook server
```bash
# Start the full pipeline as a webhook endpoint
python3 rb2b_instantly_router.py --serve --port 4100
# Point your RB2B webhook (or Zapier/Make) at:
# POST http://your-server:4100/
```
---
## Customization
### Intent Scoring
Edit `PAGE_INTENT_SCORES` in `rb2b_webhook_ingest.py` to match your site's URL structure:
```python
PAGE_INTENT_SCORES = {
"pricing": 90, # Your pricing page path
"demo": 85, # Demo request page
"case-study": 70, # Social proof pages
"blog": 30, # Low-intent content
# Add your own patterns...
}
```
### Agency Detection
Modify `AGENCY_KEYWORDS_COMPANY` and `AGENCY_INDUSTRIES` in `rb2b_instantly_router.py` for your market.
### Loss Reason Scoring
Customize `LOSS_REASON_BONUS` in `deal_resurrector.py` based on which loss reasons actually convert when revisited.
### Trigger Queries
Edit `SEARCH_QUERIES` in `trigger_prospector.py` to target your specific market signals.
---
## Integrations
| Tool | Required | Used By |
|------|----------|---------|
| [RB2B](https://rb2b.com) | For visitor ID | Webhook Ingest, Router |
| [Instantly](https://instantly.ai) | For cold email | Router, Suppression |
| [HubSpot](https://hubspot.com) | For CRM | Deal Resurrector, Suppression |
| [Brave Search](https://api.search.brave.com) | For web signals | Trigger Prospector |
| PostgreSQL | For ICP learning | ICP Analyzer |
| Stripe | Optional | Suppression (customer check) |
---
## File Structure
```
sales-pipeline/
├── README.md # This file
├── SKILL.md # Claude Code skill definition
├── requirements.txt # Python dependencies
├── .env.example # Environment variable template
├── rb2b_webhook_ingest.py # Webhook server + intent scoring
├── rb2b_suppression_pipeline.py # 5-layer suppression checks
├── rb2b_instantly_router.py # Full pipeline orchestrator
├── deal_resurrector.py # Dead deal revival engine
├── trigger_prospector.py # Web signal prospecting
├── icp_learning_analyzer.py # Self-learning ICP optimization
└── data/
├── campaigns.json.example # Instantly campaign config template
└── icp-config.example.json # ICP analyzer config template
```
---
## How It Works Together
1. **RB2B identifies** anonymous website visitors with name, email, company, title
2. **Webhook Ingest** scores their intent based on which pages they viewed
3. **Suppression Pipeline** checks 5 layers to avoid emailing existing contacts
4. **Router** classifies agency vs. non-agency, picks the right campaign, enrolls
5. **Meanwhile**, Deal Resurrector mines your CRM for revival opportunities
6. **Trigger Prospector** scans the web for companies showing buying signals
7. **ICP Analyzer** learns from your approve/reject decisions and tightens targeting
The result: a self-improving pipeline that gets better the more you use it.
---
<p align="center">
Built by <a href="https://www.singlegrain.com">Single Grain</a> · Open-sourced as part of <a href="https://github.com/nichochar/ai-marketing-skills">AI Marketing Skills</a>
</p>