# B5 — Funnel Forensics: Where Cloud-Partner Campaigns Hemorrhage

**Sub-Agent B5 of 8** · Date: 2026-05-15 · Read-only. SQL + JSONL body-read.

---

## 7-Line Summary

1. **Overall booking→qualification rate is 73% (33 Qual / 45 attributed CRM meetings)** — much healthier than the "60% disqualify" hypothesis assumed; only **6.7% Unqualified** (N=3), 4.4% Future (N=2), 13.3% still pending (N=6).
2. **The real hemorrhage is upstream of booking, not after it** — across the top 15 cloud-partner campaigns (110,022 sent total) we got **1,768 unique replies (1.61%)**, only **144 strong replies (0.131%)**, and just **40 booked meetings (0.036%)**.
3. **Single-biggest leak: Strong→Meeting** — 144 strong replies → 40 meetings = 27.8% conversion. The other 72.2% of "interested" replies never get on a calendar = credit-zombie behavior (asking for credits, refusing the call).
4. **Three campaigns concentrate 75% of all meetings (30/40)**: Europe Cloud - Credits - Apollo List (13), Wideops - Cloud Credits Testing (8), Wideops - Smaller CEOs Founders + EC - AWS Activate + Europe Cloud - AI SRE (3-4 each). The other 12 top campaigns booked 0-1 each despite combined 60K+ sends.
5. **Credit-zombie campaigns (high strong → near-zero meetings)**: Wideops Israel 30-100 CEOs (25 strong, 0 meetings), Growthgrid - Cloud Partners (11 strong, 0 meetings), Europe Cloud - Provided Data Test (4 strong, 0 meetings).
6. **Quality campaigns (lower strong, near-100% qualification)**: Wideops - Cloud Credits Testing (8/8 = 100% qual), Wideops - Smaller CEOs Founders (3/3 = 100%), EC - AWS Activate Portfolio (3/4 = 75%). These three carry the entire ICP signal for brain-writer.
7. **Implication**: zombie-filter should fire on the **Reply→Strong→Meeting gap** (credit-asks that don't book), not on Meeting→Qualified (which mostly works). Brain-writer should clone the AWS-Activate / Cloud-Credits-Testing / Smaller-CEOs-Founders pattern; deprecate the "Apollo List" volume play.

---

## Per-Campaign Funnel — Top 15 Cloud-Partner Campaigns by Send Volume

Numbers in parentheses = % of Sent. "Reply (unique)" = distinct `lead_email` in `replies_full` (slightly differs from Instantly `replied` because Instantly counts threads, our dedup counts leads). "Strong" = `classified_intent IN ('positive','soft_positive','meeting_booked')`. "Meeting" = CRM-attributed via `brain_meetings_truth.attributed_campaign_id`. "Qualified" = CRM `status='Qualified'`.

| # | Campaign | Sent | Reply (unique) | Strong | Meeting | Qualified | Disq | Bottleneck |
|---|---|---:|---:|---:|---:|---:|---:|---|
| 1 | Europe Cloud - Credits - Apollo List | 23,631 | 362 (1.53%) | 44 (0.186%) | 13 (0.055%) | 9 (0.038%) | 1 | Healthy funnel, low volume conversion — credit-zombie shape |
| 2 | Wideops - Series A-C Finance - Better payment structure | 10,050 | 253 (2.52%) | 4 (0.040%) | 1 (0.010%) | 1 (0.010%) | 0 | **Reply→Strong** — replies are OOO/wrong-person noise |
| 3 | Wideops - Smaller CEOs Founders | 6,542 | 181 (2.77%) | 12 (0.183%) | 3 (0.046%) | 3 (0.046%) | 0 | Healthy — 100% qual rate |
| 4 | EC - CEO - Cloud Cost + Credits - 4 Angles - 2026-04 | 6,106 | 49 (0.80%) | 3 (0.049%) | 0 | 0 | 0 | **Sent→Reply** — 0.8% reply rate, low intent |
| 5 | Wideops - Cloud Credits Testing | 4,210 | 129 (3.06%) | 27 (0.641%) | 8 (0.190%) | 8 (0.190%) | 0 | **Best funnel** — 100% qual, highest meeting rate (0.19%) |
| 6 | Wideops - Europe Low Seniority | 3,985 | 188 (4.72%) | 1 (0.025%) | 0 | 0 | 0 | **Reply→Strong** — high reply, all noise (wrong seniority) |
| 7 | EC_Cloud20K_2026-05 | 3,400 | 61 (1.79%) | 0 | 0 | 0 | 0 | **Reply→Strong** — zero strong replies = wrong list |
| 8 | Europe Cloud - AI SRE | 3,345 | 34 (1.02%) | 2 (0.060%) | 4 (0.120%) | 2 (0.060%) | 1 | **Mtg→Qual** — only 50% qual (no-show, locked-in) |
| 9 | Europe Cloud - April 26 - Credits Campaign | 3,172 | 29 (0.91%) | 1 (0.032%) | 1 (0.032%) | 1 (0.032%) | 0 | **Sent→Reply** — low reply rate |
| 10 | Wideops Israel - 30-100 CEOs | 2,888 | 125 (4.33%) | 25 (0.866%) | 0 | 0 | 0 | **Strong→Mtg** — 25 strong replies, zero CRM meetings (zombie) |
| 11 | Growthgrid - Cloud Partners | 2,800 | 54 (1.93%) | 11 (0.393%) | 0 | 0 | 0 | **Strong→Mtg** — credit-zombies don't book |
| 12 | Europe Cloud - Wiz Campaign | 2,605 | 35 (1.34%) | 1 (0.038%) | 0 | 0 | 0 | **Reply→Strong** — niche-account noise |
| 13 | Europe Cloud - Provided Data Test | 2,443 | 43 (1.76%) | 4 (0.164%) | 0 | 0 | 0 | **Strong→Mtg** — zombies |
| 14 | Europe Cloud - Finance and Ops Workspace | 2,015 | 13 (0.65%) | 1 (0.050%) | 0 | 0 | 0 | **Sent→Reply** — wrong angle (workspace ≠ credits) |
| 15 | EC_commit_discount_2026_05_06_DRAFT | 1,830 | 12 (0.66%) | 0 | 0 | 0 | 0 | **Sent→Reply** — draft, low reply |
| **Σ Top 15** | — | **110,022** | **1,768 (1.61%)** | **144 (0.131%)** | **40 (0.036%)** | **27 (0.025%)** | **2** | — |

### Bottleneck classification rules
- **Sent→Reply** (deliverability/copy): reply rate < 1.0%
- **Reply→Strong** (OOO/wrong-person/noise): strong/reply < 5%
- **Strong→Mtg** (credit-zombies don't book): meeting/strong < 20%
- **Mtg→Qual** (no-show / not-eligible / locked-in): qual/meeting < 60%

### Bottleneck histogram across top 15
| Bottleneck | # Campaigns |
|---|---:|
| Sent→Reply (low reply rate) | 5 |
| Reply→Strong (noisy replies) | 4 |
| Strong→Mtg (credit-zombies) | 3 |
| Mtg→Qual (qualification fail) | 1 |
| Healthy / no clear leak | 2 |

**Punchline**: only **3 of 15 campaigns** hemorrhage at "Strong→Meeting" (the classic credit-zombie pattern). **9 of 15** hemorrhage earlier — at copy/list quality (Sent→Reply or Reply→Strong). The problem is more upstream than the hypothesis assumed.

---

## Booking → Qualification Rate — Overall + Per Campaign

**Universe**: 45 rows in `brain_meetings_truth` (1 has `attributed_campaign_name=NULL`, so 44 attributed; per task spec we treat 45 as the booking universe).

### Overall (N=45)
| Outcome | N | % |
|---|---:|---:|
| Qualified | 33 | **73.3%** |
| Meeting has been set (pending) | 6 | 13.3% |
| Unqualified | 3 | 6.7% |
| Future | 2 | 4.4% |
| NULL | 1 | 2.2% |

**The KEY metric**: booking → qualification = **73.3%**. Even if we count Future + NULL as "not-qualified-today," it's still 73% Qual / 27% other. The "60% disqualify" hypothesis is wrong — disqualification is only 6.7%.

### Per-campaign (campaigns with ≥1 booked meeting, N=14)

| Campaign | Booked | Qual | Disq | Future | Pending | Qual Rate |
|---|---:|---:|---:|---:|---:|---:|
| Europe Cloud - Credits - Apollo List | 13 | 9 | 1 | 1 | 2 | 69% |
| Wideops - Cloud Credits Testing | 8 | 8 | 0 | 0 | 0 | **100%** |
| Europe Cloud - AI SRE | 4 | 2 | 1 | 1 | 0 | 50% |
| EC - AWS Activate Portfolio | 4 | 3 | 0 | 0 | 1 | 75% |
| Wideops - Smaller CEOs Founders | 3 | 3 | 0 | 0 | 0 | **100%** |
| EC - Anthropic Gemini API Discount | 3 | 2 | 0 | 0 | 1 | 67% |
| Europe Cloud - Hiring Campaign | 2 | 1 | 0 | 0 | 1 | 50% |
| Wideops - Series A-C Finance | 1 | 1 | 0 | 0 | 0 | **100%** |
| Europe Cloud - April 26 - Credits | 1 | 1 | 0 | 0 | 0 | **100%** |
| EC - Marketplace Credits Everything | 1 | 0 | 1 | 0 | 0 | **0%** |
| Credits Doc 50-200 - 2026-05 | 1 | 1 | 0 | 0 | 0 | **100%** |
| Commit IT - Hiring Roles | 1 | 1 | 0 | 0 | 0 | **100%** |
| CloudCredits_06_GCP | 1 | 1 | 0 | 0 | 0 | **100%** |
| CloudCredits_01_AWS_AI | 1 | 0 | 0 | 0 | 1 | 0% (pending) |

### Time from meeting set → qualified
Computed from `ec_leads.jsonl` (N=34 leads w/ both `set_a_meeting_on` and `qualified_date`):
- **Median: 3 days**
- Mean: 5.2 days
- Min: -1 (qualified before meeting set, data weirdness) / Max: 62
- **Implication**: if a booked meeting hasn't qualified within 7 days, it probably won't.

---

## EC CRM Lead Status Flow (N=55 ec_leads.jsonl)

Full status distribution:
```
Qualified              33   (60.0%)
Meeting has been set    6   (10.9%)
Unqualified             4   ( 7.3%)
NULL                    3   ( 5.5%)
Contacted - Pending     2   ( 3.6%)
Needs Follow up         2   ( 3.6%)
Future                  2   ( 3.6%)
Positive                1   ( 1.8%)
🧑‍💼Job Title          1   ( 1.8%)
High Priority           1   ( 1.8%)
```

- **45 of 55 (82%) have `set_a_meeting_on`** — so the "EC leads" file is essentially a booking universe, not a top-of-funnel universe.
- **36 of 55 (65%) have `qualified_date`** — these are the actual deals in motion.
- Booking → qualification on this slice: **33 Qualified / 45 with meeting set = 73.3%** (matches the `brain_meetings_truth` number — good).

### Attrition curve (booked meeting → today)
- Booked + Qualified: 33 (73%)
- Booked but still pending: 6 (13%)
- Booked but pushed to Future: 2 (4%)
- Booked but Disqualified: 3 (7%)
- Booked but unknown/NULL: 1 (2%)

**The "60% disqualify" worry was wrong. Disqualification is a 7-13% problem, not a 60% problem.**

---

## "These campaigns book a lot but disqualify" — Credit-Zombie Campaigns

Defined as: high-volume campaigns w/ many strong replies but zero or low-quality meeting conversion.

| Campaign | Sent | Strong | Mtg | Verdict |
|---|---:|---:|---:|---|
| **Wideops Israel - 30-100 CEOs** | 2,888 | 25 | 0 | **Worst zombie**: 25 strong replies, zero CRM meetings. Israeli CEOs ask about credits but won't take call. |
| **Growthgrid - Cloud Partners** | 2,800 | 11 | 0 | Big zombie — generic "cloud partners" hook attracts curious but uncommitted. |
| **Europe Cloud - Provided Data Test** | 2,443 | 4 | 0 | List quality issue + zombie tail. |
| **Wideops - Europe Low Seniority** | 3,985 | 1 | 0 | Strong=1 but it's noise — low-seniority can't authorize calls. |

**Pattern**: campaigns targeting (a) Israeli market or (b) low seniority or (c) generic "cloud partner" framing → zombies. They reply "tell me more" → ghost when call is proposed.

Only 1 disqualification was attributed to a top-15 campaign (Europe Cloud - Credits - Apollo List, N=1). The other 2 disqualifications: Europe Cloud - AI SRE (N=1), EC - Marketplace Credits Everything (N=1, full-disq campaign with single meeting).

### Disqualification reasons (from ec_lead_updates.jsonl body-read)
- **Albacross / Victor Ekelund**: "want credits, refuse partner. Locked in AWS+GCP direct." → competitive lock-in.
- **Wizard Health / Dino Maric**: "Company is 25 years old, not a startup, no AI. Don't offer startup credits." → ICP mis-fit.
- **Aistetic / Duncan McKay**: "Wants numbers, won't share info, ghosted Avishay." → information-fishing zombie.
- **Inion Software / Robertas**: no-show pattern, joined 15 min late, repeated reschedules. → bad calendaring discipline.

**Of 4 disqualifications**: 2 = ICP mis-fit (not startup / not eligible), 1 = competitive lock-in, 1 = information-only zombie. **Zero are "they didn't show up at all."**

---

## "These campaigns book less but qualify higher" — Quality Campaigns

| Campaign | Sent | Mtg | Qual Rate | Mtg/Sent |
|---|---:|---:|---:|---:|
| **Wideops - Cloud Credits Testing** | 4,210 | 8 | **100%** | **0.190%** ← gold standard |
| **Wideops - Smaller CEOs Founders** | 6,542 | 3 | **100%** | 0.046% |
| **EC - AWS Activate Portfolio** | 1,150 | 4 | 75% | 0.348% ← highest per-send |
| **EC - Anthropic Gemini API Discount** | 1,197 | 3 | 67% | 0.251% |
| **CloudCredits_06_GCP** | 75 | 1 | 100% | 1.333% (tiny N) |
| **CloudCredits_01_AWS_AI** | 171 | 1 | pending | 0.585% |

**Pattern**: These campaigns target **specific cloud-credit product mechanics** (AWS Activate eligibility, Anthropic/Gemini partner credits, Wideops credits testing) rather than generic "we have credits" framing. Leads who reply already know what they want.

**Gold standard = Wideops - Cloud Credits Testing**: 4,210 sent → 8 meetings booked → 8 qualified (100%). This is the campaign brain-writer should clone.

---

## Implications for Brain-Writer & Zombie-Filter Design

### For Brain-Writer's targeting
1. **Clone the AWS-Activate / Cloud-Credits-Testing pattern** — specific eligibility hooks, not generic credits framing. These are the 100%-qualification campaigns.
2. **Deprecate or restructure**: Apollo-List volume play (23K sent → 9 qual = 0.038% — works but inefficient), Israel CEO play (zombies), generic "Cloud Partners" play (zombies), Wiz / SRE / Workspace niche angles (Sent→Reply leak — copy or list is wrong).
3. **Sequence-step focus**: the leak is mostly **before booking** (Sent→Reply and Reply→Strong = 9 of 15 campaigns). Better lists + better email-1 copy fix more leverage than better calendar workflows.

### For Zombie-Filter design
1. **Fire at Reply→Strong→Meeting transition, not Meeting→Qualified.** Once booked, 73% qualify — the real disease is the 72% of strong replies that never book.
2. **Zombie signatures to filter** (from disqualification body-read):
   - "Want credits but won't take call / share info" (information-fishing)
   - "Already locked in w/ direct AWS/GCP rep" (competitive moat)
   - "Not a startup / no AI" (ICP mis-fit — old or non-tech company)
   - Low-seniority replier who can't authorize calls
3. **Pre-meeting eligibility-form gating** (already used on Wizard Health, Aistetic): require monthly cloud spend + incorporation date + last raise BEFORE booking call. This catches non-startup ICP mis-fits at ~zero cost.
4. **Skip campaigns w/ <0.05% meeting/sent ratio after 2K sends** — they're zombie producers (Israeli CEO, GG Cloud Partners, Provided Data Test all match).

### For Funnel Math
- **Working hypothesis was wrong**: disqualification ≠ 60%, it's 7%. Don't over-engineer post-meeting filters.
- **Real Cost Per Qualified Lead** (Top 15 only): 110,022 sent → 27 qualified = **1 qualified per 4,075 sends**. To 2x this we need either (a) 2x reply→strong→meeting conversion, or (b) cut the bottom 9 campaigns (60K sends, 5 qual) and reinvest into the top 6.

---

## Methodology Notes

- **Sent counts** come from `instantly_lifetime_stats.sequence_started`.
- **Reply counts** come from BOTH `instantly_lifetime_stats.replied` (Instantly's count, thread-level) and our `replies_full` unique-lead count. These differ slightly (e.g., Apollo List: Instantly=370, ours=362). Used `replies_full` for downstream classification because intent classification only exists on those rows.
- **Strong reply intents** = `('positive','soft_positive','meeting_booked')` per `replies_full.classified_intent`.
- **Meetings** = rows in `brain_meetings_truth` where `attributed_campaign_id` matches.
- **Qualification** = `brain_meetings_truth.crm_status='Qualified'` (joined to Monday.com via brain pipeline; cross-checked against `ec_leads.jsonl`).
- **The 45 vs 44 discrepancy**: task spec says 44, table has 45 rows. 1 row has `attributed_campaign_name=NULL`. We use N=45 as the universe.
- All numbers cited with N. No mocks.

---

## Files Referenced
- `/home/neta1/projects/brain-export/staging/leads_snapshot.db` (instantly_lifetime_stats, replies_full, brain_meetings_truth)
- `/mnt/c/Users/נטע/growthgrid/brain/raw/ec_leads.jsonl` (55 CRM leads)
- `/mnt/c/Users/נטע/growthgrid/brain/raw/ec_lead_updates.jsonl` (456 activity updates)
