We Built Our Own B2B Outreach Engine — Here's How It Works and What It Generated

Project: GarunaCDX Internal B2B Outreach Automation System
Built By: GarunaCDX Software Solutions LLP
Stack: Claude API · TypeScript · Brevo SMTP · Prisma · PostgreSQL · Vercel · Next.js 15
Status: Live in production — actively used for GarunaCDX's own outreach
Outcome: Personalised cold email sequences running autonomously across Indian and international markets
Why We Built This for Ourselves First
At GarunaCDX, we don't sell things we haven't shipped. Before we offer B2B outreach automation to clients, we built it, ran it, broke it, fixed it, and ran it again — for our own agency.
This matters for two reasons. First, it means we understand the failure modes intimately. Second, it means we can show you the actual system, the actual stack, and the actual results — not a theoretical proposal.
This case study documents the system we built to run GarunaCDX's outbound motion across Indian manufacturing, real estate, and hospitality SMEs, and international markets in the US, UK, UAE, and Australia.
ℹ️Did you know?
The average B2B cold email open rate across industries is 23–28%. Personalised cold emails — where the first line references something specific about the recipient's company — achieve open rates of 40–60% and reply rates 3–5x higher than generic templates. The problem is that writing truly personalised emails at scale is impossible for a human. That is exactly the problem this system solves.

The Problem We Were Solving
GarunaCDX needed to run outbound consistently. Not in bursts when someone had time, but continuously, intelligently, and at volume.
The challenge with B2B cold outreach at an agency level:
- Volume without personalisation gets ignored. Spray-and-pray blasts burn your domain reputation and get zero replies.
- Personalisation without volume doesn't scale. Writing individual emails is too slow to sustain a pipeline.
- Follow-up is where deals are won — and nobody does it. 80% of deals require 5+ touchpoints. Most agencies give up after one or two.
- Tracking is manual. Without automated reply detection, you don't know who responded, who bounced, and who needs a follow-up.
The system we built solves all four.
⚠️Watch out
Sending cold email at volume from your primary domain without proper warm-up, SPF/DKIM/DMARC configuration, and controlled send rates will get your domain blacklisted within weeks. Domain reputation damage can take months to recover. Always use a subdomain or a dedicated sending domain, warm it up over 2–3 weeks, and cap daily sends at 50–100 until the domain has history.
System Architecture

The system has five layers:
Layer 1 — Prospect List Ingestion
Prospect lists are sourced from:
- Apollo.io filtered exports (company size, industry, geography, tech stack)
- LinkedIn Sales Navigator exports (role, seniority, connection degree)
- Manual research for high-value targets
- Website contact forms and inbound signals
All prospects are normalised into a standard schema and inserted into the PostgreSQL database via Prisma:
Prospect {
id
firstName
lastName
email
companyName
companyWebsite
industry
companySize
country
linkedInUrl
status // "pending" | "queued" | "sent" | "replied" | "bounced" | "unsubscribed"
sequence // which email sequence they're enrolled in
sequenceStep // which step they're currently on
createdAt
lastContactedAt
}

Layer 2 — Enrichment
Before any email is written, the system enriches each prospect with live context:
- Apollo.io API — company headcount, revenue estimate, tech stack, recent news
- LinkedIn scraper — contact's current role, tenure, recent posts or activity
- Company website scraper — homepage headline, about section, recent blog posts
This enrichment data is stored alongside the prospect record and passed to the personalisation engine as context.
💡Pro tip
The single most effective personalisation signal in a cold email is a reference to something the recipient's company recently did — a product launch, a funding round, a new hire announcement, or a recent LinkedIn post. It takes 30 seconds for a human to find this. The enrichment layer finds it automatically for every prospect in your list before a single email is written.
Layer 3 — Claude Personalisation Engine
This is the core of the system. For each prospect, we pass to Claude:
- Prospect name, role, company, industry, size
- Enrichment data (tech stack, recent activity, company description)
- GarunaCDX's service offering for that industry vertical
- The sequence type (cold intro, follow-up 1, follow-up 2, break-up email)
- A structured prompt that enforces email length, tone, and format rules
Claude generates a unique email for every prospect at every sequence step. The output is validated against a character limit, checked for placeholder artefacts (e.g., "[INSERT NAME]" left in), and logged.
Prompt design principles we enforce:
- First line must reference something specific to the company or contact — never generic
- No buzzwords: "synergy," "cutting-edge," "leverage" are all filtered outputs
- Maximum 150 words for cold intro emails — shorter emails get higher reply rates
- Clear single CTA: one ask per email, no multiple options
- Tone varies by segment: formal for enterprise/manufacturing, conversational for startups and agencies

