A B2B SaaS scale-up's HubSpotHubSpot funnel, made readable again
How we took a HubSpot funnel nobody read anymore, 247 leads in and deals marked won that kept falling back out, and turned it into a pipeline the team could trust to decide.
Confidential · anonymizedWe never publish a client's name or logo without written consent, so the company here is hidden. The architecture and the figures are real and unchanged.
A B2B SaaS scale-up had a HubSpot funnel the team had quietly stopped reading: 247 leads in over twelve months, deals marked won that kept reappearing in the pipe, and reporting nobody trusted enough to decide on. The root cause was not HubSpot. It was a data model where the contact's lifecycle and the deal's pipeline were tangled into one column, so the numbers contradicted each other.
We split the two, audited the pipeline deal by deal, cleaned the stages down to six, and shipped five workflows plus a router in production that keep the hygiene running in real time, with a kill-switch. The outcome that matters: the funnel is readable again, and the team has numbers it can act on. This page is the long version.
The problem: a funnel nobody read anymore
The scale-up sells B2B software and, like most companies past their first growth spurt, it ran on HubSpot. On the surface the funnel looked alive: leads kept arriving, deals kept moving, the dashboard kept drawing charts. Underneath, nobody believed it. 247 leads had entered over twelve months, and the team could not tell you how many had actually turned into business, because the funnel said one thing on Monday and another on Friday.
The tell was the deals that would not stay won. A deal got marked closed-won, the celebration happened, and weeks later the same deal was back in an open stage, or a contact still showed as a hot lead long after they had signed. The reporting inherited the contradiction: win rate, conversion, pipeline value, every number depended on which broken field you read it from. A funnel that contradicts itself is worse than no funnel, because the team makes decisions on it anyway.
The mandate was not "migrate us off HubSpot". HubSpot was fine; the team lived in it. The mandate was: make this funnel mean something again, so that a lead is a lead, a customer is a customer, and the reporting can be trusted to steer the business, without ripping out the tool everyone already knew.
The root cause: one column doing two jobs
Before touching a workflow, the audit found why the numbers fought each other. The lifecycle of a contact and the pipeline of a deal are two different stories, and they had been mashed into the same logic. That single conflation is what made deals fall back out and customers look like leads.
Two stories, two axes
A person has a lifecycle: lead, then MQL, then SQL, then opportunity, then customer. It only ever moves forward; losing a deal does not turn a customer back into a lead. A deal has a pipeline: a separate path of stages from first interest to closed. When those two were driven by the same field, a lost deal dragged the contact backward, and a won deal that reopened corrupted the lifecycle. The fix started in the model, not the automation.
The rule that holds it together
Two invariants came out of the audit and became non-negotiable. The lifecycle never moves backward: a customer stays a customer even when a deal is lost. And the stage decides the fate of a deal, not the amount: a deal sitting in an early column is early even if it shows a big number on it. Holding those two lines is what keeps the funnel honest under pressure.
The build: a deal-by-deal audit, then hygiene that runs itself
With the two axes separated, the work split in two: clean what was already there by hand, then automate so it never drifts again. Five workflows plus a router run in production, in real time, with a thirty-minute safety net that catches anything missed.
The deal-by-deal audit
Every open deal was read individually against the cleaned stages, the temporary columns that had been bolted on over the years were removed, and the pipeline was brought down to six honest stages. Deals with no contact attached were resolved one by one rather than swept. Nothing was closed or reclassified in bulk on a rule: each boundary call was made on the real deal, because a mass mutation on a shared field is exactly how a clean-up turns into a corruption.
Hygiene that never sleeps
Then the automation. A contact that receives a first real touch moves to MQL; a meeting logged with intent moves it to SQL; creating a deal makes the contact an opportunity, and winning it makes them a customer. A company always inherits the stage of its most advanced contact, and a contact without a company gets one created from its email domain. It runs in real time on webhooks, with a thirty-minute sweep as a safety net, so a missed event self-heals instead of silently rotting the base.
One discipline runs through all of it: HubSpot is the single source of truth. The outreach layer on Lemlist only ever receives from HubSpot, never the other way around, so a contact is never born outside the system of record. And an excluded contact is never addressed, however good its title, because the gate is a hard barrier, not a suggestion.
What changed for the team
Forget the vanity charts. What changed is that the funnel stopped lying, and the team can finally read it.
The headline is honesty, not a counter. Before, the pipe claimed far more wins than the company had actually signed, because deals marked won kept falling back out and inflating every report. After, the funnel reads true: 247 leads in, the real signatures separated from the noise, and a win rate the team can quote without flinching. The numbers stopped contradicting themselves.
Underneath, the base now keeps itself clean. The lifecycle only moves forward, the stage decides each deal, excluded contacts never get addressed, and the whole thing self-heals every thirty minutes. The team got back the one thing a CRM is for: a funnel it can trust enough to decide on, on the tool it already owned, with a kill-switch if anything ever needs to stop.
What it runs on
A deliberately small build on the tools the team already owned, each piece doing one job and the company holding the keys.
- HubSpot — the single source of truth: the restructured data model, the lifecycle, the six-stage pipeline and the reporting.
- n8n — the automation layer: five workflows plus a router, in real time with a thirty-minute safety net and a kill-switch.
- Lemlist — outreach and nurturing, fed by HubSpot, with every email validated by hand before it sends.
- Enrichment providers — the waterfall behind keeping the network current, queried only when a value is missing.
No platform swap, no black box. Everything is documented and handed over, which is the same way every build we ship works.
This case, FAQ
Who is the client in this case study?
Why not migrate off HubSpot?
What is the difference between the lifecycle and the pipeline?
What runs automatically and what stays manual?
Can you do the same for our funnel?
Could this be your funnel?
Tell us how your pipeline, lifecycle and reporting run today, in text or a voice memo. We reply within 24 hours with where the system hits its ceiling, what that costs you, and a costed path to fix it. Free, no deck, no follow-up sequence.
Free 30-minute diagnostic