HubSpot and Salesforce track the deals — they don’t track which marketing source created them. Without this report, your marketing leadership is forced to either trust the ad platforms’ self-reported numbers or hand-stitch the picture together in a spreadsheet every Monday. Either way, the data is too late and too rough to drive real budget decisions.
Building the report
Start with a Table report grouped by Source. Add columns for every lifecycle stage that matters for your motion: Leads, MQLs, SQLs, Demos Booked, Demos Attended, Opportunities, Closed-Won, and Closed-Won Value. The exact stage names should match your HubSpot or Salesforce pipeline (see lessons 2.3 and 2.4 for the mapping).
Add a cost-per-stage column for every meaningful stage. Cost-per-Lead and Cost-per-MQL are baseline; Cost-per-Demo-Attended and Cost-per-Customer are the ones that drive real budget decisions.
- Group by Source, sort by Closed-Won Value descending
- Use Last Non-Direct Touch as the default model
- Filter to paid sources for clean cost-per-stage comparisons
- Add a previous-period delta on each stage to spot drift
- Save the report and pin it to your weekly dashboard
How marketing leaders use it
The most useful pattern is a top-to-bottom scan. Look at the row with the most pipeline and ask: what does its cost-per-stage curve look like? Healthy paid channels show a smooth ramp from cost-per-lead to cost-per-customer. A channel where cost jumps 5x at one specific stage usually has a quality problem at that stage — bad creative, wrong audience, or a broken handoff to sales.
Click into any cell to see the underlying contacts and accounts. Most SLG teams use this drill-down weekly to investigate why a specific channel’s pipeline numbers changed.
What to watch for.
- Mapping deal stages incorrectly
If your MQL event fires on every form fill rather than on the actual lifecycle stage change, this whole report is meaningless. See lesson 2.3.
- Letting Direct sit at the top of the table
If 'Direct' is your largest pipeline source, the pixel isn’t doing its job. Fix that before trusting the rest of the report.
- Looking only at the last 30 days
B2B pipeline takes time to mature. Run this report at 60- or 90-day windows for SLG, not 30.
Recap.
- Group by Source, with one column per lifecycle stage
- Add cost-per-stage columns to surface where each channel becomes inefficient
- Filter to paid sources to compare Meta, Google, LinkedIn ABM, and TikTok side-by-side
- Use last-non-direct attribution so a final direct visit doesn’t steal credit
- Drill into any stage to see the contacts and full account-level journey