The problem
In Post 04, we built the full pipeline view: deals per stage, conversion rate between stages, monthly evolution. Everyone reading the same number. That view works. But an aggregated funnel hides a problem that only shows up when you cross the data with the source of each deal. A 15% win rate across the funnel can mean two very different things:- One channel converting at 50% and another at 2%, averaging out
- All channels converting at roughly the same rate
What we did
We grouped deals by acquisition channel and crossed each one with the funnel stages, calculating the percentage of deals from each channel that reached each stage. Two technical decisions made the analysis usable:- Use HubSpot’s automatic source attribution, not manual fields. We started with
custom_source(filled by the team) and only 16% of deals had it set. Switching tohs_analytics_sourcegave us 100% coverage, since HubSpot fills it automatically based on tracking. - Break
OFFLINEinto its sub-types. TheOFFLINEvalue ofhs_analytics_sourcegroups three very different things: API integrations, batch imports, and manually-created deals. Without splitting them, opposite behaviors get bundled into the same row.
What we found
The Nekt funnel is product-led, but the same diagnosis applies to a sales-led funnel (Lead → MQL → SQL → Opportunity → Won). The pattern of “different channels behave completely differently in the same funnel” holds in both cases.The break point
For organic signups, 69% of deals stop at the same stage. Not spread across the funnel. One specific cliff. Without channel breakdown, this looks like generic friction.
22× gap between channels
Same funnel, same product. Some channels converted at 57%, others at 2.6%. The aggregate win rate (15%) hid both extremes.
Volume vs activation
Two channels brought 70 deals between them. Five reached the activation stage. One closed. High volume at the top doesn’t mean high quality through the funnel.
The takeaway
A single funnel hides multiple funnels. Channels behave differently in the same pipeline because the users they bring have different intent, different context, and different reasons to convert. The diagnostic question changes from “what’s our conversion rate” to “what’s our conversion rate, by channel, at each stage.” That’s where the real next steps come from. This is Stage 02 of the maturity model: diagnosis. Knowing where the funnel breaks, and for whom.The Skill
Download the file below and add it to your Claude Skills. It will query your HubSpot pipeline data at Nekt and generate the funnel-by-channel analysis automatically. ⬇ Download Skill file (.md)SQL — Channel × stage heatmap
Group deals by acquisition channel and count how many reached each funnel stage. Replace the pipeline ID and stage IDs with the ones from your HubSpot account (use the pipeline overview query to discover them):- Nekt Express / GCP (BigQuery)
- AWS (Amazon Athena)
SQL — Stage-to-stage conversion by channel group
Compare how each channel progresses between consecutive stages. Useful to spot which channels stall at qualification vs. which stall at closing:- Nekt Express / GCP (BigQuery)
- AWS (Amazon Athena)
SQL — Monthly conversion trend by channel
Track whether the conversion rate of a specific channel is improving or worsening over time:- Nekt Express / GCP (BigQuery)
- AWS (Amazon Athena)
Variations
Drill down on direct traffic by landing page
Drill down on direct traffic by landing page
See which pages are driving the highest-quality traffic:
Detail paid campaigns by UTM
Detail paid campaigns by UTM
Compare conversion across paid campaigns:
Find deals stuck before a key stage
Find deals stuck before a key stage
List deals from a specific channel that never reached a critical stage so the team can reach out:
Watch the walkthrough (PT-BR)
Implementation notes
- Why
hs_analytics_sourceinstead ofcustom_source?custom_sourceis filled manually and tends to have low coverage (in our case, only 16% of deals had it set).hs_analytics_sourceis filled automatically by HubSpot for 100% of deals, based on tracking behavior. For channel-by-stage analysis, coverage matters more than precision. OFFLINEneeds to be split. TheOFFLINEvalue ofhs_analytics_sourcegroups three different cases:INTEGRATION(deal created via API),IMPORT(batch import, usually historical), andCRM_UI(manually created by a salesperson). Without splitting them, opposite behaviors get bundled into the same row.- Imported deals enter the funnel at later stages. Deals registered manually or via batch import are often created already at intermediate stages, skipping the early ones. Low percentages in early stages for those channels don’t mean drop-off, they just didn’t go through.
- The methodology applies to any funnel. This walkthrough uses our PLG funnel (workspace, setup, first source, first run, won) as the example, but the same channel × stage cross works for traditional funnels (Lead, MQL, SQL, Opportunity, Won). Only the stage IDs change.
- Pipeline and stage IDs are specific to each HubSpot account. Use the pipeline overview query to discover yours.
hs_v2_date_entered_*records when a deal entered each stage, even if it has since moved forward. This enables cumulative counting across the funnel.
Next up
With a clear diagnosis of where the funnel breaks and for which channels, the next step is using these conversion patterns to build the first lead scoring model. No machine learning required, just the historical data we already have.06 · Lead Scoring
Stage 03 · Predictive — Prioritize open deals using 6 factors from CRM history. No ML, just SQL.