---
title: Paid media improvement forecast
date: 2026-04-13T13:13:39Z
modified: 2026-04-13T13:13:40Z
permalink: "https://empower.agency/paid-media-improvement-forecast/"
type: post
status: publish
excerpt: See what happens to your results when you improve your campaign metrics and how much extra revenue that improvement could unlock.
wpid: 5398
categories:
  - Empower Life
featured_image: /wp-content/uploads/2026/04/Paid-media-improvement-forecast.jpg
featured_image_alt: Paid media improvement forecast
author: Ben Matthews
---

Paid media improvement forecast
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  body {
    font-family: 'Open Sans', sans-serif;
    background: #f7f7f5;
    color: #2c2c2c;
    font-size: 18px;
    line-height: 1.65;
  }

  .page { max-width: 780px; margin: 0 auto; padding: 48px 24px 80px; }

  h1 { font-size: 32px; font-weight: 700; color: #1a1a1a; margin-bottom: 8px; }
  h2 { font-size: 22px; font-weight: 700; color: #1a1a1a; margin-bottom: 12px; margin-top: 40px; }
  p { color: #444; margin-bottom: 12px; }
  p:last-child { margin-bottom: 0; }

  .intro-block { margin-bottom: 40px; }
  .intro-block .tagline { font-size: 19px; color: #555; margin-bottom: 16px; font-weight: 400; }

  .how-to { background: #fff; border: 1px solid #e2e2e0; border-radius: 10px; padding: 24px 28px; margin-bottom: 36px; }
  .steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; margin-top: 16px; }
  .step { display: flex; gap: 12px; align-items: flex-start; }
  .step-num { width: 28px; height: 28px; min-width: 28px; border-radius: 50%; background: #2c2c2c; color: #fff; font-size: 13px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin-top: 2px; }
  .step-text { font-size: 15px; color: #555; }

  .tool-card { background: #fff; border: 1px solid #e2e2e0; border-radius: 10px; padding: 28px; margin-bottom: 36px; }

  .currency-row { display: flex; align-items: center; gap: 10px; margin-bottom: 24px; }
  .currency-row label { font-size: 15px; font-weight: 600; color: #555; }
  .currency-row select { height: 38px; border: 1px solid #d0d0ce; border-radius: 6px; padding: 0 10px; font-size: 15px; font-family: 'Open Sans', sans-serif; color: #2c2c2c; background: #fff; cursor: pointer; }
  .currency-row select:focus { outline: none; border-color: #2c2c2c; }

  .section-title { font-size: 13px; font-weight: 700; color: #777; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 1px solid #eee; }

  .field-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 24px; }
  .field { display: flex; flex-direction: column; gap: 4px; }
  .field label { font-size: 15px; font-weight: 600; color: #2c2c2c; }
  .field .tip { font-size: 14px; color: #888; line-height: 1.45; margin-top: 3px; }

  .input-wrap { display: flex; height: 42px; }
  .input-pre, .input-suf {
    display: flex; align-items: center; padding: 0 10px;
    background: #f2f2f0; border: 1px solid #d0d0ce;
    font-size: 15px; font-weight: 600; color: #666;
    white-space: nowrap;
  }
  .input-pre { border-right: none; border-radius: 6px 0 0 6px; }
  .input-suf { border-left: none; border-radius: 0 6px 6px 0; }
  .input-wrap input {
    flex: 1; border: 1px solid #d0d0ce; border-radius: 0;
    padding: 0 10px; font-size: 16px; font-family: 'Open Sans', sans-serif;
    color: #2c2c2c; background: #fff; min-width: 0;
  }
  .input-wrap input:only-child { border-radius: 6px; }
  .input-wrap input:focus { outline: none; border-color: #2c2c2c; z-index: 1; position: relative; }

  .calc-btn {
    display: inline-block; padding: 13px 30px; background: #2c2c2c; color: #fff;
    border: none; border-radius: 7px; font-size: 16px; font-weight: 700;
    font-family: 'Open Sans', sans-serif; cursor: pointer; margin-top: 8px;
    transition: background 0.12s;
  }
  .calc-btn:hover { background: #444; }

  .divider { border: none; border-top: 1px solid #eee; margin: 28px 0; }

  /* Results */
  .results { margin-top: 28px; display: none; }
  .results-inner { background: #f7f7f5; border: 1px solid #e0e0de; border-radius: 8px; padding: 20px 24px; }
  .results-title { font-size: 16px; font-weight: 700; color: #1a1a1a; margin-bottom: 14px; }

  table.res { width: 100%; border-collapse: collapse; font-size: 15px; }
  table.res th { font-size: 13px; font-weight: 700; color: #777; padding: 0 0 8px; border-bottom: 1px solid #e0e0de; text-align: left; }
  table.res th.right { text-align: right; }
  table.res td { padding: 9px 0; border-bottom: 1px solid #f0f0ee; color: #2c2c2c; vertical-align: middle; }
  table.res td.right { text-align: right; font-weight: 600; }
  table.res td.cur { text-align: right; color: #666; }
  table.res td.delta-pos { text-align: right; color: #2a7a2a; font-weight: 600; }
  table.res td.delta-neg { text-align: right; color: #c0392b; font-weight: 600; }
  table.res td.delta-none { text-align: right; color: #bbb; }
  table.res tr.highlight td { font-weight: 700; font-size: 16px; background: #fff; }
  table.res tr.highlight td:first-child { border-left: 3px solid #2c2c2c; padding-left: 10px; }
  table.res tr:last-child td { border-bottom: none; }

  /* Email capture */
  .email-capture { margin-top: 20px; border-top: 1px solid #e0e0de; padding-top: 18px; }
  .email-capture p { font-size: 15px; color: #555; margin-bottom: 12px; }
  .email-row input[type="email"] {
    width: 100%; max-width: 340px; height: 42px; border: 1px solid #d0d0ce;
    border-radius: 6px; padding: 0 12px; font-size: 15px;
    font-family: 'Open Sans', sans-serif; color: #2c2c2c; background: #fff;
  }
  .email-row input[type="email"]:focus { outline: none; border-color: #2c2c2c; }
  .send-btn-wrap { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
  .send-btn {
    height: 42px; padding: 0 18px; border: 1px solid #d0d0ce; border-radius: 6px;
    background: #fff; font-size: 15px; font-weight: 600;
    font-family: 'Open Sans', sans-serif; color: #2c2c2c; cursor: pointer;
    transition: background 0.12s, border-color 0.12s;
  }
  .send-btn:hover { background: #f2f2f0; border-color: #aaa; }
  .send-msg { font-size: 14px; color: #2a7a2a; margin-top: 8px; display: none; }

  /* FAQs */
  .faq-block { margin-bottom: 48px; }
  .faq-item { border-bottom: 1px solid #e2e2e0; padding: 20px 0; }
  .faq-item:first-of-type { border-top: 1px solid #e2e2e0; }
  .faq-q { font-size: 17px; font-weight: 700; color: #1a1a1a; margin-bottom: 8px; }
  .faq-a { font-size: 16px; color: #555; line-height: 1.65; }

  .footer-note { font-size: 14px; color: #aaa; text-align: center; margin-top: 48px; padding-top: 24px; border-top: 1px solid #eee; }
 See what happens to your results when you improve your campaign metrics and how much extra revenue that improvement could unlock.

Small improvements in the right places can have a surprisingly large impact on campaign performance. A 10% improvement in click-through rate, for example, doesn’t just mean 10% more clicks — it changes your cost per click, your conversion volume, and ultimately your return on ad spend. This tool lets you model those changes using your own data, so you can see which levers are worth pulling and what the financial upside looks like.

Enter your current metrics, set the improvements you think are achievable, and click “Calculate forecast” to see the projected difference side by side.

 

 ## How to use this tool

1

**Choose your currency** from the dropdown at the top of the calculator.

 

2

**Enter your current metrics** from recent campaign data — the last 30–90 days works well.

 

3

**Set your projected improvements** — enter the percentage uplift you think each metric could achieve. Set to 0 to leave it unchanged.

 

4

**Click “Calculate forecast”** to see current vs projected figures side by side, with change percentages highlighted.

 

5

**Send yourself a copy** via email as a PDF or spreadsheet to keep or share with your team.

 

 

 

## Paid media improvement forecast

Note: This paid media improvement forecast tool provides estimates based on the metrics you enter. Actual campaign results will vary.

  Currency  £ GBP $ USD € EUR  

Current metrics

 Total spend£

  

 Your total ad spend over the period you’re using as your baseline (e.g. last 90 days). 

 Cost per 1,000 impressions (CPM)£

  

 How much you currently pay for every 1,000 ad impressions. Found in your platform’s reporting dashboard. 

 Click-through rate (CTR) %

 

 The percentage of people who see your ad and click the link. Higher CTR means lower cost per click. 

 Conversion rate %

 

 The percentage of people who click through and then complete the desired action on your website. 

 Average customer value£

  

 Average revenue per conversion — could be order value, contract value, or customer lifetime value. 

 

---

Projected improvements

Enter the percentage improvement you expect to achieve for each metric. Set to 0 to keep it unchanged. These are relative improvements — so entering 10% for CTR means your CTR will be 10% higher than its current value, not 10 percentage points higher.

 Increase in total spend %

 

 How much more budget you plan to add to the campaign. Set to 0 to keep spend the same. 

 CPM reduction %

 

 If you expect to reduce CPM through better targeting or creative, enter the % reduction here. CPM improvements tend to come from audience refinement or placement changes. 

 CTR improvement %

 

 CTR improvements typically come from stronger creative, better ad copy, or improved audience targeting. 

 Conversion rate improvement %

 

 Conversion rate improvements usually come from landing page optimisation, better offer messaging, or a smoother checkout/sign-up flow. 

 

 Calculate forecastForecast: current vs projected

 

| Metric | Current | Projected | Change |
| --- | --- | --- | --- |

Want to save or share these results? Enter your email address to receive a copy as a PDF or spreadsheet.

  

 Send as PDF Send as spreadsheet 

Results sent — check your inbox.

 

 

 

 

 ## Frequently asked questions

What’s a realistic improvement to expect?

This depends on how mature and well-optimised your campaigns already are. If you’re starting from scratch or have had little active management, improvements of 15–30% in CTR or conversion rate are achievable with focused work. If your campaigns are already well-optimised, more modest improvements of 5–10% are more realistic. A good rule of thumb is to model a conservative scenario (5%), a mid-case scenario (10–15%), and a stretch case (20%+) to understand the range of possible outcomes.

 

Why does a CTR improvement have such a big effect on revenue?

Because CTR feeds into multiple downstream metrics. A higher CTR means more clicks from the same number of impressions, which in turn lowers your cost per click. More clicks at a lower cost means more conversions for the same budget, which drives more revenue. The effect compounds through the funnel — which is why even a modest CTR improvement can have a disproportionately large impact on the bottom line.

 

What’s the difference between CPM and CPC?

CPM (cost per mille, or cost per thousand impressions) is what you pay to show your ad to people. CPC (cost per click) is what you effectively pay each time someone clicks your ad — and it’s a derived figure, calculated as CPM divided by CTR. Most paid social platforms charge on a CPM basis, so reducing your CPM or increasing your CTR both reduce your effective cost per click, even if you’re not changing your bid directly.

 

How do I actually improve my CTR or conversion rate?

CTR is primarily driven by the quality and relevance of your ad creative and copy — sharper headlines, stronger imagery, and clearer calls to action all help. Audience targeting also plays a role; showing your ads to people more likely to be interested will naturally lift CTR. Conversion rate is mostly a landing page and user experience problem — faster page loads, clearer messaging, simplified forms, and social proof (testimonials, logos, case studies) tend to have the biggest impact. A/B testing is the most reliable way to identify what works for your specific audience and offer.

 

Should I focus on increasing spend or improving metrics?

Generally, it’s better to optimise first and scale second. If your current metrics are underperforming — low CTR, high CPM, or a weak conversion rate — simply increasing spend will amplify the inefficiency. Once you’ve optimised your campaign and established a solid baseline, scaling spend becomes a much lower-risk way to grow results. Use this forecast tool to model the difference: compare the projected revenue from a 10% spend increase against the projected revenue from a 10% CTR improvement, and you’ll often find that improving the metric delivers better returns than adding budget.

 

Why are the improvements described as “relative” rather than “absolute”?

Because relative improvements are how campaign optimisation is usually discussed and measured. If your CTR is currently 0.35% and you enter a 10% improvement, the tool projects a new CTR of 0.385% — not 10.35%. This reflects the reality of how ad performance tends to improve: it’s easier to improve a metric by a percentage of its current value than to lift it by a fixed number of percentage points. An absolute improvement would mean something very different depending on where you’re starting from.

 

Can I use this tool alongside the budget planner?

Yes, and we’d encourage it. A good workflow is to start with the budget planner to understand how much spend you need to hit your goals at current performance levels, and then use the improvement forecast to model what happens if you also improve your metrics. You might find, for example, that a 10% CTR improvement reduces the budget needed to hit your revenue target by a meaningful amount — which is a useful data point when presenting options internally or making the case for optimisation work rather than simply more spend.

 

 




  var lastResults = null;

  function updateSymbols() {
    var s = document.getElementById('currency').value;
    ['sym_spend','sym_cpm','sym_ltv'].forEach(function(id){
      var el = document.getElementById(id);
      if (el) el.textContent = s;
    });
  }

  function cur() { return document.getElementById('currency').value; }
  function fmt(n) { return cur() + n.toLocaleString('en-GB', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); }
  function fmtInt(n) { return Math.round(n).toLocaleString('en-GB'); }
  function fmtPct(n) { return n.toFixed(2) + '%'; }

  function calcDelta(a, b) {
    if (a === 0) return { cls: 'delta-none', text: '—' };
    var pct = ((b - a) / Math.abs(a)) * 100;
    if (Math.abs(pct) < 0.01) return { cls: 'delta-none', text: '—' };
    var sign = pct > 0 ? '+' : '';
    return { cls: pct > 0 ? 'delta-pos' : 'delta-neg', text: sign + pct.toFixed(1) + '%' };
  }

  function calculate() {
    var spend = parseFloat(document.getElementById('f_spend').value) || 0;
    var cpm   = parseFloat(document.getElementById('f_cpm').value) || 0;
    var ctr   = parseFloat(document.getElementById('f_ctr').value) || 0;
    var cvr   = parseFloat(document.getElementById('f_cvr').value) || 0;
    var ltv   = parseFloat(document.getElementById('f_ltv').value) || 0;
    var spendImp = parseFloat(document.getElementById('f_spend_imp').value) || 0;
    var cpmImp   = parseFloat(document.getElementById('f_cpm_imp').value) || 0;
    var ctrImp   = parseFloat(document.getElementById('f_ctr_imp').value) || 0;
    var cvrImp   = parseFloat(document.getElementById('f_cvr_imp').value) || 0;

    var nSpend = spend * (1 + spendImp / 100);
    var nCpm   = cpm   * (1 - cpmImp   / 100);
    var nCtr   = ctr   * (1 + ctrImp   / 100);
    var nCvr   = cvr   * (1 + cvrImp   / 100);

    var cImpr  = cpm > 0 ? (spend  / cpm)  * 1000 : 0;
    var nImpr  = nCpm > 0 ? (nSpend / nCpm) * 1000 : 0;
    var cClicks = cImpr * (ctr / 100);
    var nClicks = nImpr * (nCtr / 100);
    var cCpc   = cClicks > 0 ? spend  / cClicks : 0;
    var nCpc   = nClicks > 0 ? nSpend / nClicks : 0;
    var cConvs = cClicks * (cvr / 100);
    var nConvs = nClicks * (nCvr / 100);
    var cRev   = cConvs * ltv;
    var nRev   = nConvs * ltv;
    var cRoas  = spend  > 0 ? cRev / spend  : 0;
    var nRoas  = nSpend > 0 ? nRev / nSpend : 0;

    var rows = [
      { label: 'Total spend',           cur: fmt(spend),           proj: fmt(nSpend),      a: spend,   b: nSpend,   hl: true },
      { label: 'CPM',                   cur: fmt(cpm),             proj: fmt(nCpm),        a: cpm,     b: nCpm },
      { label: 'Impressions',           cur: fmtInt(cImpr),        proj: fmtInt(nImpr),    a: cImpr,   b: nImpr },
      { label: 'Click-through rate',    cur: fmtPct(ctr),          proj: fmtPct(nCtr),     a: ctr,     b: nCtr },
      { label: 'Clicks',                cur: fmtInt(cClicks),      proj: fmtInt(nClicks),  a: cClicks, b: nClicks },
      { label: 'Cost per click (CPC)',  cur: fmt(cCpc),            proj: fmt(nCpc),        a: cCpc,    b: nCpc },
      { label: 'Conversion rate',       cur: fmtPct(cvr),          proj: fmtPct(nCvr),     a: cvr,     b: nCvr },
      { label: 'Conversions',           cur: fmtInt(cConvs),       proj: fmtInt(nConvs),   a: cConvs,  b: nConvs },
      { label: 'Average customer value',cur: fmt(ltv),             proj: fmt(ltv),         a: ltv,     b: ltv },
      { label: 'Revenue',               cur: fmt(cRev),            proj: fmt(nRev),        a: cRev,    b: nRev,     hl: true },
      { label: 'Return on ad spend',    cur: cRoas.toFixed(2)+'x', proj: nRoas.toFixed(2)+'x', a: cRoas, b: nRoas, hl: true }
    ];

    lastResults = {
      currency: cur(), rows: rows,
      spend: spend, cpm: cpm, ctr: ctr, cvr: cvr, ltv: ltv,
      spendImp: spendImp, cpmImp: cpmImp, ctrImp: ctrImp, cvrImp: cvrImp
    };

    var tbody = document.getElementById('results-tbody');
    tbody.innerHTML = '';
    rows.forEach(function(r) {
      var d = calcDelta(r.a, r.b);
      var tr = document.createElement('tr');
      if (r.hl) tr.className = 'highlight';
      tr.innerHTML =
        '<td>' + r.label + '' +
        '<td class="cur">' + r.cur + '' +
        '<td class="right">' + r.proj + '' +
        '<td class="' + d.cls + '">' + d.text + '';
      tbody.appendChild(tr);
    });

    document.getElementById('results').style.display = 'block';
    document.getElementById('send_msg').style.display = 'none';
    document.getElementById('results').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
  }

  /* ---------------------------------------------------------------
   * CONFIGURATION — this points to the WordPress AJAX handler
   * registered by the Empower calculator plugin.
   *
   * If your WordPress site is at https://empower.agency, this URL
   * will be: https://empower.agency/wp-admin/admin-ajax.php
   *
   * You can find the exact URL on the plugin's settings page:
   * WordPress > Settings > Calculator settings
   * --------------------------------------------------------------- */
  var SEND_ENDPOINT = '/wp-admin/admin-ajax.php';

  function sendResults(format) {
    var email = document.getElementById('email_input').value.trim();
    var msgEl = document.getElementById('send_msg');

    if (!email || !email.includes('@')) {
      var inp = document.getElementById('email_input');
      inp.focus(); inp.style.borderColor = '#c0392b';
      setTimeout(function(){ inp.style.borderColor = ''; }, 2000);
      return;
    }
    if (!lastResults) return;

    var btns = document.querySelectorAll('.send-btn');
    btns.forEach(function(b){ b.disabled = true; b.style.opacity = '0.5'; });
    msgEl.style.color = '#888';
    msgEl.textContent = 'Sending\u2026';
    msgEl.style.display = 'block';

    var r = lastResults;
    var meta = {
      'Currency':                r.currency,
      'Baseline spend':          r.currency + parseFloat(r.spend).toFixed(2),
      'CPM':                     r.currency + parseFloat(r.cpm).toFixed(2),
      'Click-through rate':      parseFloat(r.ctr).toFixed(2) + '%',
      'Conversion rate':         parseFloat(r.cvr).toFixed(2) + '%',
      'Avg. customer value':     r.currency + parseFloat(r.ltv).toFixed(2),
      'Spend increase applied':  parseFloat(r.spendImp).toFixed(0) + '%',
      'CPM reduction applied':   parseFloat(r.cpmImp).toFixed(0) + '%',
      'CTR improvement applied': parseFloat(r.ctrImp).toFixed(0) + '%',
      'CVR improvement applied': parseFloat(r.cvrImp).toFixed(0) + '%'
    };

    var exportRows = r.rows.map(function(row) {
      return { label: row.label, current: row.cur, projected: row.proj, highlight: !!row.hl };
    });

    var payload = {
      action:  'empower_calc_send',
      email:   email,
      format:  format,
      tool:    'forecast',
      rows:    exportRows,
      meta:    meta
    };

    fetch(SEND_ENDPOINT, {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: 'action=empower_calc_send&payload=' + encodeURIComponent(JSON.stringify(payload))
    })
    .then(function(res){ return res.json(); })
    .then(function(data){
      if (data.ok) {
        msgEl.style.color = '#2a7a2a';
        msgEl.textContent = 'Results sent — check your inbox.';
      } else {
        msgEl.style.color = '#c0392b';
        msgEl.textContent = 'Something went wrong: ' + (data.message || 'please try again.');
      }
    })
    .catch(function(){
      msgEl.style.color = '#c0392b';
      msgEl.textContent = 'Could not connect to the server. Please try again.';
    })
    .finally(function(){
      btns.forEach(function(b){ b.disabled = false; b.style.opacity = ''; });
    });
  }

## Topics

**Categories:** [Empower Life](https://empower.agency/category/empower-life/)