How to Reallocate Marketing Budget Using Attribution

· 13 min read · Includes downloadable resource

Reallocate budget using attribution in 5 steps: (1) Calculate current spend and attributed revenue per channel, (2) Compute marginal ROAS for each channel, (3) Identify over/under-invested channels, (4) Propose reallocation with sensitivity analysis, (5) Implement gradually and measure. Key principle: shift budget from channels with declining marginal returns to channels with higher marginal efficiency. Validate changes with incrementality tests before making large shifts.

The 5-Step Reallocation Process

STEP 1
Baseline Analysis
  • Current spend per channel
  • Attributed revenue per channel
  • Calculate average ROAS
STEP 2
Marginal Analysis
  • Estimate marginal ROAS curves
  • Identify saturation points
  • Find highest-opportunity channels
STEP 3
Reallocation Proposal
  • Calculate optimal allocation
  • Define max shift limits (20%)
  • Build conservative/aggressive scenarios
STEP 4
Sensitivity Analysis
  • Model revenue impact of shifts
  • Identify interdependency risks
  • Set success/failure thresholds
STEP 5
Implementation
  • Execute in phases (2–4 weeks)
  • Monitor leading indicators
  • Validate with holdout tests

Step 1: Baseline Analysis

Gather Current Data

Pull the following for each channel over the last 90 days:

sql
-- Baseline metrics by channel SELECT channel, SUM(spend) AS total_spend, SUM(attributed_revenue) AS total_revenue, SUM(attributed_revenue) / NULLIF(SUM(spend), 0) AS average_roas, COUNT(DISTINCT conversion_id) AS conversions, SUM(spend) / NULLIF(COUNT(DISTINCT conversion_id), 0) AS cpa FROM channel_performance WHERE date >= CURRENT_DATE - INTERVAL '90 days' GROUP BY channel ORDER BY total_spend DESC;

Example Baseline

BASELINE ANALYSIS (LAST 90 DAYS)

Channel Spend Revenue Avg ROAS Conv CPA
Paid Search $150,000 $525,000 3.5× 1,050 $143
Paid Social $100,000 $280,000 2.8× 700 $143
Email $20,000 $240,000 12.0× 600 $33
Display $50,000 $75,000 1.5× 250 $200
Retargeting $30,000 $120,000 4.0× 300 $100
Total $350,000 $1,240,000 3.5× 2,900 $121
Don't stop at average ROAS: Email looks amazing at 12.0x, but this is misleading. Email converts existing leads—it doesn't generate new demand. Reallocating budget TO email won't produce 12.0x returns. You need marginal analysis.

Step 2: Marginal Analysis

Why Marginal ROAS Matters

Average ROAS = Total revenue / Total spend
Marginal ROAS = Additional revenue from additional spend

These are very different:

PAID SOCIAL

Current spend: $100,000

Current revenue: $280,000

Average ROAS: 2.8×

If we add $20,000:

Estimated additional revenue: $40,000

Marginal ROAS: 2.0× (lower than average)

Why? Diminishing returns. We've already captured high-intent audiences.

EMAIL

Current spend: $20,000

Current revenue: $240,000

Average ROAS: 12.0×

If we add $20,000:

We can't "buy more email". The audience is fixed.

More spend = more frequency = fatigue = worse performance

Marginal ROAS: 0.5× or worse

Why? Email doesn't scale with spend the way paid does.

Estimating Marginal ROAS

Methods to estimate marginal returns:

Method How It Works Best For
Historical spend variation Compare ROAS at different spend levels Channels with spend variance
Geo experiments Increase spend in test markets Paid channels
Time-series analysis Regress ROAS against spend over time Stable channels
Platform curves Use platform's marginal cost projections Google, Meta
ruby
# Estimate marginal ROAS from historical data def estimate_marginal_roas(channel, spend_increase_pct: 0.20) historical = get_historical_performance(channel, months: 12) # Fit diminishing returns curve: Revenue = a * Spend^b (b < 1) model = fit_power_curve(historical[:spend], historical[:revenue]) current_spend = historical[:spend].last proposed_spend = current_spend * (1 + spend_increase_pct) current_revenue = model.predict(current_spend) proposed_revenue = model.predict(proposed_spend) marginal_revenue = proposed_revenue - current_revenue marginal_spend = proposed_spend - current_spend { current_roas: current_revenue / current_spend, marginal_roas: marginal_revenue / marginal_spend, saturation_point: model.find_inflection_point } end

