---
title: "CPM, eCPM and RPM explained"
description: "What CPM, eCPM and RPM each measure, how Epom calculates them, and which report column each maps to."
type: "concept"
audience: [network-manager, publisher, advertiser]
keywords: [CPM, eCPM, RPM, revenue metrics, effective CPM, revenue per mille, net eCPM, gross eCPM, blended eCPM, fill rate, per thousand impressions]
---

Fetch the complete documentation index at: https://epom.com/ad-server/docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# CPM, eCPM and RPM explained

Three acronyms cover almost every revenue conversation in ad tech: **CPM**, **eCPM** and
**RPM**. They sound interchangeable but they answer different questions, and Epom's reports
already contain all three — sometimes under names you might not recognise. This page defines
each one, gives Epom's exact formula, and points at the report column that carries it, so you
can stop guessing which number to read.

## The one thing they share: "per mille"

The **M** in all three is the Roman numeral for a thousand ("per mille"), *not* "million".
Every metric here is money **per 1000 impressions**. Ad revenue is quoted per thousand because
a single impression is worth a fraction of a cent — per-thousand keeps the numbers readable.

## CPM — the price you agree

**CPM (cost per mille)** is a *price you set*, not a measurement. It is one of Epom's
[pricing types](https://epom.com/ad-server/docs/guides/delivery/pricing.md): the campaign pays (or the publisher earns) a
fixed amount for every 1000 impressions served. You type it into the Pricing card; the ad
server never calculates it.

CPM is a contract term. Its siblings — **CPC** (per click) and **CPA** (per conversion) — are
prices too, just billed on a different event. None of them are report metrics.

## eCPM — the price everything effectively earned

**eCPM (effective CPM)** *is* a measurement. It takes whatever actually happened — CPM demand,
CPC demand that got clicked, CPA demand that converted, a mix of all three — and expresses the
resulting money as a single per-1000-impressions figure. That makes a CPC campaign and a CPM
campaign directly comparable: normalise both to eCPM and you can rank them.

Epom's formula is the same on every report, with one difference in the denominator:

```
eCPM = money × 1000 ÷ impressions            (General report)
eCPM = money × 1000 ÷ eligible impressions   (Advanced report)
```

On General the denominator is the **Impressions** column; on Advanced it is *eligible* impressions
— deliveries minus matched passbacks minus rejected (invalid) impressions. Where nothing was
rejected the two agree.

Because "money" has two sides in Epom, there is more than one eCPM column — this is the single
biggest source of confusion, so it gets its own section below.

Epom also uses eCPM *inside* ad selection: in **eCPM optimization** mode the campaign with the
highest known or estimated eCPM for the request's country is preferred within its priority tier
([how ad selection works](https://epom.com/ad-server/docs/concepts/how-ad-selection-works.md)).

## RPM — the same idea, publisher wording

**RPM (revenue per mille)** is what publishers call eCPM when they mean *their own* revenue per
1000 impressions. It is not a separate calculation and Epom has no column literally named "RPM".

> **Note:** In Epom, a publisher's RPM is the **eCPM Net** column (or the **eCPM** column in the
> Publisher analytics family). If a partner asks for your "RPM", read them your Net eCPM.

## The three eCPM columns, decoded

Epom money has a publisher side and an advertiser side, so the report offers up to three eCPM
columns. They differ only in which money goes into the numerator:

| Column | Numerator | Formula | Whose view |
|---|---|---|---|
| **eCPM Net** | Net (publisher payout) | Net × 1000 ÷ impressions | Publisher — this is "RPM" |
| **eCPM Gross** | Gross (advertiser charge) | Gross × 1000 ÷ impressions | Advertiser — cost per 1000 |
| **eCPM Profit** | Profit (Gross − Net) | eCPM Gross − eCPM Net | Network margin per 1000 |

("Impressions" here is the denominator of the report type — eligible impressions on Advanced.)

The three-family split (Basic / Publisher / Advertiser) that renders the money columns is
described in the [metrics reference](https://epom.com/ad-server/docs/reference/metrics.md#column-families-general-report):
the **Publisher** family labels Net as **Revenue** and its eCPM is **eCPM Net**; the
**Advertiser** family labels Gross as **Charges** and its eCPM is **eCPM Gross**.

> **Note:** on the Advanced report "eligible impressions" — deliveries minus matched passbacks
> minus rejected (invalid) impressions — is the denominator, not raw deliveries, so eCPM is computed
> against the impressions that actually count. That is also why eCPM there can move without any
> pricing change if your invalid-traffic rate shifts, and why the same traffic can show a
> different eCPM on General. See
> [Invalid traffic and risk scoring](https://epom.com/ad-server/docs/concepts/invalid-traffic-and-risk-scoring.md) and
> [how Epom computes your numbers](https://epom.com/ad-server/docs/concepts/analytics-pipelines-explained.md).

## The blended-eCPM gotcha

The summary (roll-up) row at the bottom of a report is **not** the average of the per-row eCPMs.
Epom recomputes every ratio — eCPM included — from the *summed* numerators and denominators of
the whole period:

```
blended eCPM = (sum of Net across all rows) × 1000 ÷ (sum of impressions across all rows)
                (eligible impressions on the Advanced report)
```

This is a true impression-weighted blend, so a high-eCPM row that served ten impressions barely
moves the total, while a low-eCPM row that served ten million dominates it.

> **Corner case:** because the summary is a re-blend and not a column average, it will not equal
> the arithmetic mean of the eCPM cells above it — often not even close. A row list averaging
> $2.00 can roll up to a $0.40 blended eCPM if the cheap rows carry the volume. Read the roll-up
> as "what the whole period effectively earned per 1000", never as "the typical row".

## Why eCPM and CPM disagree

If you set a $1.00 CPM but the eCPM column reads $0.60, nothing is broken. Common causes:

- **CPC / CPA demand in the mix.** Those campaigns earn per click or per conversion, so their
  contribution to eCPM depends on CTR / conversion rate, not on a CPM you can point at.
- **First vs second price on DSP demand.** An auction win is paid at the cleared price, not the
  winning bid — see [first vs second price](https://epom.com/ad-server/docs/concepts/auction-first-vs-second-price.md).
- **Rejected impressions (Advanced report).** They are excluded from *eligible* impressions,
  which shrinks the denominator and raises eCPM for the same money.
- **Blended rows.** A group-by row mixes several campaigns/countries at different prices; its
  eCPM is their impression-weighted blend, not any one CPM.
- **Fill.** eCPM is per *impression*, so unfilled requests don't dilute it — but if you were
  expecting revenue ÷ *requests*, that is a different (lower) number. Requests and
  [Fill Rate](https://epom.com/ad-server/docs/reference/metrics.md#ratio-formulas) live in their own columns.

## Quick reference

| You want to know… | Read this column | It is |
|---|---|---|
| The price on a campaign/placement | Pricing card, not a report | CPM / CPC / CPA you set |
| A publisher's revenue per 1000 impressions ("RPM") | **eCPM Net** (Publisher: **eCPM**) | measured |
| An advertiser's cost per 1000 impressions | **eCPM Gross** (Advertiser: **eCPM**) | measured |
| The network's margin per 1000 impressions | **eCPM Profit** | measured |
| The whole period's effective rate | the **summary row** eCPM | re-blended from sums |

## Related

- [Configure pricing](https://epom.com/ad-server/docs/guides/delivery/pricing.md)
- [Analytics metrics reference](https://epom.com/ad-server/docs/reference/metrics.md)
- [Report types](https://epom.com/ad-server/docs/guides/analytics/report-types.md)
- [How ad selection works](https://epom.com/ad-server/docs/concepts/how-ad-selection-works.md)
- [Invalid traffic and risk scoring](https://epom.com/ad-server/docs/concepts/invalid-traffic-and-risk-scoring.md)
- [Glossary](https://epom.com/ad-server/docs/reference/glossary.md)