Dijital reklamcılıkta güven sorunu her geçen gün büyüyor. Media buyers, premium envanter için ödeme yapıyor ancak reklamların gerçekten doğru kitleye, doğru coğrafyada ve doğru yayın kalitesinde ulaşıp ulaşmadığını doğrulamak giderek zorlaşıyor. Ad fraud, 2024 yılında küresel reklamverenlere tahmini 88 milyar dolar mal oldu — bu rakam 2028'e kadar 100 milyar doları aşacak. Sadece ABD'de, dijital reklam harcamalarının yaklaşık %20-30'u sahte trafiğe, domain sahteciliğine veya geo-fraud'a kurshanıyor.
Bu rehber, ad verification ekiplerinin residential proxy'leri nasıl kullandığını, sahtekarlık imzalarını nasıl tespit ettiklerini ve kurum içi doğrulama sistemlerinin nasıl kurulacağını açıklıyor.
Reklam Sahtekarlığı Sorunu: 100 Milyar Dolarlık Endüstri Endişesi
Ad fraud, dijital reklam ekosisteminin en büyük ve en kalıcı sorunlarından biri. Media buyers ve markalar, reklam bütçelerinin önemli bir kısmını görünmez, yanlış hedeflenmiş veya tamamen sahte envantere harcıyor. Sorunun boyutlarını anlamak için başlıca sahtekarlık türlerine bakmak gerekiyor.
Invalid Traffic (IVT) ve Genel Sahtekarlık
Invalid Traffic, bot trafiği, sunucu farm'ları, sahte kullanıcı hesapları ve diğer insan-dışı trafiği kapsıyor. Media Rating Council (MRC) standartlarına göre, IVT iki kategoriye ayrılıyor:
- General Invalid Traffic (GIVT): Bilinen bot'lar, spider'lar, veri merkezi IP'leri — tespiti nispeten kolay.
- Sophisticated Invalid Traffic (SIVT): Gelişmiş bot'lar, hijacked devices, malware kaynaklı trafik — tespiti çok daha zor.
2024 raporlarına göre, dijital reklam gösterimlerinin %14-22'si IVT kategorisine giriyor. Video reklamlarda bu oran daha da yüksek — %20-35 aralığında.
Domain Spoofing (Alan Adı Sahteciliği)
Domain spoofing, sahtekarların premium yayıncı sitelerinden (örneğin New York Times, Forbes) geldiği iddia edilen reklam gösterimlerini sattığı bir yöntem. Gerçekte ise reklamlar düşük kaliteli sitelerde, hatta bazen malware yayan sayfalarda gösteriliyor.
Örnek senaryo: Bir marka, premium bir haber sitesinde reklam gösterimi için 15 CPM ödüyor. Ancak gösterim gerçekte düşük kaliteli bir blog'da gerçekleşiyor. Fark, reklamverenin zararı ve sahtekarın karı.
Geo-Fraud (Coğrafi Sahtekarlık)
Geo-fraud, reklam gösterimlerinin yanlış coğrafi konumda gerçekleştiği veya raporlandığı durumlarda ortaya çıkıyor. İki ana türü var:
- Location Spoofing: Sahtekarlar, IP'leri VPN veya proxy kullanarak yüksek CPM'li pazarlardan (ABD, İngiltere, Almanya) geliyor gibi gösteriyor.
- Geo-Targeting Violation: Reklamlar, hedeflenen ülke dışında gösteriliyor ancak raporlama doğru yapılıyor.
ABD pazarında CPM ortalaması 15-25 dolar iken, bazı gelişmekte olan pazarlarda 0.50-2 dolar arasında. Bu fark, geo-fraud için güçlü bir ekonomik teşvik oluşturuyor.
Neden Bu Kadar Zor Tespit Ediliyor?
Ad fraud tespiti zorlaşıyor çünkü:
- Sahtekarlar sürekli taktik değiştiriyor — tespit edildiklerinde yeni yöntemlere geçiyor.
- SSP ve DSP'ler arasındaki çok katmanlı zincir, şeffaflığı azaltıyor.
- Bot'lar giderek daha "insan gibi" davranıyor — fare hareketleri, scroll, tıklama simülasyonu.
- Veri merkezi IP'lerinin tespiti kolay olsa da, residential proxy'lerin tespiti çok daha zor.
Ad Verification Vendor'ları Residential Proxy'leri Nasıl Kullanıyor?
Integral Ad Science (IAS), DoubleVerify (DV), Oracle MOAT gibi ad verification vendor'ları, "kullanıcının gördüğünü görmek" için residential proxy'leri kritik bir araç olarak kullanıyor. Peki bu tam olarak nasıl çalışıyor?
"Kullanıcının Gördüğünü Görmek" Prensibi
Bir reklam kampanyası çalıştırdığınızda, reklamlar dünya genelinde binlerce farklı sitede, farklı cihazlarda ve farklı coğrafyalarda gösteriliyor. Bir kullanıcı olarak:
- Reklamın doğru sayfada gösterilip gösterilmediğini
- Reklamın görünür olup olmadığını (viewability)
- Reklamın yanında uygun olmayan içerim olup olmadığını (brand safety)
- Reklamın hedeflenen coğrafyada gösterilip gösterilmediğini
doğrulamak istiyorsunuz.
Bunu yapmanın tek yolu, gerçek kullanıcılara benzeyen IP'lerden bu sayfalara erişmek ve reklamları gerçek bir tarayıcıda render etmek. İşte residential proxy'ler burada devreye giriyor.
Coğrafi Dağıtım Neden Kritik?
Farklı pazarlarda reklam envanteri, fiyatlandırma ve sahtekarlık oranları farklılık gösteriyor:
| Pazar | Ortalama CPM | IVT Oranı | Yaygın Fraud Türü |
|---|---|---|---|
| ABD | $15-25 | %12-18 | Domain spoofing, SIVT |
| Batı Avrupa | $10-20 | %14-20 | Geo-fraud, IVT |
| APAC | $5-12 | %18-25 | Bot farms, app fraud |
| LATAM | $2-6 | %20-30 | Invalid traffic |
Ad verification vendor'ları, her pazardan yerel residential IP'ler kullanarak tarama yapabiliyor. Bu sayede:
- ABD'de premium bir yayıncı gibi görünen bir sitenin gerçekten ABD'den mi yoksa başka bir ülkeden mi yayın yaptığını doğrulayabiliyor.
- Brexit sonrası İngiltere hedefli kampanyaların gerçekten İngiltere'de mi gösterildiğini kontrol edebiliyor.
- GDPR kapsamındaki AB reklamlarının AB dışına sızıp sızmadığını tespit edebiliyor.
Residential vs Datacenter Proxy'ler Ad Verification'da
Ad verification için residential proxy'ler neredeyse zorunlu. İşte nedeni:
| Özellik | Residential Proxy | Datacenter Proxy |
|---|---|---|
| IP Kaynağı | Gerçek ISP, gerçek kullanıcı | Veri merkezi blokları |
| Tespit Riski | Çok düşük | Yüksek — birçok site blokluyor |
| Coğrafi Doğruluk | Şehir/seviye hedefleme | Ülke seviyesi |
| Viewability Ölçümü | Doğru — gerçek kullanıcı gibi | Yanlış — bot gibi algılanabilir |
| Maliyet | Daha yüksek | Daha düşük |
Datacenter proxy'ler, fraud yapan tarafın tespit edilmesinde kullanılabilir (sahtekarların kullandığı IP'leri tespit etmek). Ancak fraud tespiti için residential proxy'ler altın standart.
Teknik Yaklaşım: Residential IP'ler ile Ad Verification Pipeline'ı
Bir ad verification sisteminin teknik mimarisi üç ana bileşenden oluşuyor:
1. Residential Proxy Rotation
Her doğrulama isteği için farklı bir residential IP kullanmak, tespit riskini azaltıyor ve gerçek kullanıcı davranışını simüle ediyor. Proxy rotation için iki strateji var:
- Per-Request Rotation: Her sayfa yükleme için yeni IP — yüksek anonimlik, düşük tutarlılık.
- Sticky Sessions: Aynı oturum boyunca aynı IP — daha gerçekçi kullanıcı davranışı, daha iyi oturum takibi.
ProxyHat gibi bir residential proxy servisi ile coğrafi hedefleme yapmak mümkün:
# ABD'den residential proxy ile istek
import requests
proxies = {
'http': 'http://user-country-US:PASSWORD@gate.proxyhat.com:8080',
'https': 'http://user-country-US:PASSWORD@gate.proxyhat.com:8080'
}
response = requests.get('https://target-ad-page.com', proxies=proxies)
2. Headless Browser ile Ad Rendering
Sadece HTTP isteği yapmak yeterli değil — reklamlar JavaScript ile render ediliyor, viewability ölçümleri için gerçek bir tarayıcı ortamı gerekiyor. Puppeteer veya Playwright bu iş için ideal:
from playwright.sync_api import sync_playwright
def verify_ad_impression(url, geo='US'):
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={
'server': 'http://gate.proxyhat.com:8080',
'username': f'user-country-{geo}',
'password': 'PASSWORD'
}
)
page = browser.new_page()
# Sayfayı yükle
page.goto(url)
# Reklam elementlerini bul
ad_elements = page.query_selector_all('[data-ad-slot]')
# Viewability hesapla
for ad in ad_elements:
box = ad.bounding_box()
if box and box['height'] > 0:
print(f"Ad visible: {box}")
# Ekran görüntüsü al
page.screenshot(path='ad_verification.png')
browser.close()
3. Doğrulama ve Kurallar Motoru
Headless browser'dan toplanan veriler, bir kurallar motorundan geçiriliyor:
- Domain Doğrulama: Sayfa URL'si ile rapor edilen domain eşleşiyor mu?
- Geo Doğrulama: IP coğrafyası ile hedeflenen coğrafya eşleşiyor mu?
- Viewability: Reklam viewport'un en az %50'sinde görünüyor mu?
- Brand Safety: Sayfa içeriği marka için uygun mu?
İki Fraud İmzası Tespit Örneği
Şimdi iki yaygın fraud türünü tespit eden pratik örnekler inceleyelim.
Örnek 1: Domain Spoofing Tespiti
Senaryo: SSP'den gelen rapor, gösterimlerin "premium-news-site.com" adresinde gerçekleştiğini iddia ediyor. Ancak şüpheli bir CPM oranı var. Doğrulama gerekiyor.
import requests
from urllib.parse import urlparse
def detect_domain_spoofing(bid_request_url, reported_domain):
"""
Domain spoofing tespiti:
1. Reklamı gerçek bir residential IP'den yükle
2. Sayfa URL'sini kontrol et
3. Rapor edilen domain ile karşılaştır
"""
proxies = {
'http': 'http://user-country-US:PASSWORD@gate.proxyhat.com:8080',
'https': 'http://user-country-US:PASSWORD@gate.proxyhat.com:8080'
}
# Reklam sayfasını yükle
response = requests.get(bid_request_url, proxies=proxies)
# Gerçek domain'i çıkar
actual_domain = urlparse(response.url).netloc
reported_domain = urlparse(reported_domain).netloc if 'http' in reported_domain else reported_domain
# Karşılaştır
if actual_domain != reported_domain:
return {
'fraud_detected': True,
'fraud_type': 'DOMAIN_SPOOFING',
'reported': reported_domain,
'actual': actual_domain,
'severity': 'HIGH',
'recommendation': 'Bu SSP/envanter kaynağını kara listeye alın'
}
return {
'fraud_detected': False,
'domain': actual_domain
}
# Örnek kullanım
result = detect_domain_spoofing(
'https://ssp.example.com/ad?placement=123',
'premium-news-site.com'
)
print(result)
Bu basit kontrol, domain sahteciliğinin %60-70'ini yakalayabilir. Daha gelişmiş tespit için:
- Sayfa içeriğini analiz et — premium site mi düşük kaliteli site mi?
- Alexa/SimilarWeb verileri ile trafik karşılaştırması yap
- Ads.txt dosyasını kontrol et
Örnek 2: Geo-Fraud Tespiti
Senaryo: Bir kampanya sadece Almanya (DE) için hedeflenmiş. Ancak şüpheli bir şekilde çok yüksek CTR gözleniyor. Reklamların gerçekten Almanya'da gösterilip gösterilmediğini doğrulamak gerekiyor.
import requests
def detect_geo_fraud(ad_tag_url, target_country='DE'):
"""
Geo-fraud tespiti:
1. Hedeflenen ülke için residential proxy kullan
2. Reklamı yükle
3. Farklı coğrafyalardan da dene
4. Yanıtları karşılaştır
"""
results = {}
# Test edilecek ülkeler
test_countries = [target_country, 'US', 'BR', 'IN']
for country in test_countries:
proxies = {
'http': f'http://user-country-{country}:PASSWORD@gate.proxyhat.com:8080',
'https': f'http://user-country-{country}:PASSWORD@gate.proxyhat.com:8080'
}
try:
response = requests.get(ad_tag_url, proxies=proxies, timeout=10)
results[country] = {
'status': response.status_code,
'ad_served': 'ad' in response.text.lower(),
'content_length': len(response.content)
}
except Exception as e:
results[country] = {'error': str(e)}
# Analiz
target_result = results.get(target_country, {})
# Hedef ülkede reklam sunulmuyorsa ama diğer ülkelerde sunuluyorsa
if not target_result.get('ad_served', False):
other_countries_served = [
c for c, r in results.items()
if c != target_country and r.get('ad_served', False)
]
if other_countries_served:
return {
'fraud_detected': True,
'fraud_type': 'GEO_FRAUD',
'target_country': target_country,
'ads_served_in': other_countries_served,
'severity': 'HIGH',
'recommendation': 'Kampanya ayarlarını ve SSP raporlarını inceleyin'
}
return {
'fraud_detected': False,
'geo_results': results
}
Kurum İçi Ad Verification Pipeline'ı Kurmak
Büyük markalar ve ajanslar, vendor'lara bağımlı kalmadan kendi doğrulama sistemlerini kurmak istiyor. İşte adım adım bir yaklaşım.
Mimari Genel Bakış
Bir ad verification pipeline'ı şu bileşenlerden oluşur:
- Proxy Katmanı: Residential proxy servisi (ProxyHat gibi)
- Browser Katmanı: Headless browser cluster'ı (Playwright/Puppeteer)
- İşleme Katmanı: Reklam elementlerini analiz eden işlemci
- Kurallar Motoru: Fraud imzalarını tespit eden mantık
- Depolama ve Raporlama: Sonuçların kaydedildiği ve raporlandığı sistem
Minimum Uygulama
import asyncio
from playwright.async_api import async_playwright
from dataclasses import dataclass
from typing import List, Optional
import json
@dataclass
class AdVerificationResult:
url: str
target_geo: str
actual_domain: str
ads_found: int
viewable_ads: int
fraud_flags: List[str]
screenshot_path: str
class AdVerificationPipeline:
def __init__(self, proxy_host='gate.proxyhat.com', proxy_port=8080):
self.proxy_host = proxy_host
self.proxy_port = proxy_port
async def verify_url(
self,
url: str,
target_geo: str,
target_domain: Optional[str] = None,
username: str = 'USERNAME',
password: str = 'PASSWORD'
) -> AdVerificationResult:
"""
Tek bir URL'yi doğrula
"""
fraud_flags = []
async with async_playwright() as p:
browser = await p.chromium.launch(
proxy={
'server': f'http://{self.proxy_host}:{self.proxy_port}',
'username': f'user-country-{target_geo}',
'password': password
}
)
page = await browser.new_page()
# Sayfayı yükle
await page.goto(url, wait_until='networkidle')
# Domain kontrolü
actual_domain = page.url.split('/')[2]
if target_domain and actual_domain != target_domain:
fraud_flags.append(f'DOMAIN_MISMATCH: expected {target_domain}, got {actual_domain}')
# Reklam elementlerini bul
ad_frames = page.frames
ads_found = len([f for f in ad_frames if 'ad' in f.url.lower()])
# Viewability kontrolü
viewable_ads = 0
for frame in ad_frames:
if 'ad' in frame.url.lower():
try:
element = await frame.query_selector('body')
if element:
box = await element.bounding_box()
if box and box['height'] > 50: # Minimum görünürlük
viewable_ads += 1
except:
pass
# Ekran görüntüsü
screenshot_path = f'/tmp/verification_{target_geo}_{hash(url)}.png'
await page.screenshot(path=screenshot_path)
await browser.close()
return AdVerificationResult(
url=url,
target_geo=target_geo,
actual_domain=actual_domain,
ads_found=ads_found,
viewable_ads=viewable_ads,
fraud_flags=fraud_flags,
screenshot_path=screenshot_path
)
# Kullanım
async def main():
pipeline = AdVerificationPipeline()
# Birden fazla geo'dan test et
results = await asyncio.gather(
pipeline.verify_url('https://example.com/ad-page', 'US', 'premium-site.com'),
pipeline.verify_url('https://example.com/ad-page', 'DE', 'premium-site.com'),
pipeline.verify_url('https://example.com/ad-page', 'GB', 'premium-site.com')
)
for result in results:
if result.fraud_flags:
print(f"FRAUD DETECTED for {result.target_geo}: {result.fraud_flags}")
else:
print(f"Clean for {result.target_geo}: {result.viewable_ads}/{result.ads_found} viewable")
asyncio.run(main())
Ölçeklendirme Değerlendirmeleri
Kurum içi bir sistem kurarken ölçeklendirme kritik:
- Eşzamanlılık: Proxy servisinizin eşzamanlı bağlantı limitini kontrol edin. ProxyHat gibi servisler genellikle hesap başına yüksek eşzamanlılık sunuyor.
- Hız Sınırları: Hedef sitelerin rate limit'lerini aşmamak için istekleri dağıtın.
- Maliyet: Her doğrulama birim maliyeti var — tüm gösterimleri değil, örnekleme yapın.
- Veri Saklama: Ekran görüntüleri ve log'lar hızlıca büyür — bir saklama politikası belirleyin.
Vendor vs Kurum İçi: Değerlendirme Kontrol Listesi
Ad verification için vendor kullanmak mı yoksa kurum içi sistem kurmak mı daha iyi? İşte karar vermenize yardımcı olacak bir kontrol listesi:
| Kriter | Vendor (IAS, DV, MOAT) | Kurum İçi |
|---|---|---|
| Kurulum Hızı | Hızlı — haftalar | Yavaş — aylar |
| Başlangıç Maliyeti | Düşük — aylık ücret | Yüksek — geliştirme + altyapı |
| Özelleştirme | Sınırlı — vendor'ın sundukları | Tam — ihtiyaca göre |
| Veri Sahipliği | Sınırlı — vendor'da kalır | Tam — kendi sisteminizde |
| Entegrasyon | Geniş — DSP/SSP entegrasyonları | Manuel — her entegrasyon için çalışma |
| Proxy Ağı | Geniş — global coverage | Sizin kurduğunuz kadar |
| Uzmanlık Gereksinimi | Düşük — vendor halleder | Yüksek — iç uzmanlık şart |
| Uzun Vadeli Maliyet | Değişken — hacim bazlı | Öngörülebilir — sabit + proxy maliyeti |
Hangi Durumda Vendor Seçmeli?
- Ekibinizde ad fraud uzmanlığı yok
- Hızlı başlangıç gerekiyor
- Global kampanyalar için geniş coğrafi kapsam lazım
- Standart fraud tespit yeterli
- Entegrasyon kolaylığı önemli
Hangi Durumda Kurum İçi Seçmeli?
- Özel fraud imzaları tespit etmeniz gerekiyor
- Veri gizlliği kritik (örneğin finans sektörü)
- Yüksek hacim — vendor maliyetleri çok yüksek
- Mevcut bir data engineering ekibiniz var
- Özel entegrasyonlar gerekiyor (örneğin proprietary DSP)
Hibrit Yaklaşım
Birçok kurum, hibrit yaklaşımı tercih ediyor:
- Vendor: Standart IVT tespiti, viewability ölçümü, brand safety
- Kurum İçi: Özel fraud imzaları, derinlemesine analiz, özel raporlama
Bu yaklaşım, her iki dünyanın avantajlarını sunuyor — vendor'ın geniş ağı ve uzmanlığı ile kurum içi sistemin özelleştirme ve veri sahipliği avantajları.
En İyi Uygulamalar ve Öneriler
Proxy Seçimi
- Residential proxy kullanın: Ad verification için datacenter proxy'ler tespit edilebilir ve engellenebilir.
- Coğrafi hedefleme yapın: Her pazar için o pazardan residential IP kullanın.
- Rotasyon stratejisi belirleyin: Aynı oturum için sticky session, farklı oturumlar için rotation.
- Kaliteli servis seçin: Ucuz proxy servisleri genellikle düşük kaliteli IP'ler sunar — tespit riski artar.
Örnekleme Stratejisi
Tüm reklam gösterimlerini doğrulamak maliyetli ve gereksiz. Akıllı örnekleme yapın:
- Yüksek riskli envanter: %10-20 örnekleme
- Yeni yayıncılar: %20-30 örnekleme
- Güvenilir yayıncılar: %1-5 örnekleme
- Şüpheli activity: %50-100 örnekleme
Yanıt Süresi ve Otomasyon
Fraud tespit ettiniz — sonra ne olacak?
- Otomatik bloklama: Yüksek güvenilir fraud tespitlerinde SSP/publisher'ı otomatik blokla.
- Manuel inceleme: Orta güvenilir tespitlerde uzman incelemesi.
- Trend analizi: Düşük güvenilir tespitleri trend için kaydet.
Yasal ve Etik Değerlendirmeler
Ad verification yaparken:
- Hedef sitelerin Terms of Service'ini ihlal etmeyin — çoğu site bot'ları yasaklıyor ancak ad verification genellikle yasal olarak korunuyor.
- GDPR, CCPA gibi gizlilik düzenlemelerine uyun.
- Kişisel veri toplamayın — sadece reklam doğrulaması yapın.
- Sonuçları doğru raporlayın — yanlış pozitifler yayıncılara zarar verebilir.
Sonuç ve Sonraki Adımlar
Ad fraud, dijital reklamcılığın en büyük tehditlerinden biri olmaya devam ediyor. Her yıl onlarca milyar dolar sahtekarlığa kurshan gidiyor. Ancak doğru araçlar ve yaklaşımlarla, bu kayıpların önemli bir kısmı önlenebilir.
Residential proxy'ler, ad verification'ın temel taşı. Gerçek kullanıcı IP'lerinden, gerçek coğrafyalarda, gerçek tarayıcılarda reklamları görme yeteneği, sahtekarlığı tespit etmenin en güvenilir yolu.
İster bir vendor ile çalışın ister kurum içi sistem kurun, önemli olan başlamak. Küçük başlayın — birkaç önemli kampanyayı izleyin, fraud imzalarını öğrenin, yavaş yavaş kapsamı genişletin.
Sonraki adımlar:
- Mevcut fraud oranınızı değerlendirin — vendor raporlarını inceleyin.
- En yüksek riskli envanteri belirleyin.
- Bir residential proxy servisi ile pilot proje başlatın.
- Temel fraud tespit akışlarını kurun.
- Sonuçları analiz edin ve kapsamı genişletin.
ProxyHat, ad verification için gerekli olan global residential proxy ağını sunuyor. Fiyatlandırma sayfasını inceleyerek başlayabilir veya lokasyon sayfasından desteklenen ülkeleri görebilirsiniz.
Key Takeaways:
- Ad fraud, yılda 100 milyar doları aşan küresel bir sorun — görmezden gelemeyeceğiniz bir maliyet.
- Residential proxy'ler, "kullanıcının gördüğünü görmek" için kritik — datacenter proxy'ler yeterli değil.
- Domain spoofing ve geo-fraud en yaygın türler — her ikisi de residential IP'lerle tespit edilebilir.
- Kurum içi sistem, özelleştirme ve veri sahipliği sunuyor; vendor ise hız ve geniş kapsam sağlıyor.
- Hibrit yaklaşım çoğu kurum için optimal — vendor standart tespit, kurum içi özel imzalar için.
- Örnekleme ile maliyeti kontrol altında tutun — her gösterimi doğrulamak gerekmez.