Marginal ROAS by Channel

MARGINAL ROAS ANALYSIS

Channel Avg ROAS Marginal ROAS (at +20%) Status
Paid Search 3.5× 2.5× Room to grow
Paid Social 2.8× 2.0× Room to grow
Email 12.0× 0.5× Can't scale with $
Display 1.5× 1.8× Underinvested
Retargeting 4.0× 1.2× Near saturation

INSIGHT

Display has a higher marginal ROAS (1.8×) than its average (1.5×). We're underinvesting in display relative to the opportunity.

📌 PLACEHOLDER: Marginal ROAS Curve Visualization

Add chart showing diminishing returns curves for each channel. X-axis = spend, Y-axis = revenue. Show current position on each curve and the marginal slope at that point. Visual makes the concept immediately clear.

Step 3: Reallocation Proposal

Calculate Optimal Allocation

In theory, optimal allocation equals marginal ROAS across all channels:

OPTIMAL ALLOCATION PRINCIPLE

Move budget until: Marginal ROAS (Channel A) = Marginal ROAS (Channel B)

Paid Social marginal (2.0×) > Display marginal (1.8×)

→ Status quo is approximately optimal for these two

Display marginal (1.8×) > Retargeting marginal (1.2×)

→ Shift budget from Retargeting → Display

Build Reallocation Scenarios

PROPOSED REALLOCATION (CONSERVATIVE)

Channel Current Proposed Change Rationale
Paid Search $150,000 $157,500 +$7,500 High marginal ROAS
Paid Social $100,000 $110,000 +$10,000 Good marginal, more room
Email $20,000 $18,000 −$2,000 Can't scale with spend
Display $50,000 $62,000 +$12,000 Underinvested (high marginal)
Retargeting $30,000 $2,500 −$27,500 Near saturation
Total $350,000 $350,000 $0 Budget neutral

Maximum shift: 20% of any channel's budget. The Retargeting reduction is larger because its marginal ROAS is below the acceptable threshold.

Set Shift Limits

The 20% rule: Never reallocate more than 20% of a channel's budget in a single cycle. Larger shifts are too risky—you can't easily reverse if performance drops. Exception: channels below break-even marginal ROAS can be cut more aggressively.

Account for Interdependence

Before finalizing, check for channel dependencies:

If You Cut... Watch For...
Paid Social Email list growth slowing
Display Branded search volume dropping
Retargeting Longer conversion windows
Content/SEO Fewer MQLs entering pipeline
ruby
def check_interdependence(proposed_cuts) risks = [] proposed_cuts.each do |channel, cut_amount| dependent_channels = get_dependent_channels(channel) dependent_channels.each do |dep| impact = estimate_downstream_impact(channel, dep, cut_amount) if impact[:revenue_loss] > cut_amount * 0.3 risks << { cut_channel: channel, affected_channel: dep, estimated_loss: impact[:revenue_loss], recommendation: "Reduce cut amount or test with holdout" } end end end risks end

Step 4: Sensitivity Analysis

Model Revenue Impact

Calculate expected revenue change from reallocation:

ruby
def calculate_reallocation_impact(current, proposed) total_impact = 0 proposed.each do |channel, new_spend| old_spend = current[channel] spend_change = new_spend - old_spend if spend_change > 0 # Increasing spend: use marginal ROAS revenue_change = spend_change * marginal_roas(channel, direction: :increase) else # Decreasing spend: revenue loss at marginal rate revenue_change = spend_change * marginal_roas(channel, direction: :decrease) end total_impact += revenue_change end total_impact end

Scenario Table

SENSITIVITY ANALYSIS

Scenario Budget Shift Expected Revenue Expected ROAS Risk Level
Status Quo $0 $1.24M 3.5×
Conservative (+5%) $7,500 $1.27M 3.6× Low
Moderate (+10%) $15,000 $1.29M 3.7× Medium
Aggressive (+15%) $22,500 $1.31M 3.7× High

