Challenge
Violette is a B2B SaaS platform for community builders that other platforms have failed. Their growth team needed to reach 100-200 community leaders per week, scored and segmented, with personalized outreach already drafted. Manual research was capping the team at a fraction of that. Generic outbound tools could not handle the taxonomic nuance: a plant-medicine retreat is a different conversation than a queer-culture Patreon is a different conversation than a harm-reduction Discord. One voice does not fit.
Approach
We built a customer acquisition agent that runs the full outbound pipeline as a chain of stages. Each stage maps cleanly to a future LangGraph node so the system migrates when Violette’s in-house engineering team is ready to take it over.
- Discovery. Serper queries fanned out across Violette’s taxonomy (7 sections, 23 categories, 274 topic tags, with synonym expansion). Platform-specific and entry-market query patterns surface the communities other tools miss.
- Research. Crawl4AI plus Claude extract a structured
CommunityProfileper lead, including size, platform, paid offering, sensitivity flags, and inferred cultural descriptors. - Enrichment. A cascade of contact-page scraping, Apollo lookups, and Instagram business-bio extraction fills the gaps the public web hides.
- Segmentation + scoring. A 2×2 quadrant (platform-resident vs social-native × free vs paid) plus an entry-market boost feeds a priority score the growth team can sort on.
- Drafting. Four segment templates × seven section voices compose a personalized email per lead at runtime. Voice is tuned per section (protective for harm-reduction, reverent for spirit-and-nature, direct for cannabis).
- Delivery. Outputs land in a Google Sheets / AppSheet workspace the growth team works from daily. CRM hygiene, status workflow, and a revision-harvest loop that turns human edits into training signal.
The studio operates the agent monthly. The growth team approves, edits, and sends. A monthly readout covers reply rates, what the agent learned, and what we are changing.
Instrumentation
| KPI | Method | Notes |
|---|---|---|
| Communities surfaced per run | Pipeline run logs | Target: 100-200/week |
| Profile completeness | Schema-validated CommunityProfile outputs | Required fields filled before lead enters queue |
| Outreach reply rate | Sheets / AppSheet status workflow | Tracked per segment and per section |
| Human edit rate on drafts | Revision-harvest loop | Trending down = agent learning the voice |
| Pipeline state hygiene | Status enum (Not Started → Onboarded / Declined) | Growth team works the kanban |
Result
| The Number | Live, in production |
| Tier | ANECDOTE |
| Status | Operating monthly against the partner’s outreach goals |
Reply-rate and conversion data are early and the partner’s. We will report a Number on this engagement once we can earn one cleanly under the measurement policy.
Impact
The agent has replaced manual research as the source of Violette’s outbound pipeline. The growth team spends its time on the conversation, not the lookup. The studio is the licensor and operator; the partner pays a monthly retainer that includes the agent, the run, and a human in the loop on every outbound.
What we’d do differently
The first build went deep into Odoo CRM integration before we tested whether the growth team would actually live inside Odoo daily. They preferred AppSheet on top of the existing Sheet. We pivoted, the Odoo work parked, and now we ask the “where does the team actually want to work” question in week one of every engagement before any CRM picks gets made.
A monthly retainer also benefits from a sharper monthly readout. The current readout describes what happened. The next iteration ties each change explicitly to a hypothesis we tested that month, win or lose, so the partner sees the agent reasoning forward, not just operating.