What is CPM in advertising
CPM is the cost of a thousand impressions: what you pay to have an ad shown a thousand times.
The M is the Roman numeral for a thousand. If a campaign spent £2,000 and was shown 250,000 times, its CPM is £8.00.
It is the price of attention, before anyone clicks. Platforms that sell on reach (TikTok Ads and Meta Ads among them) quote it as the headline price, and auction bidding often happens in CPM terms even when you are paying for clicks or conversions.
How it's calculated
CPM = (ad spend ÷ impressions) × 1,000
The multiplication is there because the per-impression price is tiny and awkward to read. The Google Sheets version with a guard against zero impressions, and a worked example, are on the CPM formula page.
What it tells you, and what it doesn't
CPM tells you how expensive the audience you are reaching is. A rising CPM on a stable campaign means the auction has become more competitive or the platform has decided your ad is less worth showing. It is the right number for comparing the cost of reach across placements or across months.
It tells you nothing about whether the impressions did anything. A cheap CPM on an audience that never buys is money spent efficiently on nothing. CPM needs a downstream figure beside it: CTR to see whether people act on the impression, and CPA or ROAS to see whether the action was worth having.
It is also a platform figure. "Impression" is defined by whoever is counting it, and the definitions differ. A video platform may count an impression when a frame is rendered; a feed may count it when a certain fraction of the ad is on screen for a certain time. Two CPMs from two platforms are priced in different units.
Where it goes wrong
Chasing the lowest CPM. Broad targeting and poor placements are cheap for a reason. Optimising a campaign to minimise CPM usually raises CPA, because the impressions you are buying are the ones nobody else wanted.
Averaging CPMs across ad groups. A group with 1,000 impressions and a group with a million should not count equally. Total spend divided by total impressions, times a thousand, is the account figure. =AVERAGE() on a column of CPMs is not.
Reading impressions as people. One person scrolling past the same ad six times is six impressions. CPM is per thousand showings, not per thousand people reached. Reach and frequency are separate figures where the platform reports them.
Comparing CPM to a benchmark from a different format. Video and display inventory are priced differently, and a figure quoted without its format attached is close to meaningless. The what is a good CPM page covers what moves it.
Related metrics
- CPM formula: the calculation and a worked example.
- What is a good CPM: the factors that move it and how to find your own baseline.
- CTR formula: clicks per impression, the next step down.
- CPC: cost per click. CPC = CPM ÷ (1,000 × CTR), so the three move together.
- CPA: cost per conversion, the figure CPM has to be judged against.
Keeping it current
A scheduled Fresh Sheets report can pull Amount spent and Impressions from Meta Ads into a tab of your spreadsheet, by campaign or ad set. It replaces that tab's contents on every refresh, so keep your formulas on a separate tab. This finds each column by its heading:
=SUM(INDEX('Meta Ads'!A:Z, 0, MATCH("Amount spent", 'Meta Ads'!1:1, 0))) / SUM(INDEX('Meta Ads'!A:Z, 0, MATCH("Impressions", 'Meta Ads'!1:1, 0))) * 1000