Skip to main content

Case study · SaaS

An outbound engine built from zero: 31 meetings a month, no SDR

A B2B SaaS company of about 40 people sold only through inbound and referrals. We diagnosed the funnel, designed one system with one job per tool and had it live in 24 days. By month three it booked 31 meetings a month without an SDR, and the process runs without us.

31meetings booked a month by month three, up from 6 to 8, without hiring an SDR

  • 31 meetings booked a month, up from 6 to 8
  • 9.4% reply rate, with a 1.1% bounce rate
  • 24 days from kickoff to the first sequence live
  • USD 30 of tooling per booked meeting
Client
B2B SaaS · about 40 people · USD 18k ACV · 45-day sales cycle
Industry
SaaS
Capabilities
GTM Strategy, Sales, RevOps & Technology
Published
October 15, 2026

The starting point

The company sold only through inbound and referrals, and it needed pipeline it could predict. It had two account executives, no SDR, and a CEO who still closed the largest accounts.

HubSpot ran the sales pipeline, with incomplete data. Salesforce was the system of record for contracts, billing and customer success, and someone fed it by hand after every close. The team's tasks lived in ClickUp, with no link to the pipeline: nothing that happened in the CRM became a task for anyone. Prospecting lists lived in spreadsheets, and each AE prospected their own way, in whatever hours were left.

The mandate was to build an outbound engine from zero that booked qualified meetings predictably, without hiring an SDR, and to leave the sales process documented well enough to run without us in the loop. The agreed deadline: pipeline running within five weeks.

Where the funnel stood, and where it was at month three

IndicatorBeforeMonth three
New meetings a month6 to 8, almost all referral and inbound31 booked, 25 held
Leads that never got a second touch60%Under 5%
Open deals without a stage or a next step40%0%: the CRM blocks it
AE hours spent prospecting10 to 12 a week each, with no methodNone: the time moved to diagnostics and proposals
Revenue attributionNoneEvery deal carries its source, sequence and segment
Ramp of a new AE90 days30 days, with the playbook and the runbook

How we ran it

We built in the order the risk demanded: diagnosis before any tool, deliverability before copy, playbook before volume.

  1. Weeks 1 and 2DiagnoseThe full funnel rebuilt in SQL, the ICP rebuilt from the best customers, and the sales process mapped as it really ran.
  2. Week 3Deliverability and dataThree secondary domains warming up, the ICP universe sourced and a scoring table that verifies, enriches and ranks every contact.
  3. Week 4Copy, booking and pipelineSequences written from won calls, a single booking page as the only call to action and a seven-stage pipeline with exit criteria.
  4. Week 5Automation and go-liveAutomations, the system of record and the weekly dashboard. The first sequence went live on day 24; the first meeting was booked on day 27.

Diagnosis first: the funnel, the ICP and the process

We spent the first two weeks on the whole funnel before opening any tool. The system was designed from three findings, not from the stack.

The bottleneck was the top of the funnel, not closing. We pulled 18 months of HubSpot and Salesforce data into Postgres and rebuilt every stage with SQL, from lead created to closed. Meeting to opportunity converted at 62% and proposal to close at 31%: closing was healthy. The problem was too few meetings coming in and half the leads stalling at first contact. Deals also sat 23 days on average in "Proposal sent", with no follow-up logged in 70% of cases.

The ICP became a score, not a paragraph. We cut the top 20% of customers, by revenue and retention, by segment, size, buyer role, stack and the event that triggered the purchase. Three profiles stood out: scaling companies of 50 to 200 people with a new operations team, bought by the Head of Ops; companies of 200 to 500 people replacing a legacy tool, bought by the RevOps or Finance director; and smaller companies with acute pain and short cycles, bought by the founder. The third closed fast but churned, so it became the lowest priority. Each profile turned into a 0 to 100 score built from firmographics, buyer role and intent signals: open roles in the function, a new funding round, a tool switch, headcount growth.

The process had no stages anyone agreed on. Interviews with both AEs and the CEO, and a week of calls and email, showed no stage definitions, no exit criteria, no owner for follow-up after a proposal and nothing in the CRM that created a task. The buyer pains from won calls became the three copy angles: time lost to manual work, no visibility for leadership, and the cost of a legacy tool.

The diagnosis delivered a funnel baseline (the SQL was reused for the dashboard), an ICP document with scoring and exclusion rules, five bottlenecks ranked by impact on meetings and revenue, and a process map with entry and exit criteria, an owner and an SLA for every stage.