Note: the aggressive scenario has diminishing returns. The extra $7,500 shift only adds $20K revenue versus $30K in the moderate scenario.

Set Success/Failure Thresholds

Define in advance what would trigger reversal:

Metric Success Acceptable Failure (Reverse)
Overall ROAS +5% ±3% -5%
Increased channels +10% ROAS Flat -10% ROAS
Decreased channels N/A ROAS stable Other channels drop
Leading indicators On trend Slightly down Significant decline

📌 PLACEHOLDER: Sensitivity Analysis Calculator

Embed interactive calculator where users can: (1) Input current channel spend and ROAS, (2) Adjust proposed allocation, (3) See projected revenue impact with confidence ranges, (4) Download scenario comparison.

Step 5: Implementation

Phase the Rollout

Don't make all changes at once:

IMPLEMENTATION TIMELINE (8-WEEK EXAMPLE)

WEEK 1–2
Phase 1 (50% of shift)
  • Paid Search: +$3,750
  • Paid Social: +$5,000
  • Display: +$6,000
  • Retargeting: −$13,750
  • Monitor: daily spend, weekly performance
WEEK 3–4
Evaluation Period
  • Compare ROAS vs baseline
  • Check leading indicators (CTR, CPM, CVR)
  • Assess interdependence effects
  • Decision: proceed / pause / reverse
WEEK 5–6
Phase 2 (remaining 50%)
  • Complete remaining shifts
  • Adjust based on Phase 1 learnings
  • Begin holdout test in one geo
WEEK 7–8
Validation
  • Full performance comparison
  • Holdout test results
  • Document learnings
  • Plan next reallocation cycle

Monitor Leading Indicators

Don't wait for conversions—watch early signals:

Indicator Healthy Warning Action If Warning
CPM Stable or down Up >20% Audience saturation—slow increase
CTR Stable or up Down >15% Creative fatigue—test new creative
CPC Stable Up >25% Competition or quality—review targeting
CVR Stable or up Down >10% Traffic quality issue—check sources

Validate with Holdouts

Run a geo-holdout or randomized experiment to validate:

