Revenue Ops Overhaul
A Series-A SaaS team was leaking revenue — leads sat unrouted for hours, scoring was manual and no one knew which reps owned which accounts. We rebuilt the entire GTM engine inside HubSpot.
Client overview
A venture-backed B2B SaaS company (~40 employees) selling an operations platform to mid-market teams on an annual-contract model. Go-to-market was run by six account executives and two SDRs, with marketing generating roughly 400 inbound leads a month across paid, content and outbound channels.
The challenge
The team was running four disconnected tools with no single source of truth. Inbound leads sat in a shared inbox for up to 12 hours before being routed. Lead scoring was a spreadsheet last updated six months earlier. When a rep finally got a lead, half the enrichment data was missing or stale — meaning the first call was always cold.
Objectives
- Cut lead response time from hours to minutes without adding headcount
- Replace the stale, manual lead-scoring spreadsheet with an automated model
- Give sales managers real-time visibility into routing accuracy and pipeline velocity
- Resolve conflicting lifecycle-stage definitions so reporting means one thing across the org
The solution
Audit & data model
Mapped every object, property and association in the existing HubSpot instance. Identified 23 redundant properties and three conflicting lifecycle stage definitions. Agreed a clean canonical model — and a role-based permission set for admins, reps and read-only reporting users — before touching anything.
Instant routing engine
Built a Node.js microservice on AWS Lambda that fires on every new contact. It enriches via Clearbit, scores via a weighted model (ICP fit × intent signals), then assigns via round-robin with territory overrides. P99 latency under 400ms.
HubSpot workflow layer
Replaced 40+ manual sequences with 12 tight, well-named workflows. Each one has a single trigger, explicit goal criteria and a Slack alert on completion so reps always know what fired and why.
SLA alerting & dashboards
Set up escalation alerts: if an MQL sits unworked for 30 minutes, the rep's manager gets a Slack ping. Built a live HubSpot dashboard tracking response time, routing accuracy and pipeline velocity — reviewed in every Monday standup.
Technical architecture
Key features delivered
- Real-time enrichment and weighted ICP/intent scoring on every new contact
- Round-robin routing with territory and rep-capacity overrides
- 12 consolidated lifecycle workflows replacing 40+ ad hoc sequences
- SLA breach alerts to rep and manager the moment an MQL sits unworked
- Role-based permission sets separating admin, rep and reporting access
- Live pipeline-velocity dashboard reviewed in weekly standups
Results
- Lead response time dropped from an average of 8.4 hours to under 18 minutes.
- Routing accuracy hit 98% in the first week — up from roughly 60% under the manual process.
- Reps reclaimed about 12 hours per week previously spent on admin and data entry.
- Pipeline velocity increased 34% in the quarter following launch.
Challenges
23 redundant properties, 3 conflicting lifecycle stages
Years of ad hoc field creation meant reporting could be interpreted three different ways. Resolved by shipping a canonical data dictionary and migrating existing records to it before any workflow went live — automating on top of dirty data would have just automated the mess faster.
Sub-second enrichment under real traffic
The Lambda function's cold starts occasionally pushed enrichment past the 400ms target during low-traffic windows. Provisioned concurrency during business hours resolved it without paying for idle capacity overnight.
Alert fatigue risk
Early SLA thresholds fired too often and reps started ignoring them. Tuned thresholds against actual working hours and deal value tiers so alerts stayed rare enough to act on.
Lessons learned
- Fixing the data model before automating anything paid for itself — workflows built on clean properties needed almost no rework post-launch.
- Fewer, explicitly-scoped workflows were easier for the team to maintain long-term than many narrow ones.
- Provisioned concurrency is a cheap fix for latency-sensitive serverless functions that only need to be fast during business hours.
The team went from a reactive, spreadsheet-driven sales process to a system that routes, scores and escalates leads on its own. Reps spend their time selling instead of triaging, and managers can see pipeline health in real time instead of waiting for a weekly export.
Two-CRM Migration
Need something like this built?
Need help implementing HubSpot, AI automation or custom integrations? Tell me where the friction is — I'll map the system and hand it back clean.