One system, one job per tool

One design rule held everything together: each tool does one thing and hands its result to the next without a human in the middle. The team works in the CRM and in meetings, never in a spreadsheet.

  1. 01ApolloSources the ICP lists and sends the sequences
  2. 02ClayVerifies, enriches and scores every contact
  3. 03SequencesFour touches, one call to action
  4. 04CalendlyBooks straight into the right AE's calendar
  5. 05HubSpotRuns a seven-stage pipeline with exit criteria
  6. 06ClickUpCreates the playbook task at every stage change
  7. 07SalesforceRecords the account and the contract at close
  • Python · webhooks and scheduled jobs move, dedupe and route the data
  • Postgres · a daily consolidated copy of every tool: the source of truth for reporting
From lead to signed contract: each tool hands its result to the next. Python runs the hand-offs and Postgres keeps the record every report reads from.

What each tool owns, and what it deliberately does not do

ToolJobData it ownsWhat it deliberately does not do
ApolloSourcing and sendingRaw lists, send and reply historyNot a CRM: no deal lives there
ClayEnrichment, scoring and account researchVerified email, score, tier, a one-line account contextNever sends email
CalendlyBooking and routingMeeting, qualification answers, no-showsDoes not hold the deal
HubSpotSales pipeline and follow-upDeal, stage, next step, AE activityNot the source of truth for contracts
ClickUpPlaybook task executionTask, owner, due date, checklistHolds no customer data
SalesforceAccount and contract recordAccount, contract, value, dates, renewalNever used for prospecting
PythonOrchestration and rulesRun logsHolds no business state
PostgresReporting and analysisA daily consolidated copy of everythingNever edited by hand

Four decisions shaped the design:

  • HubSpot and Salesforce side by side was the company's reality, not a choice. Each got a single job, sales pipeline versus system of record, and they sync only at closed-won instead of a migration in the middle of the project.
  • Apollo both sources and sends. That removed one integration while the channel was being proven, with a dedicated sending tool kept as plan B if deliverability demanded it.
  • Clay runs before sending, not after. Poor enrichment means bounces, and bounces burn domains. We treated deliverability as infrastructure, not fine-tuning.
  • ClickUp gets a task only when a stage changes. Too many tasks become noise, and noise kills a playbook.

Build and go-live in 24 days

Week 3 went to deliverability and data. Three secondary domains with SPF, DKIM and DMARC, two inboxes each, and 14 days of warm-up before the first send; at most 30 emails per inbox a day, 180 in total, with rotation. The ICP universe in Apollo came to 9,400 accounts. The first cut was 600 accounts a month with three contacts each, the buyer and two influencers. In Clay, a three-provider email waterfall, cascading validation, firmographics, intent signals and a research agent that writes one line on what each account is doing now: 86% of the first batch came out with a verified email. The top 30% by score went into the full sequence with deep personalization, the next tier got segment-level personalization, and the rest waited.

Week 4 went to copy, booking and the pipeline. The copy came from won calls, in the customer's words: three angles, one per profile, with A/B variants of subject and opener, and four touches in twelve days. Every email carried one call to action, a booking page on the company's site with three qualification questions (size, current tool, urgency) and routing to the AE who owns the segment. The HubSpot pipeline was redesigned into seven stages, each with an exit criterion and required fields.

Week 5 went to automation, the record and the dashboard. Python jobs, triggered by webhooks and schedules: a positive reply creates the deal with its source, score and context; a booking moves the stage and creates the ClickUp task; a no-show triggers the rebooking flow; a closed-won deal writes account, contract and value to Salesforce; a nightly job dedupes and fixes the data. Every tool loads into Postgres daily, and one dashboard shows reply rate, positive replies, meetings booked and held, pipeline by stage and revenue by source, all by segment and by sequence.

The engine went live on day 24 with the top tier of the first batch. The first meeting was booked on day 27. At go-live the team had a playbook for every stage, the scoring and exclusion rules, a runbook for the automations and a data dictionary for the database.

Operating it: the playbook the CRM enforces

An engine is worth something only if what it books turns into revenue, so the first three months went to the middle of the funnel. ClickUp creates each stage's task automatically, and HubSpot will not let a deal move until the stage's fields are filled.

The pipeline playbook: exit criterion, follow-up and owner for every stage