ruby
def design_reallocation_validation_test { test_type: :geo_holdout, duration: "4 weeks", treatment_geos: ["California", "New York", "Texas"], # 40% of traffic control_geos: ["All other states"], # 60% of traffic treatment: "New allocation (proposed)", control: "Old allocation (status quo)", success_metric: :attributed_revenue, minimum_detectable_effect: 0.05, # 5% lift analysis_plan: { primary: "Compare ROAS between test and control geos", secondary: "Compare by channel within test geos", validation: "Check for geo selection bias" } } end

📌 PLACEHOLDER: Reallocation Case Study

Add mbuzz customer example: "Company X identified Display as underinvested (1.8x marginal vs 1.2x Retargeting). They shifted $15K/month from Retargeting to Display. After 8 weeks, overall ROAS improved 8% with no decline in Retargeting-attributed conversions—they had hit saturation."

Common Reallocation Mistakes

Mistake 1: Chasing Average ROAS

Email might show 10x ROAS, but you can't "buy more email subscribers" by increasing spend. Always use marginal ROAS for allocation decisions.

Mistake 2: Ignoring Interdependence

Cutting paid social by 50% might cause email ROAS to drop 20% a month later—fewer people entering the list. Model dependencies before cutting.

Mistake 3: Moving Too Fast

Large, rapid shifts make it impossible to diagnose what worked. Phase changes over 4-8 weeks.

Mistake 4: Not Setting Failure Criteria

Without pre-defined reversal triggers, teams let bad allocations persist too long. Define "failure" before implementing.

Mistake 5: Reallocating Based on Platform Data

Google says Google is great. Meta says Meta is great. Both are biased. Use your own multi-touch data for allocation decisions.

Summary

Reallocate budget using this 5-step process:

  1. Baseline Analysis — Current spend, revenue, average ROAS by channel
  2. Marginal Analysis — Estimate diminishing returns curves, find highest opportunity
  3. Reallocation Proposal — Build scenarios with 20% max shift limits
  4. Sensitivity Analysis — Model revenue impact, set success/failure thresholds
  5. Implementation — Phase over 4-8 weeks, monitor leading indicators, validate with holdouts

Key principles:
- Use marginal ROAS, not average ROAS
- Account for channel interdependence
- Never shift more than 20% at once
- Validate with incrementality tests
- Quarterly cycles, not monthly

Further Reading

On Attribution for Budgeting:
- How to Build a Bottom-Up Revenue Forecast with MTA — Using attribution for planning
- How to Choose the Right Attribution Model — Model selection for budget decisions

📌 PLACEHOLDER: Downloadable Budget Template

Add download link for Excel workbook with: (1) Current allocation input sheet, (2) Marginal ROAS estimator, (3) Reallocation scenario builder, (4) Sensitivity analysis with charts, (5) Implementation timeline template.

Key Takeaways

  • Focus on marginal ROAS, not average ROAS, for reallocation decisions
  • Never reallocate more than 20% of a channel's budget at once
  • Validate with incrementality tests before major shifts
  • Account for channel interdependence—cutting introducers affects closers
How often should I reallocate budget based on attribution?
Quarterly for most businesses. Monthly reallocation can chase noise and doesn't allow enough time to see effects. Weekly reallocation is almost never appropriate—you need conversion cycles to complete. Exception: during major campaigns or seasonal peaks, you might adjust within-channel spend more frequently.
Should I use first-touch, last-touch, or multi-touch for budget decisions?
Multi-touch (linear or position-based) for cross-channel allocation. It provides the most balanced view of contribution. Use first-touch to understand pipeline sourcing and last-touch for conversion optimization, but neither alone is appropriate for budget allocation—they're too biased.
What if my attribution data conflicts with platform data?
Common situation. Platform data (Google, Meta) uses their own attribution, typically crediting themselves generously. Trust your multi-touch data for allocation decisions, but use platform data for within-platform optimization (bid strategies, audience targeting).
How do I handle channels with no attribution data?
Channels like podcasts, billboards, or TV rarely have direct attribution. Use MMM (media mix modeling) or incrementality tests for these. Don't assume zero contribution—they may be driving unattributed conversions that show up as 'direct' or 'branded search.'
What's the difference between reallocating budget and optimizing within a channel?
Reallocation moves budget between channels (Google → Facebook). Optimization adjusts within a channel (bid strategies, audiences, creative). Attribution data is good for reallocation; platform data is often better for within-channel optimization.
How do I prioritise budget allocation when performance data conflicts across Google, Meta, LinkedIn and programmatic?
Work in this order. First, stop summing platform numbers, because each platform claims the same conversion and the total always exceeds actual sales. Second, get one deduplicated cross-channel view so every channel is judged by the same attribution logic. Third, look at the spread between models rather than a single number: if a channel's credit holds steady across last-touch, linear and Markov, that is a robust signal; if it collapses when you change models, the channel's apparent performance was a model artefact. Fourth, allocate on marginal return, not average return, because the next dollar into a saturated channel is worth less than the average dollar already in it. Fifth, for your largest spend lines, confirm with a holdout or geo test before committing a big shift. Use platform data only for within-platform optimisation, never for cross-channel comparison.
Which channel should I trust when every platform claims credit for the same conversion?
None of them individually, because each platform can only see its own touchpoints and applies attribution logic designed to credit itself. Google Ads uses a 30-day click window, Meta uses 7-day click and 1-day view, and a single buyer who touched both gets counted twice. The resolution is not picking a winner among the platforms but adding a neutral layer that sees all touchpoints and applies one consistent model, then treating the platforms as directional inputs for optimisation inside each channel.
Holly Mehakovic
Holly Mehakovic

Co-Founder, mbuzz

Holly Mehakovic is Co-Founder of mbuzz. With 10+ years in marketing including roles at Westpac, Avon, and Forebrite, she's obsessed with making measurement actually useful.

Harvard Extension School Forebrite Westpac Avon

How mature is your marketing measurement?

The free Measurement Maturity Assessment shows where you stand, where you're exposed, and what to fix first. 10 questions, 3 minutes.

Take the Assessment

Ready to try server-side attribution?

Set up in 10 minutes. Free up to 30K records/month.