The number was bigger than the company
On one of my first calls of September I asked a marketing operations leader why her company had stopped trusting its own attribution reporting. Her answer was about arithmetic.
"The generated pipeline value that our current tool show, especially from a view like this where we're looking across all of our channels, the amount would be greater than all of the pipeline generated that quarter. So it was really hard for us to have any sort of people in the business trust that data."
More pipeline attributed to marketing than the whole company generated that quarter. Her tool was reporting past the size of the business.
She had been receiving that report for two years. Nobody had run the two reports below.
A note before you start, because I would rather say this at the top than be questioned towards the end. What follows is the reconciliation layer, and it is the floor rather than the ceiling. It is deliberately not statistically derived multi-touch attribution, it is not incrementality testing, and it is not marketing mix modelling. Those sit above it, they answer questions this cannot, and the last section is about what they require and what they still cannot promise. If your measurement practice is already there, skip to that section and tell me where I have it wrong.
Run this before you read the rest
If you are on Salesforce you can do this in the tab you already have open, and you will know the answer before you reach the next section.
1 | 2 |
|---|---|
New report, report type Campaigns with Influenced Opportunities (Customizable Campaign Influence). Filter to the quarter. Group by Campaign. Sum Opportunity Amount. Write down the grand total. | New report, standard Opportunities. Same window, same record types finance uses. Sum Amount. Write down that grand total. |
If the first number is larger than the second, you do not have a contribution number. You have a sum of overlapping reports, and you can prove it in the next sixty seconds.
The fix is inside the report you just built. Campaign Influence is a junction object, and it already stores a percentage and a revenue share against each campaign for each opportunity. Swap Opportunity Amount out of your summary and sum the revenue share column instead. That total cannot exceed the opportunity, because it is a split of it.
On HubSpot the objects are named differently and the test is identical. Sum the attributed amounts, sum the deal amounts over the same window, and see which is bigger.
Five opportunities, small enough to check by eye
Here is why the two totals differ. One quarter, five opportunities, three campaigns.
Opportunity | Amount | Campaigns that touched it, in order |
|---|---|---|
1 | $100,000 | Webinar (Mar), Paid Search (Apr), Field Event (May) |
2 | $250,000 | Paid Search |
3 | $80,000 | Field Event (Feb), Webinar (Apr) |
4 | $120,000 | none recorded |
5 | $50,000 | Webinar |
Actual pipeline created: $600,000.
Now pull each campaign's influence report. Every campaign shows the full amount of every opportunity it touched, because it did touch it.
Campaign | Opportunities touched | Influence report shows |
|---|---|---|
Webinar | 1, 3, 5 | $230,000 |
Paid Search | 1, 2 | $350,000 |
Field Event | 1, 3 | $180,000 |
Sum of the three reports | $760,000 |
$760,000 against $600,000 of pipeline. One-hundred and twenty seven per cent, and not one of those three campaign reports is wrong. Opportunity 1 is counted three times because three campaigns each correctly claim to have touched it.
Now split each opportunity once, evenly across the campaigns that touched it.
Campaign | Allocated credit |
|---|---|
Webinar | $123,333 |
Paid Search | $283,333 |
Field Event | $73,333 |
Marketing-allocated total | $480,000 |
$480,000 of $600,000. Eighty per cent, and it reconciles, because $480,000 is simply the sum of the four opportunities that had any marketing touch at all. Opportunity 4 is the remaining $120,000.
Three words are doing separate jobs here and most reports use them interchangeably.
Influenced | Allocated | Incremental |
|---|---|---|
The campaign touched the opportunity. Influenced figures overlap, so they cannot be added. | The opportunity's value was split once across its touches. Allocated figures do add, and they can reach a hundred per cent of the measured set by design. | It would not have happened without the marketing. Neither of the first two measures that. |
Her report was adding the first column and labelling it the second.
The sheet, with the formulas
Export one row per opportunity for the quarter. Six columns.
Column | Contains |
|---|---|
A | Opportunity ID |
B | Amount |
C | Created date |
D | Record type |
E | Touch count |
F | Allocated |
Four formulas underneath it.