StageExit criterionFollow-up and SLAOwner
Meeting bookedMeeting held, or a no-show loggedReminders 24 hours and 1 hour before; a no-show gets three rebooking touches in five daysSystem, then the AE
Meeting heldQualification filled in: size, pain, budget, timing, decision-makerCall summary in the CRM within 2 hours and a recap email the same dayAE
QualifiedDiagnostic bookedBooked within 48 hours; two touches in seven days if there is no answerAE
Diagnostic doneProposal sentProposal within 48 hours, with the problem in the client's own wordsAE
Proposal sentNegotiation started, or a loss with its reasonFive touches in 14 days: value, social proof, direct question, deadline, closeAE, with an automatic reminder
NegotiationContract signed, or a loss with its reasonThe next step is always dated; an alert after five idle daysAE, with the CEO on large accounts
Closed wonAccount and contract recorded in SalesforceHand-off to customer success within 24 hours, with the full historySystem, then customer success

A weekly cadence keeps it honest. On Monday, a 30-minute pipeline review on the dashboard, with stalled deals and last week's no-shows. On Wednesday, the week's replies get read: negative reasons adjust the list or the copy, and positive replies from outside the ICP become exclusion rules. On Friday, one experiment gets logged with its result, one at a time. Every month, a new batch of 600 accounts, a re-score, inbox rotation and a domain reputation check.

Institutionalizing meant three things in practice. Nothing depends on someone remembering, because the system creates the task or the CRM blocks the next stage. No data is typed twice. And a new AE can run the process from the playbook and the runbook, which took ramp time from 90 days to 30.

The result at month three

By month three the engine booked 31 meetings a month without an SDR, with a 9.4% reply rate and a 1.1% bounce rate. Every figure below comes from the system that owns it: Apollo for sends and replies, Calendly for bookings and no-shows, HubSpot for stages, and Salesforce for revenue.

  1. 01Contacts sourced1,800 · 600 accounts
  2. 02Verified email1,548 · 86% coverage
  3. 03Contacts sequenced1,080 · top two tiers, about 3,560 emails
  4. 04Replies102 · 9.4%
  5. 05Positive replies39 · 3.6%
  6. 06Meetings booked31 · 2.9%
  7. 07Meetings held25 · 81% show rate
  8. 08Qualified opportunities18 · 72% of meetings held
  9. 09Closed won5 a month · 28% win rate, from month four
The outbound funnel in one month, at month three. Rates are over contacts sequenced unless noted. Bar length is on a logarithmic scale.
  • USD 324k qualified pipeline a month, 18 opportunities at a USD 18k ACV
  • USD 90k new ARR a month from month four
  • 96% inbox placement, with 0.08% spam complaints
  • 30 days to ramp a new AE, down from 90

The engine is also cheap to run. Tooling costs USD 920 a month, which comes to USD 30 per booked meeting and USD 37 per meeting held. With a quarter of a GTM engineer's time for maintenance, USD 2,500 a month, the fully loaded cost is USD 110 per booked meeting and USD 137 per meeting held.

  • Clay (Growth plan)USD 495
  • Apollo (two seats)USD 198
  • Deliverability warm-up and monitoringUSD 97
  • Secondary domains and inboxes (three domains, six inboxes)USD 90
  • CalendlyUSD 20
  • Hosting for the Python jobs (Railway)USD 20
  • TotalUSD 920
  • USD 30 of tooling per booked meeting
  • USD 110 per booked meeting, with engineering time included
Monthly tooling cost of the outbound engine, in US dollars

What made the difference

  • The order. Diagnosis before tools, deliverability before copy, playbook before volume.
  • Deliverability is infrastructure. The 14 days of warm-up felt slow in week three, and they are what kept bounce at 1.1%. Next time we would start warming domains on day one of the diagnosis.
  • A smaller, better list won. The top tier, 30% of the list with deep personalization, produced more than half of the meetings.
  • Automatic tasks have to be scarce. The first version created a ClickUp task for every activity and the AEs stopped looking. The final one creates tasks only on a stage change and on a no-show.
  • Copy written with the AEs, in the customer's words, beat every "creative" variant we tested.
  • The process held only when the CRM enforced it. Training did not keep the playbook alive; required fields and exit criteria did.
  • One hour a week reading the "no" replies was worth more than any tool tweak.

Where is your revenue engine leaking?

Your privacy choices

We use strictly necessary cookies to run this site. With your consent, we would also use analytics and marketing cookies. You can change your choice at any time from Cookie settings in the footer. Read the cookie policy