Рекламное мошенничество — это не просто «шум» в системе. Это системная угроза, которая ежегодно обходится рекламодателям в десятки миллиардов долларов. По оценкам CHEQ, глобальные потери от недействительного трафика (IVT) достигли $100+ миллиардов в 2024 году. Для брендов, медиа-байеров и рекламных платформ это означает, что каждый седьмой рекламный доллар тратится впустую — на ботов, скрытые объявления и фальсифицированные показы.
В этом руководстве мы рассмотрим, как команды ad ops, trust & safety и media quality используют прокси для верификации рекламы, чтобы «видеть то, что видит пользователь» в разных географических регионах, и как построить надёжный пайплайн обнаружения мошенничества — от выбора инфраструктуры до технической реализации.
Проблема рекламного мошенничества: что теряют бренды
Рекламное мошенничество эволюционировало от простых схем с ботами до сложных организованных операций. Основные векторы атак включают:
- Недействительный трафик (IVT) — показы и клики от ботов, скриптов или фальсифицированных источников. По данным IAB, 14-25% всего трафика классифицируется как недействительный.
- Спуфинг доменов — мошенники заявляют, что реклама показана на премиальных сайтах (например, news-site.com), хотя фактически она показана на низкокачественных или вредоносных ресурсах.
- Гео-мошенничество — реклама должна показываться в оплаченном регионе (например, Германия), но фактически показывается в других странах с более дешёвым трафиком.
- Видимость (viewability) — объявления загружаются, но не видны пользователю (загружены за пределами экрана, в iframe нулевого размера и т.д.).
- Нарушения MAP (Minimum Advertised Price) — несанкционированные продавцы показывают рекламу по ценам ниже минимально допустимых.
Для рекламодателей это означает искажённую аналитику, потерянные бюджеты и ущерб репутации бренда. Для рекламных платформ — риск штрафов, потери доверия клиентов и регуляторных санкций.
Почему верификация — это индустрия на $100 млрд
Крупнейшие вендоры верификации — IAS (Integral Ad Science), DoubleVerify и MOAT (Oracle) — построили бизнес на предоставлении «независимого взгляда» на рекламные кампании. Их услугами пользуются:
- Бренды и агентства — для защиты рекламных бюджетов;
- Издатели — для подтверждения качества трафика;
- Рекламные платформы — для соответствия стандартам (MRC, TAG).
Ключевое преимущество этих вендоров — географически распределённая инфраструктура, которая позволяет им проверять рекламу так, как её видят реальные пользователи в разных странах и городах. И здесь резидентные прокси играют критическую роль.
Как вендоры верификации используют резидентные прокси
Когда рекламодатель покупает показы в Германии, он ожидает, что объявления увидят немецкие пользователи. Но как проверить, что реклама действительно показывается в Берлине, а не перенаправляется на ботов в другой стране?
Вендоры верификации используют резидентные прокси с гео-таргетированием для:
- Проверки локального показа — подключение через IP-адреса целевого региона для подтверждения, что объявления доставляются корректно.
- Обнаружения гео-спуфинга — сравнение того, что видят пользователи в разных локациях, с тем, что заявляет рекламная платформа.
- Рендеринга креативов — использование headless-браузеров для загрузки и анализа рекламных объявлений.
- Проверки контекста страницы — подтверждение, что реклама показана на заявленном сайте, а не на фальшивой странице.
Почему именно резидентные прокси? Дата-центровые IP-адреса часто блокируются рекламными платформами как «подозрительные». Резидентные IP-адреса, принадлежащие реальным пользователям, выглядят как обычный трафик и позволяют увидеть рекламу в её истинном виде.
Технический подход: архитектура системы верификации
Построение системы верификации рекламы требует нескольких ключевых компонентов:
1. Резидентные прокси с ротацией IP
Для проверки рекламы в разных географических регионах нужны IP-адреса, которые выглядят как локальный трафик. Используйте гео-таргетирование для выбора страны и города:
# Подключение через резидентный прокси в Германии
http://user-country-DE:PASSWORD@gate.proxyhat.com:8080
# Подключение через резидентный прокси в Берлине
http://user-country-DE-city-berlin:PASSWORD@gate.proxyhat.com:8080
# Подключение через резидентный прокси в США
http://user-country-US:PASSWORD@gate.proxyhat.com:8080
Ротация IP на каждый запрос позволяет имитировать разных пользователей и избегать паттернов, которые могут быть заблокированы.
2. Headless-браузеры для рендеринга
Простого HTTP-запроса недостаточно — современные рекламные объявления рендерятся через JavaScript. Используйте Puppeteer (Node.js) или Playwright (Python/Node.js) для полноценной загрузки страниц:
# Пример на Python с Playwright и резидентным прокси
from playwright.sync_api import sync_playwright
PROXY_URL = "http://user-country-DE-city-berlin:PASSWORD@gate.proxyhat.com:8080"
def verify_ad_delivery(target_url):
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={"server": PROXY_URL},
headless=True
)
page = browser.new_page()
page.goto(target_url, timeout=30000)
# Захват скриншота и анализ DOM
screenshot = page.screenshot()
ad_elements = page.query_selector_all('[data-ad-slot]')
browser.close()
return {
'screenshot': screenshot,
'ad_count': len(ad_elements),
'url': page.url
}
3. Движок правил для обнаружения аномалий
После сбора данных необходима система правил для классификации показов как легитимных или мошеннических. Правила включают:
- Сравнение заявленного URL с фактическим;
- Проверку геолокации IP-адреса;
- Анализ видимости объявления;
- Обнаружение скрытых iframe и перенаправлений.
Практический пример: обнаружение двух сигнатур мошенничества
Рассмотрим два распространённых типа мошенничества и как их обнаружить с помощью резидентных прокси.
Случай 1: Спуфинг домена
Сценарий: Рекламодатель покупает показы на premium-news-site.com, но мошенники показывают рекламу на низкокачественном сайте, фальсифицируя referer.
Обнаружение:
- Подключитесь через резидентный прокси в целевом регионе.
- Загрузите страницу с рекламным тегом.
- Сравните заявленный домен с фактическим URL страницы.
- Проверьте, соответствует ли контент страницы ожидаемому.
import requests
from urllib.parse import urlparse
PROXY = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
proxies = {
"http": PROXY,
"https": PROXY
}
def detect_domain_spoofing(bid_request_url, claimed_domain):
"""
Проверяет, соответствует ли фактический домен заявленному.
"""
session = requests.Session()
session.proxies = proxies
response = session.get(bid_request_url, timeout=15)
final_url = response.url
actual_domain = urlparse(final_url).netloc
# Проверка соответствия доменов
if claimed_domain not in actual_domain:
return {
'fraud_type': 'DOMAIN_SPOOFING',
'claimed': claimed_domain,
'actual': actual_domain,
'confidence': 'HIGH'
}
# Дополнительная проверка контента
if 'premium' in claimed_domain and len(response.text) < 500:
return {
'fraud_type': 'SUSPICIOUS_CONTENT',
'claimed': claimed_domain,
'content_length': len(response.text),
'confidence': 'MEDIUM'
}
return {'fraud_type': None, 'confidence': 'LOW'}
Случай 2: Гео-мошенничество
Сценарий: Рекламодатель оплатил показы в Германии, но трафик фактически приходит из других стран с более низкой стоимостью.
Обнаружение:
- Запустите параллельные проверки из нескольких географических регионов.
- Сравните, какие объявления показываются в каждой локации.
- Идентифицируйте расхождения между оплаченным и фактическим охватом.
import concurrent.futures
import requests
REGIONS = ['DE', 'US', 'BR', 'IN']
PROXY_BASE = "http://user-country-{}:PASSWORD@gate.proxyhat.com:8080"
def check_geo_delivery(ad_tag_url, target_region):
proxy = PROXY_BASE.format(target_region)
proxies = {"http": proxy, "https": proxy}
try:
response = requests.get(ad_tag_url, proxies=proxies, timeout=15)
return {
'region': target_region,
'status': response.status_code,
'ad_served': 'ad-content' in response.text
}
except Exception as e:
return {'region': target_region, 'error': str(e)}
def detect_geo_fraud(ad_tag_url, paid_regions):
"""
Проверяет, показывается ли реклама только в оплаченных регионах.
"""
results = []
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
futures = [executor.submit(check_geo_delivery, ad_tag_url, r) for r in REGIONS]
results = [f.result() for f in concurrent.futures.as_completed(futures)]
# Анализ результатов
served_outside_paid = [
r for r in results
if r.get('ad_served') and r['region'] not in paid_regions
]
if served_outside_paid:
return {
'fraud_type': 'GEO_FRAUD',
'paid_regions': paid_regions,
'served_outside': [r['region'] for r in served_outside_paid],
'confidence': 'HIGH'
}
return {'fraud_type': None, 'results': results}
Построение внутреннего пайплайна верификации
Для команд, которые хотят создать собственную систему верификации, вот базовая архитектура:
Компоненты системы
| Компонент | Функция | Технологии |
|---|---|---|
| Прокси-пул | Географически распределённые IP-адреса | Резидентные прокси (ProxyHat) |
| Сборщик | Загрузка страниц и рендеринг рекламы | Playwright / Puppeteer |
| Анализатор | Извлечение данных из DOM | Python / Node.js |
| Движок правил | Классификация показов | Пользовательские правила + ML |
| Хранилище | Архивирование доказательств | PostgreSQL / S3 |
| Дашборд | Визуализация результатов | Grafana / Custom UI |
Поток данных
- Входные данные: список рекламных тегов или URL кампаний для проверки.
- Гео-распределение: каждый URL проверяется из целевых регионов через резидентные прокси.
- Рендеринг: headless-браузер загружает страницу и выполняет JavaScript.
- Извлечение: система собирает URL страницы, контент рекламы, скриншоты.
- Анализ: движок правил сравнивает данные с ожиданиями.
- Алерты: аномалии отправляются на расследование.
Пример базового пайплайна
import requests
from playwright.sync_api import sync_playwright
import json
from datetime import datetime
PROXY_GATEWAY = "http://user-country-{}:PASSWORD@gate.proxyhat.com:8080"
class AdVerificationPipeline:
def __init__(self, target_regions):
self.regions = target_regions
self.results = []
def get_proxy(self, region):
return PROXY_GATEWAY.format(region)
def verify_impression(self, impression_data):
"""
Проверяет показ рекламы в указанных регионах.
"""
for region in self.regions:
proxy_url = self.get_proxy(region)
result = self._check_impression(impression_data, proxy_url, region)
self.results.append(result)
return self._analyze_results()
def _check_impression(self, data, proxy_url, region):
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={"server": proxy_url},
headless=True
)
page = browser.new_page()
try:
page.goto(data['url'], timeout=30000)
# Проверка домена
actual_domain = page.url.split('/')[2]
domain_match = data['claimed_domain'] in actual_domain
# Проверка наличия рекламы
ad_elements = page.locator('[data-ad-slot], [id*="ad"], iframe[src*="ads"]').count()
# Скриншот для доказательств
screenshot = page.screenshot()
return {
'timestamp': datetime.utcnow().isoformat(),
'region': region,
'claimed_domain': data['claimed_domain'],
'actual_domain': actual_domain,
'domain_match': domain_match,
'ad_elements_found': ad_elements,
'fraud_detected': not domain_match or ad_elements == 0
}
except Exception as e:
return {'region': region, 'error': str(e)}
finally:
browser.close()
def _analyze_results(self):
fraud_indicators = [r for r in self.results if r.get('fraud_detected')]
return {
'total_checks': len(self.results),
'fraud_detected': len(fraud_indicators),
'fraud_rate': len(fraud_indicators) / len(self.results) if self.results else 0,
'details': self.results
}
# Использование
pipeline = AdVerificationPipeline(['DE', 'US', 'GB'])
result = pipeline.verify_impression({
'url': 'https://example-site.com/page-with-ads',
'claimed_domain': 'example-site.com'
})
print(json.dumps(result, indent=2))
Сравнение: вендоры vs внутренняя разработка
Решение между использованием внешнего вендора и построением внутренней системы зависит от объёма, бюджета и экспертизы команды.
| Критерий | Вендоры (IAS, DV, MOAT) | Внутренняя разработка |
|---|---|---|
| Время запуска | Дни (интеграция API) | Недели-месяцы |
| Охват гео | 200+ стран | Зависит от прокси-провайдера |
| Модели мошенничества | Постоянно обновляются | Требует поддержки |
| Стоимость | $10K-100K+/месяц | Инфраструктура + персонал |
| Кастомизация | Ограничена | Полная |
| Интеграция с DSP | Готовая | Требует разработки |
| Отчётность для клиентов | Сертифицированные отчёты | Требует валидации |
| Данные для обучения ML | Масштабные исторические | Собираются с нуля |
Чек-лист для оценки решения
При выборе между вендором и внутренней разработкой рассмотрите следующие вопросы:
- Объём кампаний: Какой объём показов требует проверки? При >100M показов/месяц вендор часто выгоднее.
- География: Сколько стран нужно покрыть? Резидентные прокси с широким охватом критичны для глобальных кампаний.
- Типы мошенничества: Нужна ли защита от сложных схем (SSAI-мошенничество, CTV/OTT) или достаточно базовых проверок?
- Собственные данные: Важен ли доступ к «сырым» данным для обучения собственных ML-моделей?
- Бюджет: Какова стоимость владения решением (лицензии, инфраструктура, персонал)?
- Соответствие: Требуются ли сертифицированные отчёты для клиентов или регуляторов?
Лучшие практики использования прокси для верификации
Выбор типа прокси
| Тип прокси | Преимущества | Недостатки | Рекомендуемое применение |
|---|---|---|---|
| Резидентные | Выглядят как реальный трафик, не блокируются | Выше стоимость, переменная скорость | Основная верификация, проверка гео |
| Мобильные | Имитация мобильных пользователей | Ограниченная доступность | Мобильные кампании, CTV/OTT |
| Дата-центровые | Быстрые, стабильные, низкая стоимость | Легко обнаруживаются и блокируются | Базовые проверки, тестирование |
Управление сессиями
Для последовательных проверок используйте липкие сессии (sticky sessions), чтобы сохранять один IP-адрес на протяжении нескольких запросов:
# Липкая сессия для последовательных проверок
http://user-country-DE-session-abc123:PASSWORD@gate.proxyhat.com:8080
Распределение нагрузки
При масштабировании системы:
- Используйте пул сессий для параллельных проверок;
- Ограничьте частоту запросов с одного IP;
- Чередуйте географические регионы для естественного паттерна;
- Мониторьте成功率 и латентность прокси.
Соответствие и этика
При построении системы верификации учитывайте:
- robots.txt — уважайте директивы сайтов, если они не противоречат целям безопасности;
- GDPR/CCPA — не собирайте персональные данные пользователей без необходимости;
- Условия использования — некоторые платформы запрещают автоматизированный доступ; консультируйтесь с юристами.
Ключевые выводы
Рекламное мошенничество — системная угроза. Потери в $100+ млрд требуют системного подхода к защите. Верификация — не опция, а необходимость.
Резидентные прокси — основа гео-верификации. Только IP-адреса реальных пользователей позволяют увидеть рекламу так, как её видит целевая аудитория.
Внутренняя разработка даёт контроль. Для команд с достаточной экспертизой собственный пайплайн обеспечивает кастомизацию и доступ к данным, недоступные через вендоров.
Гибридный подход часто оптимален. Многие организации используют вендоров для базовой верификации и внутренние системы для специализированных проверок.
ROI верификации измерим. Снижение IVT на 5-10% окупает инвестиции в инфраструктуру в течение месяцев.
Заключение
Верификация рекламы с использованием резидентных прокси — это технически сложная, но критически важная задача для рекламодателей, агентств и платформ. Понимание того, как мошенники эксплуатируют систему, и построение надёжной инфраструктуры обнаружения — ключ к защите рекламных бюджетов и репутации бренда.
Независимо от того, выбираете ли вы готовое решение вендора или строите внутреннюю систему, резидентные прокси с гео-таргетированием остаются фундаментом любой стратегии верификации. Они позволяют «видеть то, что видит пользователь» — в Берлине, Нью-Йорке или Токио.
Для команд, которые начинают путь верификации, рекомендуем ознакомиться с нашими руководствами по лучшим практикам веб-скрейпинга и SERP-мониторингу — многие техники применимы и к рекламной верификации.






