Free Online Tool

Calculate eCPM
in Seconds

The fast, accurate eCPM calculator for publishers, app developers, and media buyers. Compute Effective Cost Per Mille, total ad revenue, or total impressions — instantly.

eCPM = ( Revenue ÷ Impressions ) × 1,000
3
Calculation Modes
0
Sign-ups Required
100%
Free Forever

eCPM Calculator

Free Tool
$
Your eCPM
Total Revenue
Total Impressions
Revenue per impression
$
Total Ad Revenue
eCPM Rate
Impressions
Revenue per impression
$
$
Required Impressions
Target Revenue
eCPM Rate
Revenue per 1,000 imps

How to Use the eCPM Calculator

Our tool supports three calculation modes. Enter any two values and instantly get the third.

Choose Your Mode

Select whether you want to calculate your eCPM rate, your total ad revenue, or your required total impressions. Each tab unlocks a different calculation path.

Enter Two Values

Fill in the two known fields. For eCPM calculation: enter your total ad revenue and number of impressions served. All inputs support decimals and large numbers.

Get Instant Results

Click Calculate and see your result with a full breakdown — including revenue-per-impression, totals, and a clear summary panel. Reset anytime to run a new calculation.

eCPM Formula Explained

eCPM is derived from a simple relationship between three variables. Master these formulas to accurately measure and forecast your publishing revenue.

eCPM = Total Revenue ÷ Total Impressions × 1,000

Calculate eCPM

eCPM = (Revenue ÷ Impressions) × 1,000

Use when you know total earnings and total impressions served. Reveals your true monetization efficiency.

Calculate Revenue

Revenue = (eCPM × Impressions) ÷ 1,000

Use to forecast your expected ad earnings based on projected traffic and a known eCPM rate.

Calculate Impressions

Impressions = (Revenue ÷ eCPM) × 1,000

Use to find how much traffic you need to hit a target revenue at a known eCPM rate.

What Is eCPM and Why Does It Matter?

eCPM is the single most important metric for any publisher monetizing with ads. Here's everything you need to know.

eCPM = Your Real Publishing Revenue Rate

eCPM (Effective Cost Per Mille) measures how much revenue a publisher actually earns for every 1,000 ad impressions — regardless of how those ads were sold. Whether your inventory runs on CPM, CPC, CPA, or a mix of all three, eCPM normalizes everything into one comparable number.

Unlike CPM — which is an advertiser-facing rate agreed upon before a campaign runs — eCPM is calculated after the fact, using real revenue and real impressions. This makes it a true performance indicator for publishers, bloggers, app developers, and anyone monetizing digital content.

A rising eCPM means your inventory is becoming more valuable, your audience is more engaged, or your ad mix is improving. A falling eCPM is an early warning sign worth investigating immediately.

Quick example: If your website earned $180 from 300,000 ad impressions last month, your eCPM = ($180 ÷ 300,000) × 1,000 = $0.60.

📊

Publishers & Bloggers

Track how efficiently your content monetizes across display, native, and video ads. Use eCPM to compare networks and optimize your ad stack.

📱

App Developers

Mobile apps use eCPM as the go-to metric to evaluate SDKs, mediation platforms, and rewarded video performance across Android and iOS.

🎬

Video Content Creators

YouTube creators and OTT publishers rely on eCPM to understand season-over-season revenue changes and audience monetization health.

CPM vs eCPM — What's the Difference?

These two metrics look similar but serve completely opposite perspectives. Here's how to tell them apart.

Attribute CPM (Cost Per Mille) eCPM (Effective CPM)
Perspective Advertiser — what they pay Publisher — what they earn
When calculated Before the campaign (agreed rate) After delivery (actual earnings)
Formula (Cost ÷ Impressions) × 1,000 (Revenue ÷ Impressions) × 1,000
Typical value $0.50 – $30+ depending on platform Usually lower than CPM (after fees)
Used to… Plan ad spend & compare media costs Benchmark monetization & optimize ad stacks
Affected by fill rate? No — fixed rate regardless Yes — unsold impressions lower your eCPM
Who cares about it? Media buyers, agencies, brands Publishers, bloggers, app developers, creators

Who Uses the eCPM Calculator?

From indie bloggers to enterprise publishers, eCPM is the universal revenue benchmark for anyone serving ads.

✍️

Content Publishers

Compare AdSense, Mediavine, and Raptive revenue side-by-side using eCPM to find your most profitable ad partner.

📲

Mobile App Developers

Evaluate rewarded video, interstitial, and banner ad formats by their eCPM to maximize in-app monetization.

🎥

YouTube Creators

Track monthly eCPM trends to understand which content categories attract higher-paying advertisers.

🏢

Ad Operations Teams

Monitor eCPM across SSPs and exchanges in your ad server to identify underperforming inventory segments.

🧮

Media Planners

Cross-check guaranteed CPM buys against actual eCPM delivery to verify publisher performance.

📈

Growth Marketers

Project revenue for new content verticals by estimating eCPM benchmarks before launching new sites or apps.

6 Proven Ways to Increase Your eCPM

