# How to Reallocate Marketing Budget Using Attribution

A practical workflow for using multi-touch attribution data to reallocate marketing budget. Includes the 5-step reallocation process, sensitivity analysis, common pitfalls, and a downloadable budget template.

- Canonical: https://mbuzz.co/articles/budget-reallocation-attribution
- Published: 2026-07-23
- Author: Holly Mehakovic, mbuzz (https://mbuzz.co)

---

> **TL;DR:** 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

<div class="not-prose my-8 flex flex-wrap items-stretch gap-2">
  <div class="flex-1 min-w-[150px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">STEP 1</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Baseline Analysis</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Current spend per channel</li>
      <li>Attributed revenue per channel</li>
      <li>Calculate average ROAS</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[150px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">STEP 2</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Marginal Analysis</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Estimate marginal ROAS curves</li>
      <li>Identify saturation points</li>
      <li>Find highest-opportunity channels</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[150px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">STEP 3</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Reallocation Proposal</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Calculate optimal allocation</li>
      <li>Define max shift limits (20%)</li>
      <li>Build conservative/aggressive scenarios</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[150px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">STEP 4</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Sensitivity Analysis</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Model revenue impact of shifts</li>
      <li>Identify interdependency risks</li>
      <li>Set success/failure thresholds</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[150px] bg-emerald-50 border border-emerald-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-emerald-600 mb-1">STEP 5</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Implementation</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Execute in phases (2&ndash;4 weeks)</li>
      <li>Monitor leading indicators</li>
      <li>Validate with holdout tests</li>
    </ul>
  </div>
</div>

## 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

<p class="text-xs font-bold text-slate-500 tracking-[0.15em] mt-8 mb-2">BASELINE ANALYSIS (LAST 90 DAYS)</p>

| Channel | Spend | Revenue | Avg ROAS | Conv | CPA |
|---------|-------|---------|----------|------|-----|
| Paid Search | $150,000 | $525,000 | 3.5&times; | 1,050 | $143 |
| Paid Social | $100,000 | $280,000 | 2.8&times; | 700 | $143 |
| Email | $20,000 | $240,000 | 12.0&times; | 600 | $33 |
| Display | $50,000 | $75,000 | 1.5&times; | 250 | $200 |
| Retargeting | $30,000 | $120,000 | 4.0&times; | 300 | $100 |
| **Total** | **$350,000** | **$1,240,000** | **3.5&times;** | **2,900** | **$121** |

> **Warning:**
> **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:

<div class="not-prose my-8 grid grid-cols-1 md:grid-cols-2 gap-4">
  <div class="bg-white border border-slate-200 rounded-lg overflow-hidden">
    <div class="px-4 py-2 border-b border-slate-200 bg-indigo-50">
      <p class="text-xs font-bold text-indigo-600 tracking-[0.15em]">PAID SOCIAL</p>
    </div>
    <div class="px-4 py-4 space-y-2 text-sm text-slate-700">
      <p>Current spend: <strong class="text-slate-900">$100,000</strong></p>
      <p>Current revenue: <strong class="text-slate-900">$280,000</strong></p>
      <p>Average ROAS: <strong class="text-slate-900">2.8&times;</strong></p>
      <div class="border-t border-slate-100 pt-2 mt-2">
        <p class="text-xs text-slate-500 mb-1">If we add $20,000:</p>
        <p>Estimated additional revenue: <strong class="text-slate-900">$40,000</strong></p>
        <p>Marginal ROAS: <strong class="text-amber-700">2.0&times;</strong> <span class="text-xs text-amber-700">(lower than average)</span></p>
      </div>
      <p class="text-xs text-slate-500 border-t border-slate-100 pt-2 mt-2">Why? Diminishing returns. We've already captured high-intent audiences.</p>
    </div>
  </div>
  <div class="bg-white border border-slate-200 rounded-lg overflow-hidden">
    <div class="px-4 py-2 border-b border-slate-200 bg-pink-50">
      <p class="text-xs font-bold text-pink-600 tracking-[0.15em]">EMAIL</p>
    </div>
    <div class="px-4 py-4 space-y-2 text-sm text-slate-700">
      <p>Current spend: <strong class="text-slate-900">$20,000</strong></p>
      <p>Current revenue: <strong class="text-slate-900">$240,000</strong></p>
      <p>Average ROAS: <strong class="text-slate-900">12.0&times;</strong></p>
      <div class="border-t border-slate-100 pt-2 mt-2">
        <p class="text-xs text-slate-500 mb-1">If we add $20,000:</p>
        <p>We can't "buy more email". The audience is fixed.</p>
        <p>More spend = more frequency = fatigue = worse performance</p>
        <p>Marginal ROAS: <strong class="text-amber-700">0.5&times;</strong> <span class="text-xs text-amber-700">or worse</span></p>
      </div>
      <p class="text-xs text-slate-500 border-t border-slate-100 pt-2 mt-2">Why? Email doesn't scale with spend the way paid does.</p>
    </div>
  </div>
</div>

### 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

<p class="text-xs font-bold text-slate-500 tracking-[0.15em] mt-8 mb-2">MARGINAL ROAS ANALYSIS</p>

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

<div class="bg-emerald-50 border-l-4 border-emerald-400 p-5 my-8 rounded-r-md not-prose">
  <p class="text-xs font-bold text-emerald-600 tracking-[0.15em] mb-2">INSIGHT</p>
  <p class="text-sm text-slate-700 leading-relaxed">Display has a higher marginal ROAS (1.8&times;) than its average (1.5&times;). We're underinvesting in display relative to the opportunity.</p>
</div>

<div class="bg-yellow-50 border-2 border-dashed border-yellow-400 p-4 my-6 rounded-lg not-prose">
  <p class="text-yellow-800 font-bold mb-2">📌 PLACEHOLDER: Marginal ROAS Curve Visualization</p>
  <p class="text-yellow-700 text-sm">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.</p>
</div>

## Step 3: Reallocation Proposal

### Calculate Optimal Allocation

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

<div class="bg-slate-50 border-l-4 border-slate-400 p-5 my-8 rounded-r-md not-prose">
  <p class="text-xs font-bold text-slate-500 tracking-[0.15em] mb-3">OPTIMAL ALLOCATION PRINCIPLE</p>
  <p class="text-sm text-slate-700 leading-relaxed mb-4">Move budget until: Marginal ROAS (Channel A) = Marginal ROAS (Channel B)</p>
  <div class="space-y-3">
    <div class="bg-white border border-slate-200 rounded-md p-3">
      <p class="text-sm text-slate-700">Paid Social marginal (2.0&times;) &gt; Display marginal (1.8&times;)</p>
      <p class="text-sm text-slate-500 mt-1">&rarr; Status quo is approximately optimal for these two</p>
    </div>
    <div class="bg-white border border-slate-200 rounded-md p-3">
      <p class="text-sm text-slate-700">Display marginal (1.8&times;) &gt; Retargeting marginal (1.2&times;)</p>
      <p class="text-sm text-emerald-700 mt-1">&rarr; Shift budget from Retargeting &rarr; Display</p>
    </div>
  </div>
</div>

### Build Reallocation Scenarios

<p class="text-xs font-bold text-slate-500 tracking-[0.15em] mt-8 mb-2">PROPOSED REALLOCATION (CONSERVATIVE)</p>

| 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 | &minus;$2,000 | Can't scale with spend |
| Display | $50,000 | $62,000 | +$12,000 | Underinvested (high marginal) |
| Retargeting | $30,000 | $2,500 | &minus;$27,500 | Near saturation |
| **Total** | **$350,000** | **$350,000** | **$0** | **Budget neutral** |

<p class="text-sm text-slate-500 my-4">Maximum shift: 20% of any channel's budget. The Retargeting reduction is larger because its marginal ROAS is below the acceptable threshold.</p>

### Set Shift Limits

> **Note:**
> **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

<p class="text-xs font-bold text-slate-500 tracking-[0.15em] mt-8 mb-2">SENSITIVITY ANALYSIS</p>

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

<p class="text-sm text-slate-500 my-4">Note: the aggressive scenario has diminishing returns. The extra $7,500 shift only adds $20K revenue versus $30K in the moderate scenario.</p>

### 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 |

<div class="bg-yellow-50 border-2 border-dashed border-yellow-400 p-4 my-6 rounded-lg not-prose">
  <p class="text-yellow-800 font-bold mb-2">📌 PLACEHOLDER: Sensitivity Analysis Calculator</p>
  <p class="text-yellow-700 text-sm">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.</p>
</div>

## Step 5: Implementation

### Phase the Rollout

Don't make all changes at once:

<p class="text-xs font-bold text-slate-500 tracking-[0.15em] mt-8 mb-2">IMPLEMENTATION TIMELINE (8-WEEK EXAMPLE)</p>

<div class="not-prose my-8 flex flex-wrap items-stretch gap-2">
  <div class="flex-1 min-w-[160px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">WEEK 1&ndash;2</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Phase 1 (50% of shift)</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Paid Search: +$3,750</li>
      <li>Paid Social: +$5,000</li>
      <li>Display: +$6,000</li>
      <li>Retargeting: &minus;$13,750</li>
      <li>Monitor: daily spend, weekly performance</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[160px] bg-amber-50 border border-amber-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-amber-700 mb-1">WEEK 3&ndash;4</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Evaluation Period</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Compare ROAS vs baseline</li>
      <li>Check leading indicators (CTR, CPM, CVR)</li>
      <li>Assess interdependence effects</li>
      <li>Decision: proceed / pause / reverse</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[160px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">WEEK 5&ndash;6</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Phase 2 (remaining 50%)</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Complete remaining shifts</li>
      <li>Adjust based on Phase 1 learnings</li>
      <li>Begin holdout test in one geo</li>
    </ul>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[160px] bg-emerald-50 border border-emerald-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-emerald-600 mb-1">WEEK 7&ndash;8</div>
    <div class="text-sm font-semibold text-slate-900 mb-2">Validation</div>
    <ul class="text-xs text-slate-600 space-y-1">
      <li>Full performance comparison</li>
      <li>Holdout test results</li>
      <li>Document learnings</li>
      <li>Plan next reallocation cycle</li>
    </ul>
  </div>
</div>

### 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
```

<div class="bg-yellow-50 border-2 border-dashed border-yellow-400 p-4 my-6 rounded-lg not-prose">
  <p class="text-yellow-800 font-bold mb-2">📌 PLACEHOLDER: Reallocation Case Study</p>
  <p class="text-yellow-700 text-sm">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."</p>
</div>

## 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](/articles/bottom-up-revenue-forecast) — Using attribution for planning
- [How to Choose the Right Attribution Model](/articles/how-to-choose-attribution-model) — Model selection for budget decisions

<div class="bg-yellow-50 border-2 border-dashed border-yellow-400 p-4 my-6 rounded-lg not-prose">
  <p class="text-yellow-800 font-bold mb-2">📌 PLACEHOLDER: Downloadable Budget Template</p>
  <p class="text-yellow-700 text-sm">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.</p>
</div>

## 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


## FAQ

**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.