That version credits any opportunity with at least one recorded touch, and it is the one to build first because it cannot double count.
If you publish a weighted model, export one row per touchpoint instead of one row per opportunity, put the model's own revenue figure in column F, and add this SUMIF check beside it:

That has to equal the opportunity's amount, every time. Higher and the model is double counting. Lower, if you did not intend a partial model, and touches are missing. Sort the column and look at the top and bottom twenty rows before you look at anything else.
Column D is the one people skip. Filter it to whatever finance means by pipeline before you calculate anything, because a contribution percentage computed over a different deal population than finance uses is not a disagreement about marketing, it is a disagreement about the company.
One-pager that marketing teams need
The two headline figures are the ones from the call on the first of September. The rest is filled in so the parts are visible, and your own specifics go where mine are.
MARKETING CONTRIBUTION, Q3 FY26
Reconciles to the pipeline report dated 1 October. Reconciliation layer. Weights asserted, not derived. See method note.
Scope. New-business opportunities created 1 July to 30 September. Opportunity amount as recorded at creation. Renewals and expansion excluded. USD at the rate used in the pipeline report.
Total new-business pipeline created: $85.0M. Finance's figure, from finance's report, unadjusted.
Marketing-allocated pipeline: $50.0M. 58.8% of the total. Linear allocation across recorded touches in the 90 days before opportunity creation. Each opportunity split once, so campaign figures sum to the opportunity and never above it. Every allocated opportunity carries an ID that appears in the total above.
Remainder: $35.0M. 41.2%. Opportunities with no marketing touch recorded inside the window. Part of that is pipeline marketing did not touch. Part of it is pipeline marketing touched without leaving a record. This report does not claim to know the split.
Known gaps, disclosed. Regional event list, campaign dated 12 days after the event. Partner portal, no CRM sync. Outbound activity logged against a separate object.
Method note. The split across campaigns is an assumption, not an estimate. No statistical method was used to derive it and no experiment has validated it. It is stable enough to compare quarters on a constant rule and it is not evidence of causal contribution.
What this supports deciding. How marketing-allocated pipeline moves quarter over quarter on a constant model, and which instrumentation to fix first.
What this does not establish. How much of the $50.0M would have happened anyway.
Two lines in there earn the whole page. The total sits above marketing's number in finance's own definition, so the arithmetic can be checked without leaving the page. And the allocated figure is a subset by construction, every row traceable to an ID inside that total, instead of a parallel calculation that happens to come out smaller.
Most contribution reports get discounted for the arithmetic. The good ones get discounted for pretending the model is a measurement, and that discount is deserved.
Three more checks, most expensive first
1. Check what your event touchpoints are dated on.
Check the dates behind your events. Pick a recent event and follow a few attendees into the reporting system. Does their touchpoint reflect when they attended, or when someone uploaded the list? A late upload can distort the sequence if the actual event date has not been preserved. The date field used depends on your integration and configuration.
2. Confirm the weights actually sum to one.
Include opportunities with many touches, few touches and none. Compare allocated amounts with the model's expected total for each opportunity. Investigate the differences before relying on the campaign summary.
3. Look for a channel reading exactly zero.
We have seen a missing field permission result in net-new ARR displaying as zero across channels. Nothing errored. The report rendered beautifully. Permissions are one possible explanation, alongside missing associations, filters, model rules or genuinely no qualifying outcomes. Trace a few records before interpreting zero as poor performance.
Nobody measured that the webinar was worth one-third
Go back to the allocation table. The webinar got $33,333 of opportunity 1. Ask why it was a third.
I picked it, by choosing to divide evenly. First touch would have given the webinar all $100,000. Marketo Measure’s W-shaped model would have given it thirty per cent, because that model assigns thirty to first touch, thirty to lead creation, thirty to opportunity creation and splits the last ten across everything in between. Each of those is a rule someone wrote down. None of them is an estimate of anything.
Run it on the five opportunities and you can watch the effect. Same data, same touches, one dropdown changed from linear to first touch.
Campaign | Linear | First touch | Change |
|---|---|---|---|
Webinar | $123,333 | $150,000 | +22% |
Paid Search | $283,333 | $250,000 | -12% |
Field Event | $73,333 | $80,000 | +9% |
Total | $480,000 | $480,000 | 0% |
The ranking held here, because five opportunities is a very small room. Across a dozen channels and a real quarter it often does not. A twenty-two per cent swing in the webinar's number came from a settings change, not from anything the webinar did. Run that comparison on your own data before you present anything. If your channel ranking flips between two standard models, your budget is being set by a dropdown.
This is where the method has to change. We're no longer just making the allocation more precise; we're trying to measure contribution from the data.
Weights should be derived from data instead of asserted. One way to do that is the removal effect: take all your observed paths, remove one channel from those paths, and see how much the conversion rate falls.
For example, if your paths convert at 10% with Paid Search present and 8% when Paid Search is removed, the removal effect is 20%. Do that for each channel and you have weights based on what changes in the data rather than a rule someone picked in a settings menu.
Shapley values take a different approach, measuring each channel's marginal contribution across different possible orderings of touches.
These methods are more defensible than simply declaring that first touch gets 40% and last touch gets 40%. But they still don't prove that the channel caused the outcome.
Both need conditions your current data may not meet.
You need enough converting paths for the transition probabilities to be stable, which means thousands, not the forty deals in a good quarter. You need touch capture that is consistent across channels, which is exactly what check 01 above tells you that you do not have. And the Markov version assumes a constant transition probability, so what it describes is an average customer who may not exist inside any of your actual segments.
Even done properly, that is still correlation. A channel with a high removal effect may be where people who were already going to buy happen to show up.
Which is why the last step is experimental, and it is the only one that answers the question finance is actually asking.
Hold a channel out from a random or geographic slice of the market and measure the difference in outcomes. Or build a marketing mix model and calibrate it against those experiments.
Google is unusually candid about what that costs you in certainty. Their Meridian documentation states that the required assumption, conditional exchangeability, means your control set "includes all confounding variables" and "excludes any mediator variables", that "in reality, the exchangeability assumption is never perfectly met", and that "there is no absolute best solution to MMM, which follows from the fundamental principles of causal inference from observational data."
The line worth carrying into your next vendor conversation is the other one they publish: "goodness of fit metrics don't give a complete picture of how good a model is for causal inference, and it is likely that the best model for causal inference is different from the best model for prediction."
A model that fits your history beautifully is not thereby a model that knows what caused it. Anyone showing you an R-squared as proof of incrementality is showing you the wrong number.
There are really three levels here, and most companies end up arguing about the last one before they've properly dealt with the first.
First, reconcile the numbers. Then estimate contribution. Then run experiments to understand causality.
I've been building these models for twenty years, and I've never seen one where marketing accounts for all of the pipeline. There's always something that sits outside it.
That's what I've seen across the engagements I've worked on. I wouldn't treat that as a benchmark for what your number should be. But if your remainder is very small, I'd want to go back and look at the definitions before I believed it.
Be clear about which stage you're actually at.
Finance can work with a reconciled number that admits its weights are assumptions. Give them a number they can pull apart, and they'll argue with the model. Give them one they can't, and they'll quietly start arguing with you.
If someone on your team owns attribution or builds the finance pack, send them the comparison at the top of this issue. They can run it before your next review, and the answer comes back either reassuring or urgent.
The Moneyball CMO goes out weekly to marketing leaders who have been disappointed by at least one attribution tool. Every issue takes one measurement problem I have watched a customer hit, and hands over the report, the formula or the field to check.
Read by teams at Zscaler, Glean, Abnormal Security and Ncontracts. Subscribe at https://the-moneyball-cmo.beehiiv.com/subscribe.
P.S. I'm the founder of RevSure AI, we are provide GTM teams with all the context they need about their systems and give them agents to run on top of it. As we keep on building new stuff, I spend a lot of time thinking about GTM measurement. That's where a lot of these ideas come from. Hopefully they're useful whether we ever work together or not.
