Project spec: email + cold-call mixed outbound (Ardi playbook)
Audience: AI / engineering team extending Brainforge outbound tooling.
Intent: This document extracts the end-state motion we want to run from tooling (not just email), based on Ardi Ghasemi’s coaching in an account-mapping / ICP working session with Robert Tseng (Brainforge).
1. Problem we are solving
Brainforge’s constraint is top of funnel / at-bats, not mid-funnel conversion. Outbound today skews LinkedIn (HeyReach), events, and partners; email lists exist but are not the primary active channel; cold calling was paused (~6 months at time of conversation).
Ardi’s thesis: run quantity-backed experiments (on the order of 1k–2k contacts over a bounded period, e.g. ~2 months) that combine email and calling, so ICP and messaging surface from data rather than opinion. Email volume from AI-driven senders is rising; calling can be a differentiator because fewer reps want to do it—still hard, but informative even when results are poor.
2. Target playbook (what “good” looks like)
This is the operational design to implement or orchestrate (HubSpot-native and/or via our CLI + integrations).
2.1 Split the universe into two cohorts
On a large list (e.g. thousands of accounts/contacts):
| Cohort | Intent | Calls | |
|---|---|---|---|
| A – Signal-triggered (“dynamic”) | Use engagement as a filter before burning dial time | A/B test emails; when thresholds hit (e.g. 2 opens, 2 clicks—exact thresholds TBD), move to calling | Call contacts who signal interest |
| B – Call-heavy (“normal” sequence) | Learn baseline connect rates without depending on opens/clicks | Still use templates + A/B tests to improve intrigue | Heavy call cadence; not gated on email engagement |
Both cohorts run in parallel so we learn signal-based vs always-call economics on the same underlying ICP.
2.2 Email: A/B testing and variant pruning
- Run A/B tests on emails inside sequences (HubSpot-style sequence steps or equivalent).
- At high volume, support multiple variants per stage (Ardi cited testing ~4 variants per stage).
- On a cadence (e.g. ~weekly), drop variants that are clearly underperforming so the system converges on winners.
2.3 Calls: power dial + tight script
- Use a power dialer (Ardi referenced Aircall as an example; vendor is not prescriptive).
- Block calendar (e.g. 2–3 hour slots) for dial blocks.
- Short script: persona-specific one–two sentence hook (can be drafted/refined with AI), then learn from live conversations.
2.4 Measurement mindset
- After ~1k calls (and paired emails), review what happened: pickups, blow-offs, favorable titles/company sizes, meetings booked, objections.
- Outcome is baseline + ICP clarity, not only meetings booked.
3. Concrete Brainforge use case (from the same conversation)
- List: ~4,000 law firms, previously emailed; ~3% response; ~13 meetings booked; offering and market timing have since improved.
- Hypothesis: Re-run the list with stronger email experiments plus cold calling in the mixed design above.
- Buyer sketch: Partner at a mid-sized firm (e.g. <100 associates) interested in AI adoption for the firm.
Tooling should support naming campaigns, cohorts, sequence definitions, and artifacts that make it obvious which branch (A vs B) a contact is in and what happened on each channel.
4. Current tooling baseline (tools/hubspot-api-service)
Today (outbound orchestrator CLI):
- Ingests leads JSON + sequence JSON (multi-step, deterministic A/B variant assignment).
- Produces manifest, approval markdown, queue JSONL,
dispatchbatch + ledger (dry-run friendly). - Demo:
npm run outbound-orchestrator:demowalks a nine-step pipeline narrative; steps 1–4, 6–7, 9 are simulated; 5–8 exercise real file-based orchestration.
Gaps vs this spec (to build):
| Capability | Status |
|---|---|
| Email steps + variants + queue → provider | Partially aligned (queue/dispatch) |
| Call steps (tasks, dispositions, dialer handoff) | Not modeled |
| Dynamic enrollment (opens/clicks → branch to calls) | Not modeled |
| Cohort split (50/50 dynamic vs call-heavy) | Not modeled |
| HubSpot Sequences enrollment / sync | Not implemented |
| Variant performance tracking + auto-prune | Not implemented |
| Power dialer integration | Not implemented |
| Experiment reporting (funnel by cohort × variant × channel) | Not implemented |
5. Requirements (for implementation planning)
5.1 Data model (minimum)
- Campaign with two (or N) branches (dynamic vs call-heavy).
- Contact assignment to branch (deterministic or random split with seed).
- Step types: at least
email,call_task(future:linkedin,wait,branch_on_signal). - Signals: open count, click count (source: ESP/HubSpot/email provider webhooks or polling).
- Call outcomes: disposition codes, optional duration, next step (even if initially manual CSV import).
5.2 Orchestration
- Ability to generate daily/weekly work: who to email, who to call, in priority order.
- Ledger / idempotency so the same contact-step is not double-executed across workers (already a pattern in
dispatch+ ledger; extend to calls).
5.3 Integrations (prioritized suggestions)
- HubSpot as system of record: contacts, deals optional, tasks for calls, sequences or custom automation if native sequences are insufficient.
- Email send provider (Email Bison / other) aligned with existing outbound stack.
- Dialer API or export format for power dial (Aircall or chosen vendor).
5.4 Reporting
- Per cohort, variant, step: sends, opens, clicks, dials, connects, meetings, replies.
- Ability to answer: “Should we keep calling everyone or only engagers?” with data.
6. Non-goals (initial phase)
- Perfect RevOps / pipeline stage cleanup (discussed in same call but separate from this spec).
- Replacing HeyReach or partner motion—this spec is one parallel experiment track.
7. Suggested delivery phases
- Spec in code: Extend sequence schema to include step kinds (
email|call_task) and branch / cohort metadata; CLI still dry-run, artifacts document the plan. - HubSpot write path: Create/update tasks for call steps; log email sends via existing or new adapter.
- Signals: Wire minimal open/click ingestion → promote contacts to “call eligible” in dynamic cohort.
- Dialer handoff: Export or API for power dial lists + import dispositions back for reporting.
- Variant analytics: Weekly rollup + prune underperforming email variants (manual or automated).
8. Reference in repo
- Orchestrator README:
tools/hubspot-api-service/README.md(nine-step pipeline,run/dispatch/demo). - Subagent / personalization architecture:
knowledge/sales/gtm/outbound-subagent-architecture.md.
9. One-line product goal
Run reproducible, measurable mixed-channel outbound (email A/B + call blocks + optional engagement-triggered calling) on large lists, with clear cohorts and artifacts so we learn ICP and messaging from volume—not from ad hoc LinkedIn-only or email-only campaigns.