You calculate what bots cost you with three lines: the money spent on clicks that were automated, the money lost to decisions made on distorted numbers, and the money spent testing landing pages on traffic that could never convert. This article gives you a formula for each, and you fill in your own figures.
All numbers below are hypothetical, chosen to make the arithmetic easy to follow. Your share of bot clicks will be whatever your own log shows, and it will differ by source, geo and campaign.
Direct loss = paid clicks × share flagged in your click log × cost per click. Add the cost of optimisation decisions made on polluted stats, and the extra clicks your landing tests needed because part of the traffic was not human. The result is an estimate, and it is more useful as a range than as a single number.
What you need before you start
Pull these from your ad account and your tracker for one period, for example the last 14 days:
- Paid clicks (C): clicks the ad network billed you for.
- Cost per click (CPC): total spend divided by paid clicks.
- Flagged share (b): the proportion of your tracked clicks that your click log marks as bots, data center, VPN or similar. Take it per source or campaign if you can.
- Visitors reaching the page: if your tracker count is lower than the network count, the gap is a separate issue covered in tracker vs network discrepancy.
The flagged share is the shakiest input. Some bots slip past any filter, and some flagged clicks (a real person on a VPN) are human. Treat b as an estimate, and run the formulas with a low and a high value.
Loss 1: money spent on the clicks themselves
Direct loss = C × b × CPCSay you buy 10,000 clicks at $0.10, so you spend $1,000. Your log flags 12% of them. That is 1,200 clicks, and 1,200 × $0.10 = $120 spent on traffic that was never going to convert.
Whether you can recover that money depends on the network's refund policy, and that is a conversation with the network, with your log as evidence. Even if you recover nothing, the figure tells you how much a source is worth to you.
Loss 2: skewed optimisation
Bots also distort the numbers you optimise on. A placement with heavy automated traffic shows a low conversion rate, so you cut it, even though its human traffic converts fine. Or the reverse: bots inflate click counts on a source and hide a real problem in its human segment.
This is hard to measure exactly, so estimate it with a comparison. Recalculate conversion rate per source using only unflagged clicks, and compare it with the raw figure.
| Source (hypothetical) | Clicks | Flagged | Conversions | Raw CR | CR on unflagged |
|---|---|---|---|---|---|
| Placement A | 2,000 | 40% | 24 | 1.2% | 2.0% |
| Placement B | 2,000 | 3% | 30 | 1.5% | 1.55% |
On raw numbers, B beats A by a visible margin, and many people would cut A. On unflagged clicks, A converts better. The decision flips. To put a figure on the loss, take the weekly profit you would have kept by leaving A running, or the weekly budget you moved to a worse source, and multiply by the number of weeks the wrong call stayed in place. Say you moved $200 a week to a source that returns less than the one you cut, and the call stood for three weeks. Your estimate of the damage is the profit difference on those $600, not the $600 itself.
Loss 3: wasted landing tests
A split test needs a number of human visitors per variant before the result means anything. If part of your traffic is automated, you need more clicks to reach that number.
Clicks needed = human visitors needed ÷ (1 − b)
Extra cost = (clicks needed − human visitors needed) × CPCSay your test needs 2,000 human visitors per variant, two variants, so 4,000 in total. With b = 12%, you need 4,000 ÷ 0.88 ≈ 4,545 clicks. The extra 545 clicks cost 545 × $0.10 = about $54. That is only the money. The test also runs longer, and a longer test delays the winning variant.
There is a worse case. If bots land unevenly between variants, or interact with one page differently (for example, they fire a button on one layout and not on another), the winner may be an artefact. Filter first, then test.
Putting it together
| Line | Formula | Hypothetical result |
|---|---|---|
| Direct loss | C × b × CPC | $120 |
| Skewed optimisation | Profit difference × weeks | Your estimate |
| Wasted tests | (Clicks needed − needed) × CPC | about $54 |
Run the calculation twice, once with a conservative b and once with a high one, and report both. If the low case is already larger than the cost of a filtering tool, the decision is easy. If it is not, you may be fine as you are, and that is a legitimate result.
Measuring b from your own log
You need a click log that records a status and a reason for each click. In TDS.SO the click log shows time, country and city, IP, device and browser, referrer and status, and has filters for bots, unique, VPN and Tor. The overview page shows total clicks, unique visitors, humans and bots per day, and a traffic quality breakdown (clean, unique, bots, proxy/VPN, Tor). Those two views give you C and b per day, which you can export or copy into a sheet. See analytics for what is shown.
Filtered clicks are still logged with the reason, so you can keep measuring after you start filtering. For the tracker, in beta, revenue counts approved conversions and cost counts all clicks, so bot clicks sit in the cost side of your ROI until they are filtered out.
Reducing the loss
Filtering does not recover money already spent. It lowers the number of automated clicks that reach your page from now on. TDS.SO filters on the link: you pick a level (Off, Standard, High, JavaScript browser check or Custom), tick signals such as data centers, VPN or empty referrer, and send filtered clicks to a page you set. Start mild, because tighter settings can catch real people on VPNs, and compare your flagged share and your conversion rate before and after. Details are in anti-bot filtering, and plans start at $9.99 per week, see pricing. Compare that with the weekly figure from your own calculation.
Not every automated click is a bot in the advertising sense. Email security scanners also open links, which is a separate cause and is described in email scanner clicks.
FAQ
What share of my traffic is bots?
There is no figure that applies to everyone. It depends on source, geo, placement and format. Measure it from your own click log, per source.
Can I get a refund from the ad network?
That depends on the network's policy and on your evidence. A click log with reasons and timestamps is the thing to bring. Do not assume a refund when you plan your budget.
Is the flagged share the same as the real bot share?
No. It is what your filter and log can detect. Some bots pass, and some flagged clicks are human, so run your numbers with a low and a high value.
How long should I measure for?
Long enough to include your normal weekly pattern, usually at least 7 days, and per source if volumes allow. A single day can mislead.
Do I need a filter if my share is small?
If direct loss, skewed decisions and extra test cost add up to less than the filter costs, you can leave it off and recheck monthly.
To see your own numbers, open the click log and the overview in TDS.SO analytics, then plug them into the formulas above.
Guides and write-ups on routing, bot filtering and tracking from the TDS.SO team.
All articles by the author