What is Cost per result?
Cost per result is spend divided by the count of whatever event the campaign was set to optimise for. The event changes with the objective, which makes the column convenient inside one campaign and meaningless when compared across campaigns with different objectives.
Cost per result = ad spend ÷ results
A worked example
Three campaigns in one account each spend A$5,000 and each report a cost per result. The first was optimised for link clicks and reports A$0.80. The second was optimised for leads and reports A$25. The third was optimised for purchases and reports A$70. The column sorts them from cheapest to dearest and the ranking is meaningless, because the three numbers price a click, an enquiry and a sale.
A column that changes meaning between rows
Cost per result divides spend by the count of whatever the campaign was optimised for. It is the headline figure in several ad platforms' reporting, and its defining property is that the event in the denominator is not fixed.
A traffic campaign's result is a link click. A lead campaign's result is a form submission or a call. A sales campaign's result is a purchase. An app campaign's is an install or a chosen in-app event. An awareness campaign's may be reach or a video view. All of them appear in the same column, under the same header, in the same table.
Inside a single campaign this is unobjectionable and even elegant: the column prices the thing the campaign was told to produce, which is the right thing to price. Across campaigns it is a trap, and the trap is well disguised because the column looks like every other column.
The sorting problem
The most common damage this metric does is caused by sorting.
An account list sorted by cost per result puts traffic campaigns at the top and sales campaigns at the bottom, every time, because a click is cheaper than a purchase by one to two orders of magnitude. Nothing about that ranking says anything about performance. It says that clicks are easier to buy than sales, which was already known.
Where budget decisions are made from a dashboard, this ordering does real harm. The campaigns that look most efficient are the ones optimised for the shallowest event, and moving money toward them buys more of the shallowest event.
The defence is to group before comparing: never rank campaigns with different objectives in the same table on this column, and where a report has to span objectives, rename the column to the event it actually counts.
Deeper results cost more, and that is correct
A closely related misreading concerns changes over time.
Moving a campaign's optimisation event deeper — from clicks to leads, from installs to registrations, from registrations to purchases — raises the reported cost per result immediately and substantially. The event is rarer, so it costs more.
That is almost always an improvement. A bidder optimising toward a shallow event finds the people most likely to produce the shallow event, and those people are not reliably the people who produce revenue. Optimising deeper means paying more per counted result and getting results that predict money.
The constraint is volume. Every step deeper reduces the number of events the model learns from, and below the platform's own threshold delivery becomes erratic. The practical rule is to optimise on the deepest event that clears the volume threshold, revisit it as the account grows, and to expect the reported cost to rise each time — while watching cost per customer, which should fall.
Objective changes break the series
A campaign whose objective is changed mid-flight keeps its history and stops having a series.
The rows above the change price one event; the rows below price another. A chart drawn through them shows a step that looks like a performance change and is a definitional one. This is a common source of confusion when an account is reviewed by somebody who was not present for the change.
Where an objective change is necessary, the cleaner practice is a new campaign rather than an edit, which keeps each series internally consistent and makes the before-and-after comparison explicit rather than implied.
What it is genuinely good for
Read within its limits, the metric does useful work.
Inside one campaign, over time. It is the campaign's own headline: what the thing it was built to do is costing this week against last.
Across creatives or audiences within one campaign. The result is held constant, so differences are real.
As a pacing check. A result cost drifting upward while budget is unchanged is an early signal of fatigue, auction pressure or audience exhaustion, and it usually appears before the outcome metrics move.
As a quick read on whether an objective is achievable. A campaign whose result cost is nowhere near the ceiling the business can afford is not going to be fixed by bidding, and the metric says so early.
Where it should not be the answer
Any decision about allocation between different kinds of campaign needs a common downstream measure — revenue, customers, or contribution — rather than a column whose meaning moves.
Any report leaving the advertising team should name the event. "Cost per result: A$25" tells a finance reader nothing. "Cost per lead: A$25" tells them something they can check against the close rate and the contribution per customer.
And any target set on this metric should be set on the named event as well, for the same reason: a target inherited from a campaign with a different objective is a number with no relationship to the campaign it now governs.
The habit worth building
Rename it. In every report that leaves the platform, replace the generic header with the event being counted, and if a single table has to hold several, put the event name in each row.
It takes a moment and it removes an entire category of expensive misreadings — the sorted dashboard, the objective change that looks like a regression, the budget moved toward the campaign that was only ever buying clicks.
One more reason to name the event
A generic result column also makes a campaign hard to hand over. Somebody inheriting an account sees a cost per result and has no way to know what was counted without opening the campaign's objective and checking, and in an account with dozens of campaigns that check rarely happens.
Naming the event in the report removes the step. It costs one column header and it is the difference between a report that can be read by somebody who did not build the account and one that cannot.
How to move Cost per result
- Never sort an account by this column. It ranks a click against a purchase and puts the click on top every time.
- Rename the result in the report to the event it counts before sharing the figure with anyone outside the account.
- Compare it only within a set of campaigns that share an objective. Across objectives it is not a comparison at all.
- Check the result definition after every objective change. An objective switched mid-flight changes what the column has been counting, and the history above the change stops being a series.
- Push the optimisation event as deep as volume allows, and expect the reported cost to rise. A more expensive result that predicts revenue is better than a cheap one that does not.