How to protect a VK Ads budget from bots
Contents
Share
The VK Ads help explains fast spend by the bid, the width of the audience, and the auction, not by bots. The pages on placements, the auction, and debits have no column of invalid clicks and no refund for them. Protecting the budget here starts with what you can switch by hand — placements, the goal, hours, impression frequency — and with the fact that a link wrapper for audit does not filter a click.
Click fraud is not named in these help pages. Below is what the platform actually shows, and an order that should not be confused with a Direct filter.
Where the ad can be seen at all
VK Ads turns automatic placement selection on by default. The help lists the placements this way: Odnoklassniki, VKontakte, VK projects, the ad network (Yula, Avito, Auto.ru, and Edadeal are the examples), and RuStore for apps from RuStore. To keep only some of them, on the ad-group step, in the Placement block, you turn automatic placements off and clear the extra checkboxes. That page suggests reading the ad's effectiveness from CTR, CPC, CPM, and conversion.
This is a choice of large placements, not the exclusion of one network domain by name, as in Direct. You can turn the ad network off as a whole. You cannot cross out one third-party site inside it: that setting is not on the page. Invalid clicks do not appear here as a column. If spend rose after the network was turned on, narrow the placements first and look at CTR, CPC, CPM, and conversion, rather than looking for a refund this page does not describe.
How the auction spends the budget
A campaign budget is either daily or for the whole period. The auction runs when a person opens a placement, among the ads aimed at that person, by eCPM. The winner pays the previous participant's bid: a second-price auction, payment for the impression. The help defines CTR as clicks / impressions × 100%, and CR as the goal action / clicks × 100%. For an impressions goal, eCPM equals the auction bid. For clicks, eCPM = bid × CTR × 1,000. For a subscription, a lead, a cart, a purchase, an install, and other actions, eCPM = bid × CTR × CR × 1,000. The model gives the first estimate of CTR and CR from the history of the goal and the category's targeting; after enough conversions, the ad's own figures enter the model. The help does not translate "enough" into a count. It does not write about invalid clicks or about subtracting them from eCPM. The formulas come from the platform's help.
A teaching example, not a measurement of your campaign. A click bid of 20 rubles and a CTR of 1% (0.01). Then eCPM = 20 × 0.01 × 1,000 = 200 rubles per thousand impressions. If the goal is a lead and CR is 10% (0.1), eCPM = 20 × 0.01 × 0.1 × 1,000 = 20. The help does not say to subtract bots from these percentages. There is nothing to plug a fraud share into the formula from.
Click fraud and sklikivanie do not rewrite eCPM. Who clicks ads and why is not named in the VK bid calculation. Whether Yandex refunds click fraud is a question about another platform. These VK pages do not describe a refund.
Why the budget is debited quickly
The page "Why the budget is debited quickly" names the reasons: a harder goal needs a higher bid, a wide and active audience receives impressions faster, a larger budget is debited faster, a bid that is low relative to the market slows impressions. The algorithm, the help writes, wants to spread the budget evenly, but it may spend it at once if impressions are cheaper now or people are more likely to convert. For a smoother pace it suggests changing the goal action, narrowing the audience, choosing hours when the audience is less active, and, for media campaigns, setting impression frequency.
Bots, invalid clicks, and a money refund are not named on this page. This is an explanation of spend speed, not a fraud diagnosis. A morning spike does not yet prove automatic clicks: by the help, cheap impressions or a high chance of conversion right now are enough to explain it.
What "click verification" does
The markup page for click verification explains how to wrap the destination URL in a verifier's link so that, in the statistics of campaigns under audit, VK Ads pixel conversions are tied to a click. For AdRiver, the {{clickid}} macro is passed in rb_clickid through a custom parameter, starting at number 11. The example of the resulting parameter is custom=11={{campaign_id}};{{banner_id}};{{clickid}}. A conversion after the click is written into the Conversions metric group and tied to a particular click.
The word "verification" here is about a verifier such as AdRiver accounting for the click. The page does not describe filtering invalid clicks, a column of such clicks, or a credit for them. The wrapper helps tie a conversion to a click. It does not decide whether the click was human.
Order when the budget leaves quickly
Open the Placement block. If placements are automatic, turn them off and clear the checkboxes of placements you do not need. These are the large placements from the list, not a domain blocklist.
Look at CTR, CPC, CPM, and conversion for the placements you kept. The help suggests reading effectiveness from these figures.
Check the goal and the bid. A hard goal needs a higher bid. For clicks, eCPM = bid × CTR × 1,000; for an action, CR enters the formula as well. The help does not plug a bot share into the formula.
If debits are uneven, narrow the audience, change the goal action, choose less active hours, and for media campaigns set impression frequency. That is how the help suggests smoothing delivery.
Do not read a morning spike as fraud until cheap impressions and a high chance of conversion are ruled out. The page names those reasons outright.
Turn on "click verification" if you need an audit of the click-to-conversion tie, as in the
{{clickid}}example. That markup is not a bot filter.Do not carry over an expectation of a Direct-style refund. The VK pages reviewed here have no column of invalid clicks and no credit for them.
| Lever | What it changes | What it does not do |
|---|---|---|
| Placement checkboxes | Keeps part of the listed placements | Does not cross out one network domain |
| Bid and goal | Changes eCPM and debit speed | Does not subtract invalid clicks |
| Audience, hours, frequency | Smooths delivery as the help suggests | Does not diagnose bots |
The {{clickid}} wrapper | Ties a pixel conversion to a click | Does not issue a credit for the click |
On the site, Binetro decides whether to allow a visit, and it does not rewrite the VK auction. The platform still charges the money. Narrowing placements and the bid stays your account setting, even if a check is already on the site.
A teaching day of a campaign
The figures below are an example for reading the help, not a measurement of your account. In the morning the daily budget was 10,000 rubles, the goal was a click, the bid was 20 rubles, and the model first estimated CTR at 1%. eCPM for clicks was then 20 × 0.01 × 1,000 = 200 rubles per thousand impressions. By noon more than half was spent: the audience was wide, and the help explicitly allows the algorithm to spend the budget at once if impressions are cheaper now or conversion is more likely. That is not yet bots.
Next you opened Placement. Automatic placements were on, and the list included the network with examples such as Yula and Avito. You cleared the network checkbox and kept VKontakte and Odnoklassniki. One domain inside the network cannot be crossed out that way: the placements page has no such exclusion. Read the effectiveness of what remains from CTR, CPC, CPM, and conversion.
In the evening you turned on the wrapper custom=11={{campaign_id}};{{banner_id}};{{clickid}}, so a pixel conversion would be tied to a click in an AdRiver audit. The tie will show up in the Conversions group. A column of invalid clicks and a credit for them will not appear from this string. If the goal had been a lead with a CR of 10%, the teaching eCPM would have been 20 × 0.01 × 0.1 × 1,000 = 20, and the formula still does not subtract bots. A refund of the kind familiar from Direct is not described on these VK pages. On the site Binetro decides the visit and does not rewrite the auction.
Read it again the next day by the levers, not by the feeling that "it drained." Placements: automatic, or with checkboxes. The goal: impressions, clicks, or an action, and which of the three eCPM formulas belongs to it. Audience and hours: a wide active audience receives impressions faster, and the help suggests less active hours for a smoother pace. Frequency is only for media campaigns. Verification is only if you need the click-to-conversion tie, not as a filter. If spend is still fast after that, the help leaves the explanation as a cheap impression and a likely conversion. Bots are not in that explanation, and there is no credit column either.
Keep the three formulas at hand so you do not mix up why a bid "does not work." Impressions: eCPM equals the auction bid. Clicks: the bid is multiplied by CTR and by 1,000. An action, including a lead: CR enters the product as well. CTR is clicks divided by impressions, in percent. CR is the goal action divided by clicks, in percent. The model gives the first estimate of both rates from the history of the goal and the category's targeting, then the ad's own figures enter it once there are enough conversions. How many "enough" is, is not stated as a number. Until the model has moved to your figures, read fast spend by the reasons on the debit page: a hard goal, a wide audience, a larger budget, cheap impressions right now, a more likely conversion. Narrowing placements does not cancel that list. It only removes the placements you cleared with a checkbox.
If the next day the budget is gone again by noon, do not add bots to the explanation: the debit help does not name them. Check four reasons in order: the goal got harder and the bid rose, the audience stayed wide and active, the daily or period budget got larger, the bid is not low relative to the market and so impressions keep coming. The algorithm wants an even pace and can still spend the money at once on a cheap impression or a likely conversion. Impression frequency smooths media campaigns only. The click wrapper for AdRiver after that still ties a conversion to a click and still creates no credit. The {{clickid}} macro, together with the campaign and ad identifiers, is for accounting, starting at custom parameter number 11. Whether the click was human, the parameter string does not answer.