Measurement

From Conversion Lift to Contribution Profit: An Executable Budget Review Gate

Turn a completed lift study into a defensible budget review: reconcile scope and costs, calculate contribution scenarios, and test a fail-closed decision packet in JavaScript.

A dashboard can report more conversions while a budget decision remains unresolved. The practical task is not to find a more persuasive return metric. It is to connect the study's actual comparison to the proposed action, calculate the corresponding economics, and make the remaining uncertainty impossible to overlook.

Editorial note: AI-assisted research, writing and implementation by Growthcraft Editorial. The workflow below is an original operational synthesis, not a validated causal estimator. All business numbers and study packets are synthetic. No client outcome or personal review by Akshay is claimed.

Four things to take away

  • Signal recovery, attributed sales and incremental outcomes answer different questions. Do not substitute one for another in the revenue numerator.
  • Match revenue, spend, audience and outcome windows before calculating contribution profit. A mathematically correct ratio can still describe the wrong decision.
  • Keep causal uncertainty separate from economic sensitivity. Three revenue assumptions do not create a confidence interval.
  • Automate completeness and arithmetic checks, not spending approval. The most valuable output can be an explicit hold with a named missing document.

Why this handoff matters now

On 10 September 2026, Google announced measurement updates including a Data Strength Uplift metric for conversions recovered through first-party setup and global general availability of Meridian GeoX. These are different capabilities: improving observed signals and supporting geo-experimentation. Their arrival makes the distinction worth discussing, but does not establish search volume or prove that any particular advertiser will benefit. Google's measurement announcement.

The inference for a growth team is operational: as more reports and experiment outputs become available, the review process needs to identify what each output can support. A statement such as “conversions increased” is incomplete without its comparison. Did the business create new demand, recover previously missing records, change its attribution settings, or simply observe a seasonal increase? Do not make the finance calculation carry this unresolved ambiguity.

Start with the estimand, not the dashboard label

An estimand is the effect you intend to estimate. Write it in a sentence: the difference in mature net revenue for a defined population under one intervention compared with a specified counterfactual. The IAB and IAB Europe distinguish causal incrementality from attribution, and describe methods with different causal strengths and scopes. Selecting the method follows the business question. Incremental Measurement in Commerce Media guidelines, November 2025.

For the handoff, preserve the intervention dose, allocation unit, eligible audience, markets, start and end dates, outcome maturity, exclusions and counterfactual definition. Keep the protocol and analysis version together. “Paid social revenue in September” is not enough: it might refer to reported conversions across the whole account while the experiment covered only selected regions and a four-week spending difference.

Separate a study's point estimate and statistical uncertainty from a scenario chosen for planning. A confidence interval depends on an estimator and its assumptions; a low/base/high worksheet is merely three inputs unless an explicit probabilistic construction supports something more. Do not relabel an analyst's interval as a forecast range, or quietly treat a selected downside value as a risk percentile.

Reconcile the economics before evaluating the proposal

Use incremental net revenue R, pre-media contribution margin m, incremental media spend S, and other incremental costs O. Here, m is a fraction between zero and one. Contribution profit after the specified intervention costs is P = R × m − S − O. Incremental ROAS is R / S. Contribution ROI is P / (S + O). These are different quantities; a revenue multiple is not a profit margin.

Shopify's acquisition guide describes contribution margin in terms of revenue remaining after variable costs. In this implementation, the separately entered intervention costs must be excluded from that margin to prevent a second deduction. Shopify's customer-acquisition guide, 1 July 2026. Finance should specify where refunds, payment fees, shipping subsidies, fulfillment and discounts enter the model. If returns are already deducted from net revenue, do not deduct the same amount again as a cost.

When a test compares two nonzero spend levels, S is the spending difference corresponding to the revenue effect—not automatically the treatment group's full media bill. Likewise, do not combine a lift estimate expanded to the national population with a regional test budget. Keep currency and time basis fixed; changing the currency symbol is not foreign-exchange conversion.