A higher eCPM means more revenue from the same traffic. Here are the most effective strategies to lift your numbers.

01

Use Header Bidding

Header bidding lets multiple ad exchanges compete simultaneously for each impression, driving up the winning bid and raising your effective CPM significantly compared to waterfall setups.

02

Improve Your Fill Rate

Unsold impressions drag your eCPM down. Work with a wider range of demand partners or use house ads as fallback to ensure every impression is monetized.

03

Prioritize High-Value Ad Formats

Video ads, native ads, and rewarded placements consistently command higher eCPMs than standard display banners. Diversify your format mix to lift overall earnings.

04

Target High-Value Geographies

US, UK, Canada, and Australia-based audiences attract premium advertiser rates. Strategies like SEO targeting English-language search queries can shift your traffic mix toward higher-eCPM regions.

05

Publish in High-CPM Niches

Finance, insurance, technology, and legal content attract advertisers with large budgets. Content in these niches can yield eCPMs 5–10× higher than entertainment or lifestyle verticals.

06

Optimize Ad Placement & Viewability

Ads in high-viewability positions (above the fold, in-content) earn more. A viewability rate above 70% is a key threshold that unlocks premium programmatic demand.

Frequently Asked Questions

Everything you need to know about eCPM and how to use this calculator effectively.

