Ad metrics that fraud distorts, and how to clean them
Contents
Share
Fraud distorts metrics not by replacing their definitions, but by landing in a numerator or a denominator that has no separate “spam” term. In the Direct glossary, CTR is clicks divided by impressions, in percent. In Metrica, conversion is the share of goal visits. ROI is built from revenue or goal value and from spend. Robots detected from behaviour stay in statistics by default and can raise bounces and lower depth.

How to calculate budget loss is the neighbouring calculation. Here the job is to read each metric so you do not subtract something the formula does not contain, and to know what to do by hand before the next report.
CTR: clicks over impressions, with no “normal” number
The glossary ties CTR to ad effectiveness. That is the glossary’s wording, not a threshold. This definition has no ready “normal CTR”, so there is nothing to clean CTR “back to normal” against: the glossary does not state a normal number.
What CTR is is about reading the percentage. The boundary here is enough: a higher CTR is more clicks on the same impressions, or the same clicks on fewer impressions. The percentage itself does not say whether the clicks were invalid. That needs another report, not the CTR formula.
Conversion counts the visit, not every press
The Metrica glossary defines conversion as the share of goal visits in all visits. A goal is an action the owner needs: a page view, a button press and the like. A goal visitor is someone who met the goal condition.
The goals help repeats it: conversion is the ratio of goal visits to all visits. Visitor conversion is the share of people who reached the goal among unique visitors. In one goal visit the same goal can complete more than once. Achievements per visitor are the average number of achievements per unique goal visitor.
Conversion is not the number of leads. A repeated form submit in the same visit raises achievements and does not raise the number of goal visits. If fraud or spam hits repeated submits, the achievement counter inflates first. Visit conversion may barely move. You cannot clean “conversion” and “achievements” with one edit.
Goal revenue is set in the interface as static revenue or passed as price or order_price. Until revenue is set, the next metric — ROI by goal — has nothing to be calculated from.
CPA and ROI with no “spam” term
How to calculate CPA gives the everyday sense of CPA. The formulas on the expenses report divide spend by goal visits, goal visitors, goal achievements or purchases. ROI by revenue = (total revenue − spend) / spend × 100. ROI by goal = (goal value − spend) / spend × 100. Those fractions have no separate term for “spam”, “an untargeted lead” or “an invalid click”.
On the Direct glossary, the Metrica goals help, the performance-statistics guide and the expenses report, the abbreviation CPL is not defined: the price of an action is called CPA. There is no separate “lead price” under another name where you could subtract spam. If you subtract spam yourself, that is your example on top of the formula, and it has to be labelled.
The report opens at End-to-end analytics → Sources, expenses and ROI. ROI by goal needs a goal of the type “goal event” and revenue on the goal. The higher the ROI, the more profitable the help text considers the advertising. Zero means no additional revenue: only the costs came back. A negative value means more was put into advertising than came back. Spend of campaigns that pay for impressions is not shown in Metrica reports.
This is not the Direct glossary formula: that one has no × 100. This report does not use the word ROMI. The report does not measure by what percent fraud lowers ROI. You cannot clean ROI “by a typical fraud percent”: the formula has no such percent. You can substitute spend and revenue you are ready to defend, and label the calculation as an example.
Robots in bounces and depth
By default, statistics include visits of robots detected from behaviour. The help text gives the example directly: robots can lower view depth and raise bounces. You can compare a slice without robots and with robots in the setting “Data: without robots”, with the action “Compare with data that includes robots”. A segment can remove robots from one report.
Robotness in Metrica is about what to trust in that mark. The practical step here: before you explain bounces by click fraud, write down the pair “with robots / without robots”. The comparison does not hand you a ready share that robots “usually” add to bounces. Use your pair.
An irreversible behaviour filter is not part of this step. A segment and a comparison are what the help text gives for one report.
A long trace without the word LTV
The reports open at Reports → Retention. The help text suggests judging the quality of ad traffic: compare sources and campaigns by who returns more often, makes more visits and brings more revenue. It describes long-term value as the number of visits, views, conversions or revenue of a group over time.
A campaign with a good near-term conversion can bring people who never return. A campaign with a lower first conversion can bring a more active audience later. These reports do not use the word LTV. They do not contain a “revenue per person over a lifetime” formula or an adjustment for invalid clicks. There is nothing in Retention with which to subtract invalid clicks: the report does not contain that adjustment. Compare sources by returns, visits and revenue, as written.
Four attribution models from 20 May 2026
From 20 May 2026, Metrica and Direct turned off “First transition”, “Last significant transition”, “Last transition from Direct” and “Last transition from Direct, cross-device”. The help text promises to move saved reports onto current models itself. The date is the help text’s wording, checked on 25 October 2026.
What remains for a report is first transition cross-device, last transition, last significant transition cross-device, and automatic attribution. The attribution window is visits with no break longer than 90 days. After such a break the history ends and starts again. The user does not change the window. Cross-device for the first and the last significant model follows device history through Krypta.
Impression attribution is placed, in this help text, in Metrica for media advertising and is not one of the four models. If an old “last transition from Direct” report suddenly reads differently, check the model before you check fraud: the switch-off is dated 20 May 2026, and saved reports are moved on their own.
Cleaning, in order
Leave CTR as clicks over impressions. Do not fit it to a “norm”: the glossary has no norm number.
Count conversion as the share of goal visits. Keep achievements and leads in a separate column: a repeat in the same visit raises them, and does not raise visit conversion.
Count CPA by dividing spend by goal visits, goal visitors, achievements or purchases. Spam is not written into the fraction. Label your own subtraction as an example.
Take ROI from “Sources, expenses and ROI”: by revenue or by goal value, with a × 100. Read zero and minus as the help text does. Do not look for pay-per-impression spend in this expense figure.
Compare bounces and depth in both robot modes. A segment removes the layer from one report.
Read long-term value in Retention: returns, visits, revenue. Do not rename the report LTV and do not subtract invalid clicks from it.
Check the attribution model. After 20 May 2026 four models remain, and the 90-day window is not configurable.
Put in one table which column comes from the formula and which is your note. Otherwise the next report will mix the example and the help text again.
An example on round numbers
A teaching example, not your account.
Spend is 100,000 ₽, total revenue is 180,000 ₽. ROI by revenue = (180,000 − 100,000) / 100,000 × 100 = 80. Zero would mean “only the costs came back”. A minus would mean more was invested than came back.
Goal visits are 50, achievements are 70, because some visits hit the goal twice. CPA by visits = 100,000 / 50 = 2,000 ₽. CPA by achievements = 100,000 / 70, and that is already another price. Conversion, if there are 1,000 visits in all, = 50 / 1,000 = 5%. It is not 70 / 1,000.
Spam is not substituted into these fractions. If you are ready to defend only 40 of the 50 goal visits, the example CPA becomes 100,000 / 40 = 2,500 ₽. Label it: “example, spam removed by hand, the report formula has no such term”. ROI does not “fall by a typical percent” along the way: the report does not measure that percent. You can recalculate it only by substituting other revenue or other spend and labelling the example again.
Bounces in the same example are read twice: with behaviour-based robots and without. The gap is your measurement, not a norm. Retention for the same sources is compared by returns, not by the word LTV.
The same spend can be read through zero. If revenue equals 100,000 ₽, ROI = 0: there is no additional revenue, only the costs came back. If revenue is 70,000 ₽, ROI = (70,000 − 100,000) / 100,000 × 100 = −30. A minus means more was put into advertising than came back. You cannot add “another minus 15% for fraud” here: the report does not measure that add-on. −30 is already the formula’s full answer to these two numbers.
Attribution in the example is not fixed by changing the window. History breaks if the gap between visits is longer than 90 days, and then it starts again. The user does not change the window. If a July order is credited to a January click across a four-month hole, check the 90-day break and which of the four remaining models is on, before you check a robot share. Cross-device on the first and on the last significant model goes through Krypta by device history. Last transition in this set of four is not described as cross-device: in the remaining list it has no such mark. A mix-up of models after 20 May 2026 easily looks like a “fraud tail”, while the help text describes moving saved reports onto current models.
ROI by goal needs the type “goal event” and revenue: static in the interface, or price / order_price. A “page view” goal will not enter that fraction, even if conversion is counted on it. Conversion and ROI by goal live on different conditions. Cleaning page views in order to fix ROI is cleaning the wrong metric.
The habit at the end is simple. First the metric’s name from the help text, then the fraction, then a note if you left the fraction. CTR without a norm, conversion without achievements, CPA without hidden spam, ROI with × 100, bounces with a pair of robot modes, Retention without LTV, attribution from four models. Seven names, seven columns. While a column has no name, it cannot be “cleaned of fraud”: it is unknown what is being cleaned.
Column checklist
CTR is labelled as clicks / impressions, with no borrowed “norm”.
Conversion is goal visits / all visits.
Achievements are not called conversion.
CPA is called CPA, not CPL: CPL is not defined in the four help texts that were checked.
The CPA fraction has no unlabelled spam subtraction.
ROI has × 100, and zero and minus are said out loud.
Pay-per-impression spend is not expected in the Metrica report.
Both robot modes are written down before a conclusion about bounces.
Retention is not renamed LTV.
The attribution model is one of four, and the 90-day window is not “fixed” in settings.
An old report after 20 May 2026 is checked for the automatic model move.