MASK

Free — no sign-up

Ad Metrics Calculator

Work out CTR, CPC, CPM, CPA, ROAS and ROI from the numbers you already have.

Runs entirely in your browser. Nothing you enter is sent to MASK.

How many times the ad was served.

How many of those became clicks.

What you paid. Read as ad spend by CPC, CPM, CPA and ROAS, and used as the ROI denominator exactly as typed.

Sales, sign-ups or whatever you count. Fractions are fine.

The value those conversions returned, in the same currency as cost.

Results

CTRClick-through rate

clicks ÷ impressions × 100

Needs clicks and impressions.

CPCCost per click

cost ÷ clicks

Needs cost and clicks.

This is the average CPC you actually paid, not a maximum CPC bid.

CPMCost per 1,000 impressions

cost ÷ impressions × 1,000

Needs cost and impressions.

CPACost per acquisition

cost ÷ conversions

Needs cost and conversions.

ROASReturn on ad spend

conversion value ÷ ad spend

Needs revenue and cost.

Meta reports ROAS as a multiple; Google Ads states it as a percentage. Same number, two dialects.

ROIReturn on investment

(revenue − cost) ÷ cost × 100

Needs revenue and cost.

Divided by the cost you entered. Google's own example divides by cost of goods sold; marketers often divide by ad spend. The two answers differ.

Six numbers, six formulas, no black box. Each result below shows the formula it used and the figures it put into that formula, so you can check any of them by hand.

On ROAS. Meta reports return on ad spend as a multiple — 5x. Google Ads states the same idea as a percentage, dividing $5 of value by $1 of spend to describe a 500% target ROAS. Neither is wrong, so both forms are printed side by side.

On ROI. This page computes ROI as (revenue − cost) ÷ cost × 100, and divides by whatever you put in the cost box. That convention matters: Google’s own worked example uses the cost of goods sold as the denominator, while much marketing writing uses ad spend alone. The same sale can therefore return two very different ROI figures depending on which cost is meant, which is why the box is labelled cost rather than being quietly assumed to be your ad spend.

There are no “good” or “bad” thresholds anywhere on this page. A CTR that is excellent in one auction is poor in another, and we have no sourced basis for telling you which is which.

Questions

Is CTR a percentage or a decimal?
A percentage. Google Ads gives the worked example directly: 5 clicks and 100 impressions is a CTR of 5%. This calculator multiplies by 100 for you, so 0.05 is never the answer you get here.
Why is ROAS shown twice, as 4.0x and 400%?
Because the two big platforms disagree on the unit. Meta reports return on ad spend as a plain multiple, and Google Ads states it as a percentage — Google's own example divides $5 by $1 and calls it a 500% target ROAS. It is one number in two dialects, so this tool prints both rather than picking a side and looking wrong to half its users.
Which cost does the ROI figure divide by?
The cost box on this page, and nothing else. There is no single agreed denominator: Google's worked ROI example uses the cost of goods sold, while a lot of marketing writing divides by ad spend alone. Those give materially different answers from the same sale, so decide which cost you mean before you type it, and read the result as ROI against that cost.
Is ROI just ROAS minus one?
Only in the narrow case where the cost is nothing but ad spend and the revenue is gross. As soon as the cost of goods sold, shipping or fees enter the cost figure, the two stop tracking each other, so this tool computes them separately from what you typed instead of deriving one from the other.
Why does a metric show a dash?
Because it cannot be computed honestly. Either a number it needs is missing, or the number it would divide by is zero. Dividing by zero impressions does not produce a very big CTR, it produces no CTR at all, so you get a dash and a sentence saying which box to fill rather than a made-up figure.
Does anything I type here leave my browser?
No. The calculator is a few lines of arithmetic running on the page. Nothing is sent to MASK, nothing is stored, and closing the tab discards it.