eCPM stands for Effective Cost Per Mille, where "mille" is Latin for one thousand. It tells a publisher how much revenue they actually earn per 1,000 ad impressions served — across all ad types, pricing models, and demand sources. It's the publisher's equivalent of the advertiser's CPM.
No — they measure the same event from opposite sides of the transaction. CPM is the rate an advertiser agrees to pay before a campaign runs. eCPM is what a publisher actually earns after accounting for ad network fees, fill rate, and mixed pricing models. eCPM is almost always lower than the gross CPM rate because platforms take a revenue share.
A good eCPM depends on your niche, platform, and traffic geography. General display ads: $0.50 – $2.50. Premium content sites in finance or legal: $5 – $20+. Mobile apps with rewarded video: $8 – $30+. YouTube mid-roll ads: $2 – $10 on average, with spikes in Q4. The most important thing is tracking your own eCPM trend over time, not just a benchmark number.
eCPM drops are usually caused by: (1) seasonal advertiser budget cuts (especially Q1), (2) declining fill rate from fewer active advertisers, (3) traffic quality issues — bot traffic or non-premium geographies diluting your audience, (4) ad viewability dropping due to layout changes, or (5) increased competition on the same keywords in programmatic auctions. Review each cause systematically and use your ad server reports to isolate the culprit.
Fill rate is the percentage of ad requests that return an actual ad. If your fill rate is 80%, 20% of your impressions earn zero revenue — which lowers your overall eCPM significantly. For example: a $2.00 CPM with 80% fill yields an effective eCPM of only $1.60. Maximizing fill rate through more demand partners and house ads directly lifts your eCPM even without changing your CPM rates.
Yes — and you should! Run the eCPM formula separately for banner, native, video, and rewarded ads using each format's individual revenue and impression data. This reveals which formats are your strongest earners. Many publishers discover that video ads have 3–5× the eCPM of banners, making even a small video placement highly valuable. Use our calculator above for each format to compare them directly.
eCPM is calculated per ad impression — the number of times an ad was served. RPM (Revenue Per Mille) is calculated per page view — the number of times a page was loaded, regardless of how many ads appeared on it. If a page has 3 ad slots, 1,000 page views generate 3,000 impressions. Your RPM will typically be higher than your eCPM by a factor equal to your average ads-per-page count. Google AdSense reports RPM; most ad servers report eCPM.
Absolutely — eCPM has pronounced seasonal patterns. Q4 (October–December) consistently delivers the highest eCPMs of the year, driven by holiday advertiser spending. Q1 (January–February) is typically the weakest as ad budgets reset. Niches like retail, gifts, and travel see the sharpest swings. Plan your content calendar and monetization strategy around these cycles to maximize annual revenue.
/* ============================================================ eCPM Calculator — JavaScript ============================================================ */ document.addEventListener('DOMContentLoaded', () => { /* ── Mobile Nav ── */ const toggle = document.querySelector('.nav-toggle'); const navLinks = document.querySelector('.nav-links'); if (toggle && navLinks) { toggle.addEventListener('click', () => { toggle.classList.toggle('open'); navLinks.classList.toggle('open'); }); navLinks.querySelectorAll('a').forEach(a => { a.addEventListener('click', () => { toggle.classList.remove('open'); navLinks.classList.remove('open'); }); }); } /* ── Calculator Tabs ── */ const tabs = document.querySelectorAll('.calc-tab'); const panels = document.querySelectorAll('.tab-panel'); tabs.forEach(tab => { tab.addEventListener('click', () => { tabs.forEach(t => t.classList.remove('active')); panels.forEach(p => p.classList.remove('active')); tab.classList.add('active'); const target = document.getElementById(tab.dataset.tab); if (target) target.classList.add('active'); hideResult(); }); }); /* ── Utilities ── */ function fmt(n, d = 2) { if (!isFinite(n)) return '—'; return new Intl.NumberFormat('en-US', { minimumFractionDigits: d, maximumFractionDigits: d }).format(n); } function fmtMoney(n) { return !isFinite(n) ? '—' : '$' + fmt(n, 2); } function fmtInt(n) { return !isFinite(n) ? '—' : new Intl.NumberFormat('en-US').format(Math.round(n)); } function showResult(el) { el.classList.add('visible'); el.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } function hideResult() { document.querySelectorAll('.calc-result').forEach(el => el.classList.remove('visible')); } function getNum(id) { const el = document.getElementById(id); if (!el) return NaN; const v = parseFloat(el.value.replace(/,/g, '')); return isNaN(v) || v < 0 ? NaN : v; } function setError(id, msg) { const el = document.getElementById(id); if (el) { el.style.borderColor = '#e05252'; el.title = msg; } } function clearErrors() { document.querySelectorAll('.calc-input').forEach(el => { el.style.borderColor = ''; el.title = ''; }); } /* ── TAB 1: Calculate eCPM ── */ const btnEcpm = document.getElementById('btn-calc-ecpm'); if (btnEcpm) { btnEcpm.addEventListener('click', () => { clearErrors(); const revenue = getNum('ecpm-revenue'); const impressions = getNum('ecpm-impressions'); if (isNaN(revenue)) { setError('ecpm-revenue', 'Enter a valid revenue amount'); return; } if (isNaN(impressions) || impressions === 0) { setError('ecpm-impressions', 'Enter a valid impression count'); return; } const ecpm = (revenue / impressions) * 1000; const resultEl = document.getElementById('result-ecpm'); document.getElementById('result-ecpm-value').textContent = fmtMoney(ecpm); document.getElementById('result-ecpm-revenue').textContent = fmtMoney(revenue); document.getElementById('result-ecpm-imps').textContent = fmtInt(impressions); document.getElementById('result-ecpm-per-imp').textContent = '$' + (revenue / impressions).toFixed(6); showResult(resultEl); }); } /* ── TAB 2: Calculate Revenue ── */ const btnRevenue = document.getElementById('btn-calc-revenue'); if (btnRevenue) { btnRevenue.addEventListener('click', () => { clearErrors(); const ecpm = getNum('rev-ecpm'); const impressions = getNum('rev-impressions'); if (isNaN(ecpm)) { setError('rev-ecpm', 'Enter a valid eCPM rate'); return; } if (isNaN(impressions) || impressions === 0) { setError('rev-impressions', 'Enter valid impressions'); return; } const revenue = (ecpm * impressions) / 1000; const resultEl = document.getElementById('result-revenue'); document.getElementById('result-rev-value').textContent = fmtMoney(revenue); document.getElementById('result-rev-ecpm').textContent = fmtMoney(ecpm); document.getElementById('result-rev-imps').textContent = fmtInt(impressions); document.getElementById('result-rev-per-imp').textContent = '$' + (revenue / impressions).toFixed(6); showResult(resultEl); }); } /* ── TAB 3: Calculate Impressions ── */ const btnImps = document.getElementById('btn-calc-imps'); if (btnImps) { btnImps.addEventListener('click', () => { clearErrors(); const revenue = getNum('imps-revenue'); const ecpm = getNum('imps-ecpm'); if (isNaN(revenue)) { setError('imps-revenue', 'Enter a valid revenue target'); return; } if (isNaN(ecpm) || ecpm === 0) { setError('imps-ecpm', 'Enter a valid eCPM rate'); return; } const impressions = (revenue / ecpm) * 1000; const resultEl = document.getElementById('result-imps'); document.getElementById('result-imps-value').textContent = fmtInt(impressions); document.getElementById('result-imps-revenue').textContent = fmtMoney(revenue); document.getElementById('result-imps-ecpm').textContent = fmtMoney(ecpm); document.getElementById('result-imps-per-k').textContent = fmtMoney(ecpm); showResult(resultEl); }); } /* ── Reset buttons ── */ document.querySelectorAll('.calc-reset').forEach(btn => { btn.addEventListener('click', () => { const panel = btn.closest('.tab-panel'); if (panel) panel.querySelectorAll('.calc-input').forEach(i => i.value = ''); clearErrors(); hideResult(); }); }); /* ── Enter key support ── */ document.querySelectorAll('.calc-input').forEach(input => { input.addEventListener('keydown', e => { if (e.key === 'Enter') { const panel = input.closest('.tab-panel'); if (panel) { const btn = panel.querySelector('.calc-btn:not(.calc-reset)'); if (btn) btn.click(); } } }); }); /* ── FAQ Accordion ── */ const faqItems = document.querySelectorAll('.faq-item'); faqItems.forEach(item => { const question = item.querySelector('.faq-question'); if (!question) return; question.addEventListener('click', () => { const isOpen = item.classList.contains('open'); faqItems.forEach(i => i.classList.remove('open')); if (!isOpen) item.classList.add('open'); }); }); /* ── Smooth scroll ── */ document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', e => { const target = document.querySelector(anchor.getAttribute('href')); if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); });