The break-even revenue is (S + O) / m for positive margin. At zero margin, additional revenue cannot recover positive costs under this model. Zero media spend makes incremental ROAS undefined; zero total cost makes ROI undefined. Undefined ratios should be visible, not replaced with zero or infinity. Negative incremental revenue is legitimate as a hypothetical or estimated harmful effect. Negative-margin products and cost-saving interventions require a different model than this deliberately bounded calculator.

A worked example that does not approve a rollout

Consider a synthetic four-week intervention with €12,000 incremental media cost, €2,000 additional creative cost, and 60% pre-media contribution margin. The analyst and finance partner select €18,000, €30,000 and €42,000 as sensitivity assumptions. These are not measured interval endpoints. Total intervention cost is €14,000.

ScenarioIncremental revenueContribution before intervention costContribution profit
Low€18,000€10,800−€3,200
Base€30,000€18,000€4,000
High€42,000€25,200€11,200

The base revenue multiple is 2.50×, but contribution ROI is about 28.6%. Break-even revenue is €23,333.33 recurring. A low-case loss is not a quantified probability of losing money; it shows that the decision is sensitive to the entered assumptions. At a 40% margin, the same base revenue gives −€2,000 contribution profit. That margin sensitivity is useful even if the original revenue estimate is unchanged.

Now consider the actual request: double spending and enter three markets outside the study. Even if the base economics look attractive, the evidence does not automatically establish the marginal return at twice the spend, or transferability to those markets. Record the extrapolation. Ask for a bounded follow-up with a separately approved cap, outcome definition and review window. There is no universal “safe” budget increase embedded in this example.

Build a review packet with explicit authority boundaries

The following reference implementation accepts numeric assumptions and a small set of human-review assertions. It does not inspect the study, fit a causal model, or verify that a reviewer told the truth. A true flag means a responsible human has documented that check elsewhere. In production, use authenticated records and evidence references, not a public checkbox as proof.

Run the snippet in a modern JavaScript runtime with no dependencies. Values are ordinary numbers, not localized currency strings. The input limit of one trillion is a computational scope bound, not a spending recommendation. The code rejects missing or non-finite amounts, invalid ranges and numeric overflow. It deliberately returns readiness for a human decision, never an instruction to change a campaign.

function reviewBudget(packet) {
  const e = packet?.economics;
  const keys = ["spend", "otherCost", "marginPercent", "lowRevenue", "baseRevenue", "highRevenue"];
  if (!e || keys.some(k => typeof e[k] !== "number" || !Number.isFinite(e[k]) || Math.abs(e[k]) > 1e12)) {
    throw new Error("Six finite numeric inputs within one trillion are required.");
  }
  if (e.spend < 0 || e.otherCost < 0 || e.marginPercent < 0 || e.marginPercent > 100) {
    throw new Error("Invalid costs or margin.");
  }
  if (e.lowRevenue > e.baseRevenue || e.baseRevenue > e.highRevenue) {
    throw new Error("Order revenue assumptions low, base, high.");
  }
  const margin = e.marginPercent / 100;
  const cost = e.spend + e.otherCost;
  const profit = [e.lowRevenue, e.baseRevenue, e.highRevenue].map(r => r * margin - cost);
  const breakEven = margin > 0 ? cost / margin : cost === 0 ? 0 : null;
  if ((e.marginPercent > 0 && margin === 0) || (breakEven !== null && !Number.isFinite(breakEven))) {
    throw new Error("Numeric precision exceeded.");
  }
  const required = ["studyReviewed", "scopeMatched", "costsReconciled", "outcomesMature"];
  const blockers = required.filter(key => packet[key] !== true);
  if (typeof packet.approver !== "string" || !packet.approver.trim()) blockers.push("approver");
  return {
    status: blockers.length ? "hold_for_review" : "ready_for_human_decision",
    blockers,
    contributionProfit: profit,
    breakEvenRevenue: breakEven,
    economics: profit[0] > 0 ? "positive_in_all_entered_scenarios"
      : profit[2] < 0 ? "negative_in_all_entered_scenarios" : "sensitive",
    spendingAuthorized: false
  };
}

