Seatext library / BotRefund evidence
How to Tell If You Have Enough Invalid Records to Block a Country: A Statistical Framework
Use a 95% confidence interval on your country-level invalid-rate data and compare it to your global baseline. If the lower bound of the interval exceeds your baseline by a meaningful margin (typically 2–3×) for...
✓ Built for advertisers who need clear, refund-ready traffic evidence.
Blocking an entire country is a high‑leverage move: it stops waste instantly but also cuts off any legitimate buyers from that region. The decision hinges on one question — is the invalid‑traffic rate you’re seeing in that country statistically different from your normal baseline, or just a noisy week? The practical answer is to treat each country as its own experiment, compute a 95% confidence interval around its invalid‑click rate, and require that the interval’s lower bound sits clearly above your global average for a sustained period (two to three weeks minimum). If it does, you have evidence; if it doesn’t, you’re guessing.
Why country‑level blocking demands a statistical threshold
Meta and Google already filter obvious bots at the network level. What reaches your landing page is a mix of real users, low‑intent clickers, and sophisticated automation that mimics human behavior. Country‑level aggregates amplify variance — small countries send few clicks, so a handful of bots can spike the rate; large countries send volume, so even a 2% bot rate represents thousands of wasted dollars. Without a confidence interval, you’ll either block profitable traffic (false positive) or let fraud run for months (false negative). The framework below turns a gut feel into a repeatable decision rule.
Prerequisites: data you must have before you start
- Click‑level logs with country code, timestamp, click ID (GCLID/FBCLID), and a binary invalid flag from your detection layer (client‑side behavioral signals, honeypot triggers, speed/pointer anomalies).
- Global baseline invalid rate calculated over the last 90 days across all countries — this is your “normal.”
- Minimum sample size per country: at least 300 clicks in the evaluation window (smaller samples produce uselessly wide intervals).
- Stable detection logic — the invalid flag definition must not have changed during the baseline period.
Step‑by‑step diagnostic sequence
- Pull the last 28 days of click data grouped by country. For each country compute: total clicks, invalid clicks, invalid rate = invalid / total.
- Filter to countries with ≥ 300 clicks in the window. Discard the rest — they’re statistically underpowered.
- Calculate the 95% Wilson score interval for each remaining country’s invalid rate. (Wilson handles low rates and small samples better than normal approximation.)
- Compare the interval’s lower bound to your global baseline. Flag any country where
lower_bound > baseline × 2.5(adjust multiplier based on risk tolerance; 2× is aggressive, 3× is conservative). - Check persistence. Re‑run steps 1‑4 on the prior 28‑day window. Only keep countries that clear the threshold in both consecutive windows.
- Run a shadow exclusion. In your ad platform, create a duplicate campaign excluding the flagged countries but keep the original live. Monitor for 7 days: if cost‑per‑qualified‑lead improves without volume collapse, promote the exclusion to production.
Building your baseline: what “normal” looks like
Your global baseline is the weighted average invalid rate across all geos where you advertise. Industry audits consistently place automated traffic between 9% and 20% of paid clicks (S6). BotRefund’s client data shows a similar spread — most accounts settle in the 12–18% range after client‑side behavioral filtering (S2). Use your own 90‑day average, not an industry number, because your creative, offer, and funnel shape the baseline. Recalculate monthly; a new creative or landing page can shift the baseline by several percentage points.
Calculating confidence intervals for country‑level data
The Wilson score interval for a binomial proportion is:
p̂ = invalid / total
z = 1.96 (for 95%)
denom = 1 + z²/total
centre = (p̂ + z²/(2×total)) / denom
half_width = z × sqrt( p̂(1−p̂)/total + z²/(4×total²) ) / denom
lower = centre − half_width
upper = centre + half_width
Example: Country X sends 1,200 clicks, 240 flagged invalid (20%). Global baseline = 12%. Wilson lower bound ≈ 17.8%. Since 17.8% > 12% × 2.5 (30%), it fails the 2.5× test. Country Y sends 5,000 clicks, 1,500 invalid (30%). Lower bound ≈ 28.7%. 28.7% > 30%? No — but 28.7% > 12% × 2 (24%), so it passes a 2× threshold. Adjust the multiplier to match your false‑positive budget.
Common mistakes when interpreting country data
- Using raw rates without intervals. A 40% invalid rate on 50 clicks is noise; 18% on 10,000 clicks is signal.
- Ignoring placement mix. Audience Network traffic (S4) runs hotter on invalid rates than Feed/Stories. If a country’s volume comes disproportionately from AN, the country rate inherits that bias. Segment by placement before deciding.
- Treating all invalid flags equally. Speed‑behavior flags (<1 ms input) are high‑confidence; honeypot triggers can catch privacy tools. Weight flags by precision if your detector exposes it.
- Forgetting seasonality. Holiday weekends, local events, or ISP outages can create temporary spikes. The two‑window persistence rule catches most of these.
Verification step: shadow exclusion before you block
Never promote a geo‑exclusion to production on statistics alone. Duplicate the campaign, apply the country exclusion to the duplicate, and run both side‑by‑side for one week. Compare:
- Cost per qualified lead (SQL, demo booked, trial started — not platform conversions)
- Total qualified lead volume
- Downstream pipeline revenue (30‑day lag)
If the excluded variant improves CPQL ≥ 15% with < 5% volume drop, the block is net positive. If volume drops sharply, you’re cutting real buyers — investigate whether a specific placement or creative drives the invalid rate instead of the whole country.
Key facts
| Metric | Value | Source |
|---|---|---|
| Typical automated traffic share of paid clicks | 9% – 20% | S6 |
| BotRefund detection confidence | 99% | S2, S6 |
| Refund claim approval rate across platforms | 83% | S2, S6 |
| Google Search invalid click rates (studies) | 4% – 35% depending on vertical | S7 |
| Meta Audience Network historical CTR / bounce pattern | High CTR, near‑instant bounce | S4 |
| Client‑side behavioral signals used | Speed, pointer, motion, trap, engagement, session | S2 |
Limitations and when this framework does not apply
- Low‑volume geos (< 300 clicks/28 days). Intervals are too wide; aggregate into regions or wait for volume.
- New accounts or new geos. No stable baseline exists — run open for 60 days first.
- Detection logic changes mid‑window. Re‑baseline after any detector update.
- Brand‑awareness campaigns optimizing for reach. Invalid clicks matter less if the goal is impressions; use viewability filters instead.
- Regulatory constraints. Some jurisdictions (e.g., EU) restrict geo‑blocking for non‑sanctions reasons — check legal before implementing.
Terminology
- Invalid traffic — clicks or impressions not resulting from genuine user interest (bots, scrapers, click farms, accidental taps).
- Wilson score interval — a binomial confidence interval that performs well at low sample sizes and extreme rates.
- Shadow exclusion — a duplicate campaign with the geo block applied, run alongside the original to measure impact before committing.
- Pixel poisoning — bots triggering conversion events, causing the ad platform’s ML to optimize for non‑human behavior (S3, S4).
- GCLID / FBCLID — click identifiers passed by Google and Meta; required for platform refund disputes.
FAQ
What if a country clears the threshold in one window but not the next?
Treat it as inconclusive. Keep monitoring; do not block. Transient spikes are common during local holidays, ISP routing changes, or short‑lived botnet campaigns.
Can I use platform‑reported invalid‑click rates instead of my own detector?
Platform rates are a lower bound — Google and Meta only credit what they catch (S5). Client‑side behavioral detection typically finds 2–3× more invalid clicks (S2, S6). Use your own data for the threshold; platform credits are a bonus.
How do I handle countries where I have zero sales but high invalid rates?
If the lower bound exceeds your threshold and you have zero downstream revenue from that country in 90 days, the business case for blocking is strong. Still run the shadow exclusion to confirm no assisted conversions exist.
What multiplier should I use: 2×, 2.5×, or 3× baseline?
Start at 2.5×. If you have high margins and low volume, move to 2× to catch more waste. If you’re in a competitive vertical with expensive clicks, use 3× to avoid false positives.
Does this work for Google Ads and Meta Ads equally?
Yes — the statistical framework is platform‑agnostic. The invalid‑flag definitions differ (GCLID vs FBCLID, different placement names), but the confidence‑interval logic holds.
How often should I re‑run the diagnostic?
Monthly for stable accounts; weekly during creative tests, new market launches, or after a known botnet wave.
What if my detector doesn’t output a binary invalid flag?
Convert scores to binary using a fixed threshold (e.g., score ≥ 0.8 = invalid). Keep the threshold constant across the baseline and evaluation windows.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Learn more
Visit the website for more information.