If one B2B SaaS channel looks worse only because its leads are newer, do not reallocate budget from the blended report. Rebuild the comparison by acquisition cohort, evaluate every channel at the same age, show unresolved outcomes, and keep provisional pipeline separate from mature customer economics.
This problem is easy to miss because the dashboard arithmetic can be correct. Search may have 90 days of opportunity creation and closed revenue. A newer LinkedIn cohort may have 30 days. Dividing both channels' current outcomes by their leads gives two valid fractions and one invalid comparison.
At Stackmatix, the growth agency I co-founded, channel reporting has to support real budget and go-to-market decisions. That perspective informs this diagnostic. The framework is editorial guidance, and the worked example uses hypothetical data. It is not a client result or benchmark. External sources were checked on October 29, 2026.
Why does the recent channel look worse?
Outcomes arrive on different clocks:
- an inquiry can be qualified or disqualified in days;
- an opportunity may be created after discovery and technical review;
- a customer may close months later;
- revenue, retention, and expansion take longer still.
The newest cohort has had less opportunity to reach each state. This is sometimes called right censoring: the result is not necessarily negative; it is not fully observed yet.
Google Ads documents the same timing problem at the platform level. Its primary conversion columns assign a conversion to the time of the ad interaction, and its conversion-lag guidance warns that recent CPA can look inflated and recent ROAS can look depressed before delayed conversions arrive. That platform adjustment does not solve a 120-day CRM sales cycle, but it shows why recent performance needs a maturity label.
CRM timestamps matter too. HubSpot's stage calculated properties include dates entered and exited, time in the current stage, and cumulative time in a stage. Use the fields available in the actual CRM, but preserve raw transition timestamps and definition versions so reporting does not depend on a mutable current-stage label alone.
Use the MATURE diagnostic
MATURE means Metric, Acquisition, Time, Unresolved, Reconcile, Equal-age. Run it before ranking channels or moving budget.
| Step | Required decision | Output |
|---|---|---|
| Metric | Which commercial outcome is being compared? | Fixed numerator, denominator, and eligibility rule |
| Acquisition | When and how does an account enter the cohort? | Stable cohort date and source assignment |
| Time | How long does that outcome usually take to appear? | Outcome-specific maturity curve |
| Unresolved | Which records could still change the result? | Visible open and unknown states |
| Reconcile | Do source, cost, CRM, and outcome records join correctly? | Traceable counts and exception log |
| Equal-age | Are channels observed for the same elapsed period? | Comparable scorecard with provisional labels |
The goal is not to wait forever. It is to make the strongest decision the current evidence can support without describing incomplete outcomes as final.
Metric: define one outcome contract
“Conversion rate” is not a metric contract. Write the event and population.
For example:
Qualified opportunity rate at day 60 = eligible acquired accounts that created a sales-accepted opportunity within 60 days ÷ eligible acquired accounts
The contract should state:
- reporting unit: account, person, opportunity, or transaction;
- cohort entry event and timestamp;
- source and campaign assignment rule;
- eligibility and exclusions;
- exact outcome event and owner;
- outcome window;
- duplicate, reopened, merged, and recycled treatment;
- definition version and effective date; and
- treatment of missing or unmatched records.
Use one primary source per eligible unit. Keep influenced activity in a separate, non-additive view. The marketing-sourced pipeline contract provides the deeper source and opportunity rules.
Do not quietly change the denominator by channel. If Search reports contacts, paid social reports companies, and content reports form submissions, the cohort table cannot repair the mismatch.
Acquisition: anchor the cohort before the outcome
Choose the moment that starts the commercial clock. It may be first eligible inquiry, trial start, qualified lead creation, or first product action. The right event depends on the question.
Preserve:
- cohort date in one timezone;
- original source assignment and its rule;
- account identity and bridge confidence;
- segment, geography, offer, and route;
- acquisition cost tied to the cohort; and
- concurrent changes that could affect interpretation.
Google Analytics' cohort exploration documentation groups users by an inclusion condition such as acquisition date and observes a return condition over time. Its built-in cohort analysis is user and device oriented, so a B2B company may still need a CRM or warehouse cohort at the account level. The useful principle is the same: define who entered, when they entered, and what later behavior counts.
The CRM outcome map covers the identifiers, source fields, timestamps, and outcome states needed to trace that journey.
Time: build a maturity curve for each outcome
Do not assign one universal “mature after 90 days” rule to every metric. Build the curve from historical cohorts that used comparable definitions.
For each outcome, calculate the cumulative share observed by elapsed day:
| Elapsed age | Qualified opportunities observed | Customers observed | Interpretation |
|---|---|---|---|
| Day 14 | Actual cumulative share | Actual cumulative share | Early directional read |
| Day 30 | Actual cumulative share | Actual cumulative share | Qualification may be usable |
| Day 60 | Actual cumulative share | Actual cumulative share | Opportunity picture may be stabilizing |
| Day 90 | Actual cumulative share | Actual cumulative share | Use the business's observed curve |
| Day 180 | Actual cumulative share | Actual cumulative share | Longer customer and revenue view |
Use actual counts and shares from the company. Do not copy these ages as benchmarks.
Segment the curve only when the difference changes the decision. Enterprise and self-serve motions may need separate curves. So may inbound and outbound. Excessive slicing creates small samples that look precise but are not stable.
If sales process, qualification policy, product, or pricing changed materially, do not assume old timing applies. Label the curve version and keep the comparison cautious.
Unresolved: show the records that can still move
A lead is not lost merely because it has not become an opportunity. It is also not successful because it remains open.
Use mutually understandable states:
- qualified opportunity created;
- disqualified with reason;
- duplicate or ineligible;
- active and awaiting buyer action;
- active and awaiting company action;
- no response under a defined follow-up process;
- unknown because the record is incomplete; and
- outside the outcome window.
Show unresolved count and rate beside every provisional result. A channel with 12 opportunities and 45 unresolved accounts is in a different evidence state from one with 12 opportunities and five unresolved accounts.
Do not calculate an “opportunity rate among resolved leads” and use it as the primary ranking. Resolution can differ by channel, seller, segment, and age. Keep the original eligible cohort as the denominator, then use resolved-only views diagnostically.
Reconcile: prove the chain before explaining the result
Trace a sample from acquisition through the latest CRM state:
source event → identity bridge → CRM record → qualification transition → opportunity → customer outcome
Check:
- duplicated people or accounts;
- overwritten original source;
- multiple leads attached to one opportunity;
- manually created opportunities without a source bridge;
- reopened or recycled records;
- missing stage timestamps;
- opportunity amounts that changed after the snapshot;
- unmatched spend or inconsistent currency; and
- definition changes that split the cohort.
Reconcile aggregate counts after inspecting individual journeys. A clean-looking dashboard can still be wrong if a join silently drops the exact segment that converts slowly.
When records fail the join, keep them visible as unknown. Do not force them into the strongest convenient source.
Equal-age: compare every channel on the same clock
Choose a common age that supports the decision. For example:
- day 14 for routing and early qualification;
- day 45 for provisional opportunity creation;
- day 90 for a more mature opportunity view; and
- a later business-specific window for customer and revenue economics.
At each age, use the state the account had reached by that exact elapsed day. Do not use today's stage for an old day-45 snapshot. That leaks future information into earlier cohorts.
Present at least three views:
- Equal-age outcome: all cohorts measured at the same elapsed day.
- Latest observed outcome: current cumulative result, clearly labeled with cohort age.
- Mature outcome: only cohorts that crossed the agreed maturity condition.
The long-sales-cycle pricing test applies the same discipline to page experiments, where leading indicators can guide bounded decisions while revenue remains unresolved.
A hypothetical 300-account example
Assume a fictional B2B SaaS company acquired 100 eligible accounts from each of three channels. Search and content cohorts are 90 days old. LinkedIn is 45 days old.
The current dashboard shows:
| Channel | Cohort age | Accounts | Opportunities observed today | Current rate | Unresolved accounts |
|---|---|---|---|---|---|
| Search | 90 days | 100 | 18 | 18% | 8 |
| 45 days | 100 | 12 | 12% | 45 | |
| Content | 90 days | 100 | 15 | 15% | 10 |
The naive ranking is Search, Content, LinkedIn. It penalizes LinkedIn for having half the observation time and a much larger unresolved pool.
The team reconstructs each cohort at day 45:
| Channel | Opportunities by day 45 | Equal-age rate | Later opportunities not yet allowed in this view |
|---|---|---|---|
| Search | 10 | 10% | 8 |
| 12 | 12% | Not yet observable | |
| Content | 9 | 9% | 6 |
At equal age, the provisional ranking reverses: LinkedIn leads at 12%, followed by Search at 10% and Content at 9%. That does not prove LinkedIn will win at day 90. It proves the original ranking was not comparable.
Suppose the hypothetical LinkedIn cohort reaches 20 opportunities by day 90. Its mature rate becomes 20%, above Search at 18% and Content at 15%. If the team had cut LinkedIn at day 45 because it showed 12% against older cohorts, it would have acted on an observation-window error.
This example is not a channel benchmark or a claim about LinkedIn performance. It demonstrates the arithmetic and the decision risk.
Diagnose the report before moving budget
| Symptom | Likely failure | First check |
|---|---|---|
| Recent channels always look inefficient | Unequal cohort age | Outcome rate by days since acquisition |
| Ranking changes after month-end | Late outcomes or data refresh | Conversion occurrence date and CRM stage timestamps |
| Resolved-only rate looks unusually strong | Selective resolution | Original cohort denominator and unresolved mix |
| One channel has many unknowns | Identity or source join failure | Sample raw journeys and bridge confidence |
| Opportunity rate improves but customer rate does not | Outcome ladder or fit issue | Mature opportunity-to-customer cohorts |
| Older cohorts keep changing | Backfills, reopenings, or mutable definitions | Snapshot logic and definition version |
| Every segment tells a different story | Small samples or post-hoc slicing | Counts, prior hypothesis, and decision relevance |
Copy this maturity-adjusted scorecard
For every channel and cohort, record:
| Field | Entry |
|---|---|
| Cohort rule | Entry event, timezone, unit, source assignment |
| Eligibility | Included and excluded accounts |
| Cohort age | Elapsed days at report time |
| Outcome contract | Event, owner, definition version, window |
| Eligible count | Original denominator |
| Outcome by equal age | Count and rate at the selected day |
| Latest outcome | Current cumulative count and rate |
| Unresolved | Count, rate, and reason mix |
| Unknown or unmatched | Count and reconciliation status |
| Mature label | Provisional / decision-usable / mature under the written rule |
| Spend and economics | Cost tied to the same cohort and currency |
| Decision | Hold, investigate, capped expansion, reduce, or wait |
| Next review | Date, maturity trigger, owner |
Use the small-sample decision guide when equal-age cohorts are still too small to support a strong ranking. The right response may be a bounded test, a better diagnostic, or more time, not a forced winner.
Channel reporting should make uncertainty operational. Define the cohort, preserve the timestamps, expose unresolved records, compare equal ages, and let mature customer economics overrule the early leaderboard when they arrive.
