---
title: Paid media budget planner
date: 2026-04-13T12:07:59Z
modified: 2026-04-13T13:51:55Z
permalink: "https://empower.agency/paid-media-budget-planner/"
type: post
status: publish
excerpt: Work out exactly how much paid media budget you need to hit your targets, based on your own performance data.
wpid: 5383
categories:
  - Digital Strategy
  - Empower Life
tags:
  - Budgets
  - Facebook Ads
  - Paid Media
  - Tool
featured_image: /wp-content/uploads/2026/04/Paid-media-budget-planner.jpg
featured_image_alt: Paid media budget planner
author: Ben Matthews
---

Paid media budget planner
  *, *::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; }

  /* Typography */
  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; }
  h3 { font-size: 18px; font-weight: 700; color: #1a1a1a; margin-bottom: 4px; }
  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 use */
  .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 */
  .tool-card { background: #fff; border: 1px solid #e2e2e0; border-radius: 10px; padding: 28px; margin-bottom: 36px; }

  /* Currency selector */
  .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; }

  /* Fields */
  .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:first-child { border-radius: 6px 0 0 6px; }
  .input-wrap:not(:has(.input-pre)) input:first-child { border-radius: 6px 0 0 6px; }
  .input-wrap input:focus { outline: none; border-color: #2c2c2c; z-index: 1; position: relative; }

  /* Goal type toggle */
  .goal-toggle { display: flex; gap: 0; border: 1px solid #d0d0ce; border-radius: 8px; overflow: hidden; width: fit-content; margin-bottom: 20px; }
  .goal-btn { padding: 9px 20px; font-size: 15px; font-weight: 600; font-family: 'Open Sans', sans-serif; background: #fff; border: none; cursor: pointer; color: #666; transition: background 0.12s, color 0.12s; }
  .goal-btn.active { background: #2c2c2c; color: #fff; }

  /* Calculate button */
  .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; }

  /* 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:last-child { text-align: right; }
  table.res td { padding: 9px 0; border-bottom: 1px solid #f0f0ee; color: #2c2c2c; vertical-align: middle; }
  table.res td:last-child { text-align: right; font-weight: 600; }
  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; border-radius: 2px; }
  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 { display: flex; gap: 8px; flex-wrap: wrap; }
  .email-row input[type="email"] {
    flex: 1; min-width: 200px; 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; }
  .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; }

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

  /* 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 */
  .footer-note { font-size: 14px; color: #aaa; text-align: center; margin-top: 48px; padding-top: 24px; border-top: 1px solid #eee; }
 Work out exactly how much paid media budget you need to hit your targets, based on your own performance data.

Whether you’re planning a new campaign or making the case for more budget internally, this tool helps you turn real metrics into a clear spending recommendation.

Enter your current benchmarks, things like how much it costs to reach 1,000 people, how many people click your ads, and how many of those go on to convert, and tell us what you want to achieve. We’ll calculate the budget you need to get there.

The figures are as accurate as the data you put in, so try to use real numbers from your recent campaigns where you can. If you don’t have everything to hand, sensible industry averages work as a starting point.

 

 ## How to use this tool

1

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

 

2

**Enter your benchmark metrics** from a recent campaign, ideally the last 30–90 days.

 

3

**Set your goal**, either a revenue figure you want to hit, or a number of conversions you need.

 

4

**Click “Calculate budget”** to see the recommended spend and all supporting metrics.

 

5

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

 

 

 

## Paid media budget planner

 Note: This paid media budget planner provides estimates based on the metrics you enter. Actual campaign results will vary.

  Currency  £ GBP $ USD € EUR  

Your benchmark metrics

 Cost per 1,000 impressions (CPM)£

  

 How much you pay for every 1,000 times your ad is shown. You’ll find this in your ad platform’s reporting dashboard. 

 Click-through rate (CTR) %

 

 The percentage of people who see your ad and click the link. A typical figure for social ads is 0.3–1%. Higher is better. 

 Conversion rate %

 

 The percentage of people who click your ad and then complete the desired action (such as signing up, enquiring, or purchasing). Industry averages range from 2–5%. 

 Average customer value£

  

 The average revenue generated per conversion. This could be the average order value, average contract size, or the lifetime value of a new customer. 

 

---

Your goal

What are you trying to achieve? Choose whether you’re working towards a revenue target or a specific number of conversions.

 Revenue target Conversion target 

 Revenue target£

  

 The total revenue you want your paid media campaign to generate. 

 Conversion target  

 The total number of completed conversions (sign-ups, purchases, enquiries, etc.) you want the campaign to deliver. 

 

 Calculate budgetBudget required to hit your goal

 

| Metric | Value |
| --- | --- |

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

Where do I find my CPM, CTR, and conversion rate?

All three metrics are available in your paid media platform’s reporting section. In Meta Ads Manager, look under the “Performance” columns. In Google Ads, you’ll find them in the “Campaigns” or “Ad groups” view. CPM is sometimes labelled “cost per mille” or “cost per thousand impressions”. If you don’t have campaign data yet, use [industry benchmarks](https://empower.agency/insights/social-media/digital-fundraising-stats-and-benchmarks-for-charities-and-nonprofits/) as a starting point, but expect to refine your estimates once your campaign has run for a few weeks.

 

What if I don’t know my conversion rate yet?

If you’re starting a new campaign or entering a new channel, you won’t have your own data to draw on. A reasonable starting benchmark for most paid social campaigns is 2–4%, and for paid search 3–6% — though this varies significantly by sector and offer. We recommend running a small test budget first to establish a baseline, then revisiting this calculator with real figures before committing to a larger spend.

 

What does “average customer value” mean?

This is the average revenue you receive per conversion. If you’re running an e-commerce campaign, it’s typically your average order value. If you’re generating leads, it might be the average contract value of a new customer, or an estimated lifetime value. Getting this figure right is important: if you underestimate it, the budget recommendation will be too conservative; if you overestimate it, you may overspend relative to the return you actually see.

 

How accurate are these estimates?

The output is only as accurate as the inputs. If you use real data from recent campaigns, the budget estimate will be a solid working figure. If you’re using industry averages or rough estimates, treat the output as a directional guide rather than a precise number. Campaign performance can also vary with audience size, creative quality, seasonality, and competition, so it’s always worth building in a 10–20% contingency on top of the recommended budget.

 

Should I use figures from one channel or across all channels?

This calculator works best when applied to a single channel at a time (for example, just Meta or just Google) since CPM, CTR, and conversion rates vary significantly between platforms. If you’re running a multi-channel campaign, we’d recommend running the calculation separately for each channel and adding the budgets together. This gives you a more accurate per-channel breakdown and helps you allocate spend more effectively.

 

What is ROAS and what’s a good number?

ROAS stands for “return on ad spend”. A ROAS of 3.0 means you generate £3 (or your chosen currency) in revenue for every £1 you spend on ads. What counts as “good” depends on your margins and business model. For most e-commerce businesses, a ROAS of 3–5x is considered healthy. For subscription models or high-margin products, a lower ROAS can still be profitable. For not-for-profits or lead generation campaigns, ROAS is less relevant: the cost per conversion is often the more meaningful metric.

 

Can I use this tool for any advertising platform?

Yes, the underlying maths is the same regardless of whether you’re advertising on Meta, Google, LinkedIn, TikTok, X (Twitter), or any other platform. Just make sure the benchmark metrics you enter are from the relevant platform. Different platforms have different typical CPMs and CTRs, so avoid mixing data from multiple platforms in a single calculation.

 

Can you help us achieve these paid media results?

Yes, [contact us using this form](/contact) or email us at <hello@empower.agency> to see how we can help you with your paid media campaigns.

 

 




  var goalType = 'revenue';
  var lastResults = null;

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

  function setGoalType(type, btn) {
    goalType = type;
    document.querySelectorAll('.goal-btn').forEach(function(b){ b.classList.remove('active'); });
    btn.classList.add('active');
    document.getElementById('field_revenue').style.display = type === 'revenue' ? '' : 'none';
    document.getElementById('field_conv').style.display = type === 'conversions' ? '' : 'none';
  }

  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 calculate() {
    var cpm = parseFloat(document.getElementById('g_cpm').value) || 0;
    var ctr = parseFloat(document.getElementById('g_ctr').value) || 0;
    var cvr = parseFloat(document.getElementById('g_cvr').value) || 0;
    var ltv = parseFloat(document.getElementById('g_ltv').value) || 0;

    var convTarget, revTarget, budgetNeeded, impressions, clicks, cpc, roas;

    if (goalType === 'revenue') {
      revTarget = parseFloat(document.getElementById('g_rev').value) || 0;
      convTarget = ltv > 0 ? revTarget / ltv : 0;
    } else {
      convTarget = parseFloat(document.getElementById('g_conv').value) || 0;
      revTarget = convTarget * ltv;
    }

    var clicksNeeded = cvr > 0 ? convTarget / (cvr / 100) : 0;
    var imprsNeeded = ctr > 0 ? clicksNeeded / (ctr / 100) : 0;
    budgetNeeded = cpm > 0 ? (imprsNeeded / 1000) * cpm : 0;
    impressions = imprsNeeded;
    clicks = clicksNeeded;
    cpc = clicks > 0 ? budgetNeeded / clicks : 0;
    roas = budgetNeeded > 0 ? revTarget / budgetNeeded : 0;

    lastResults = {
      currency: cur(),
      cpm: cpm, ctr: ctr, cvr: cvr, ltv: ltv,
      goalType: goalType,
      revTarget: revTarget, convTarget: convTarget,
      budgetNeeded: budgetNeeded, impressions: impressions,
      clicks: clicks, cpc: cpc, roas: roas
    };

    var rows = [
      { label: 'Budget required', value: fmt(budgetNeeded), highlight: true },
      { label: 'Impressions needed', value: fmtInt(impressions) },
      { label: 'Clicks needed', value: fmtInt(clicks) },
      { label: 'Cost per click (CPC)', value: fmt(cpc) },
      { label: 'Conversions target', value: fmtInt(convTarget) },
      { label: 'Implied revenue', value: fmt(revTarget) },
      { label: 'Return on ad spend (ROAS)', value: roas.toFixed(2) + 'x' }
    ];

    var tbody = document.getElementById('results-tbody');
    tbody.innerHTML = '';
    rows.forEach(function(r) {
      var tr = document.createElement('tr');
      if (r.highlight) tr.className = 'highlight';
      tr.innerHTML = '<td>' + r.label + '<td>' + r.value + '';
      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 = 'https://empower.agency/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 meta = {
      'Currency':           lastResults.currency,
      'CPM':                lastResults.currency + parseFloat(lastResults.cpm).toFixed(2),
      'Click-through rate': parseFloat(lastResults.ctr).toFixed(2) + '%',
      'Conversion rate':    parseFloat(lastResults.cvr).toFixed(2) + '%',
      'Avg. customer value':lastResults.currency + parseFloat(lastResults.ltv).toFixed(2),
      'Goal type':          lastResults.goalType === 'revenue' ? 'Revenue target' : 'Conversion target'
    };

    var rows = [
      { label: 'Budget required',          value: lastResults.currency + parseFloat(lastResults.budgetNeeded).toFixed(2), highlight: true },
      { label: 'Impressions needed',        value: Math.round(lastResults.impressions).toLocaleString('en-GB') },
      { label: 'Clicks needed',             value: Math.round(lastResults.clicks).toLocaleString('en-GB') },
      { label: 'Cost per click (CPC)',       value: lastResults.currency + parseFloat(lastResults.cpc).toFixed(2) },
      { label: 'Conversions target',        value: Math.round(lastResults.convTarget).toLocaleString('en-GB') },
      { label: 'Implied revenue',           value: lastResults.currency + parseFloat(lastResults.revTarget).toFixed(2) },
      { label: 'Return on ad spend (ROAS)', value: parseFloat(lastResults.roas).toFixed(2) + 'x' }
    ];

    var payload = {
      action: 'empower_calc_send',
      email:  email,
      format: format,
      tool:   'planner',
      rows:   rows,
      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:** [Digital Strategy](https://empower.agency/category/digital-strategy/), [Empower Life](https://empower.agency/category/empower-life/)

**Tags:** [Budgets](https://empower.agency/tag/budgets/), [Facebook Ads](https://empower.agency/tag/facebook-ads/), [Paid Media](https://empower.agency/tag/paid-media/), [Tool](https://empower.agency/tag/tool/)