const example = {
  economics: { spend: 12000, otherCost: 2000, marginPercent: 60,
    lowRevenue: 18000, baseRevenue: 30000, highRevenue: 42000 },
  studyReviewed: false, scopeMatched: false,
  costsReconciled: true, outcomesMature: false, approver: ""
};
console.log(reviewBudget(example));

The fixture returns contribution profits of −3,200, 4,000 and 11,200, with blockers for study review, scope, outcome maturity and the absent approver. Its status is hold_for_review. Setting every review flag true and providing an approver changes readiness, not the spendingAuthorized value. Even uniformly negative economics can be ready for a human decision: that decision may be to reject the proposal. Readiness and profitability must not be collapsed into one green badge.

Validate behavior, not just the happy-path total

A useful test suite needs known answers and structural invariants. Verify the example above, the 40% margin variation, and the zero-cost/zero-margin case. Reject empty strings rather than letting numeric conversion turn them into zero. Reject negative costs, NaN, infinity, reversed scenario order and values outside the documented limit. Test extremely small positive denominators so an overflow cannot silently appear as an impressive return.

For a fixed nonnegative margin and fixed costs, contribution profit cannot decrease when revenue increases. Scaling all monetary inputs by a positive factor must scale contribution profit and break-even revenue by that factor, while leaving return ratios unchanged where defined. These invariants catch mistakes that one fixture misses, including percentage/fraction confusion and inconsistent cost scaling.

Also test the workflow boundary. Missing review flags, the string “true” rather than the boolean true, or a blank approver must retain a hold. Valid arithmetic with unresolved scope should still be blocked. A response from an AI model that says “approved” must never mutate these fields or bypass the actual review system. The reference code contains no campaign connector for precisely this reason.

Operationalize the packet without turning it into bureaucracy

Keep one versioned packet per proposed decision, rather than copying the same study into several presentations. The analysis owner provides the outcome contrast and limitations. Finance provides cost treatment and the applicable hurdle. The execution owner defines where the intervention would run. The approver records the decision, its rationale, review date and stop conditions. A small team can combine roles, but should not leave a responsibility implicit.

Store the raw approved assumptions, calculated output, code version and evidence references together. Exports should include the currency and the basis of the inputs. If a refund adjustment or study reanalysis changes the numerator later, create a new version and explain the difference. Do not edit an old “approved” record in place and lose the assumptions that supported the original action.

The gate can be a local script in an analyst's repository, a validated form in an internal application, or a review checklist attached to an experiment readout. Start with the least complex implementation that preserves ownership and traceability. Do not build a scheduling system around a metric whose numerator still cannot be reconciled.

Limits that should remain visible in the decision

This is a contribution model, not a full profit-and-loss statement or cash-flow forecast. Fixed overhead, inventory commitments, delayed collections, repeat purchases and opportunity costs may materially change the decision. A single margin assumes an unchanged economic mix; if product or customer mix changes with the intervention, calculate the relevant segments separately or use scenario-specific margins.

The code also cannot repair an invalid experiment. Contamination, interference, unmeasured changes, immature outcomes or unsupported extrapolation need methodological work. Rounded display values can conceal a tiny gain or loss near zero, so preserve raw precision and do not make automated approvals at a rounded threshold. A finance-defined buffer can be appropriate, but it must have a rationale rather than being invented by this tool.

Put the method to work

Start with the Incrementality-to-Budget Decision Framework to collect owners and evidence. Use the Incremental Profit & Break-Even Calculator to check the six numeric inputs locally. Then use the Evidence Review & Decision Memo Prompt to structure an anonymised review memo, with deterministic arithmetic verification.

The objective is a traceable decision, not a higher-looking ROAS. If the packet exposes a missing comparison or a scope mismatch before money moves, it has already done useful work. Bring that unresolved question—not just the headline lift—to a measurement conversation with Akshay.

View all growth marketing articles