Layer 4 — Sequence Manager + Brevo SMTP
Each prospect moves through a multi-step email sequence. The standard sequence GarunaCDX runs:
| Step | Email Type | Send Delay | Focus |
|---|---|---|---|
| 1 | Cold intro | Day 0 | Problem + credibility signal |
| 2 | Follow-up 1 | Day 3 | Reframe value, add social proof |
| 3 | Follow-up 2 | Day 7 | Short check-in, lower ask |
| 4 | Break-up email | Day 14 | Permission-based close |
The sequence manager runs on a Vercel cron job that fires every hour. On each run, it:
- Queries for prospects whose
lastContactedAt+ delay ≤ now and status = "queued" - Fetches their enrichment data
- Calls Claude to generate the step-appropriate email
- Sends via Brevo SMTP with the prospect's email as the recipient
- Updates the prospect's
sequenceStep,lastContactedAt, andstatusin the database - Logs the sent email to the
EmailLogtable for full auditability
Brevo configuration:
- Dedicated sending subdomain (e.g.,
outreach.garunacdx.com) - SPF, DKIM, and DMARC records fully configured
- Daily send cap of 100 emails during warm-up, scaling to 300+ after 3 weeks
- Bounce handling: auto-status update to "bounced" via webhook


Layer 5 — Reply Detection + CRM Webhook
This is the part most outreach systems skip — and it is where deals are won or lost.
When a prospect replies:
- Brevo's inbound email webhook fires to our Next.js API route (
/api/webhooks/inbound-reply) - The webhook handler identifies the prospect by email address and updates their status to "replied"
- Claude analyses the reply — is it positive, negative, a referral to someone else, an out-of-office, or a request to unsubscribe?
- If positive: a Slack notification fires to the GarunaCDX team with the full reply context and a suggested response draft
- If unsubscribe: prospect is immediately moved to "unsubscribed" status — no further emails sent
- If out-of-office: sequence is paused and rescheduled for the return date extracted from the OOO message
- All replies are logged to the CRM with Claude's sentiment classification and suggested next action
🖼️ Visual: Slack notification mockup — showing the inbound reply alert with prospect name, company, reply snippet, Claude's sentiment tag ("Positive — expressed interest in custom CRM"), and a "Draft Response" button.
💡Pro tip
Out-of-office handling is a small detail that compounds into real results over time. Most outreach tools either ignore OOO replies or re-send the next sequence step to someone who's on holiday. Detecting the return date from the OOO message and rescheduling the follow-up for that date takes a few lines of Claude logic — and it is the kind of thoughtfulness that gets replies when the person returns.
Prospect Segments We've Run This Against
GarunaCDX has used this system to run outreach across:
Indian markets:
- Manufacturing SMEs (auto components, textiles, packaging) — pitch: ERP and ops automation
- Real estate developers (residential, commercial) — pitch: CRM + lead management platform
- Hospitality (hotel chains, restaurant groups) — pitch: booking integration and ops dashboards
- Schools and education institutes — pitch: school management systems
International markets:
- US: SaaS companies 20–100 employees — pitch: AI agent development and workflow automation
- UK: Professional services firms — pitch: custom internal tools and CRM
- UAE: Real estate and retail — pitch: web + CRM build
- Australia: SMEs needing offshore technical partners — pitch: white-label dev capacity

Results from Our Own Usage
⚠️Watch out
Outreach results vary significantly by industry, list quality, and sequence design. The numbers below reflect GarunaCDX's own campaigns run between December 2025 and mid-2026. We share them because transparency builds trust — not as guaranteed benchmarks.
| Metric | Result |
|---|---|
| Average open rate (personalised sequences) | 41–58% |
| Average reply rate | 8–14% |
| Positive reply rate (interested or referred) | 3–6% |
| Sequences running simultaneously | Up to 4 |
| Prospects enrolled per week | 50–150 |
| Human time per week on outreach | ~2 hours (reply handling only) |
What This System Costs to Run
| Component | Monthly Cost |
|---|---|
| Claude API (personalisation) | ~$40–80 |
| Brevo (transactional email) | $0–25 (free tier covers most volume) |
| Vercel (cron + API routes) | ~$20 |
| Apollo.io (enrichment) | Depends on plan — basic credits ~$49 |
| PostgreSQL (Supabase) | $0–25 |
| Total | ~$110–200/month |
A system that runs your outreach, writes every email, detects every reply, and keeps your pipeline moving — for under $200/month.
Yes. The core architecture — prospect ingestion, enrichment, Claude personalisation, Brevo delivery, reply detection — is replicable across any B2B business that does outbound. The customisation is in the ICP definition, sequence design, and industry-specific prompt tuning. Typical build time: 4–6 weeks.
About GarunaCDX
GarunaCDX Software Solutions LLP builds AI automation systems, B2B outreach engines, custom software, and web products. We are based in Panvel, Navi Mumbai, and work with clients across India, the US, the UK, Australia, and the UAE.
Work with us: garunacdx.com
This case study documents GarunaCDX's own internal outreach system. All metrics are from live production usage. The system is available as a custom build for clients — contact us for scoping.
Related case studies
Run a Automation business with similar operational pain?
Tell us your bottleneck — we’ll scope yours in a free 30-minute call.
Free consultation · Reply within 24 hours · No credit card

