Analytics API Dökümantasyonu

Node.js, PostgreSQL, ClickHouse ve Redis mimarili; Kurumsal Analitik, Çoklu Metrik ve Müşteri Profil Servisi.

Genel Bakış

Bu sistem, yüksek trafikli web sitelerinden analitik verilerini toplamak, Redis kuyruğu üzerinde performanslı şekilde biriktirmek ve asenkron batch olarak ClickHouse veritabanına aktarmak üzere tasarlanmıştır.

Mimari Bileşenler

  • Node.js (Express): Modüler yapılı API katmanı, Çoklu Metrik Paralel İşleme & Rate Limiter.
  • PostgreSQL: Domain kayıtları ve ilişkisel veriler.
  • ClickHouse: Yüksek hacimli analitik olay logları (Parameterized queries, TTL & Partitioning).
  • Redis: Gelen verileri kuyrukta (LPOP/RPUSH) tutarak batch işleme ve canlı (realtime) takip alanı.

Kurulum & .env Ayarları

Portlar ve veritabanı bağlantı bilgileri .env dosyası üzerinden dinamik olarak değiştirilebilir.

PORT=5400
NODE_ENV=production
ADMIN_API_KEY=a8f9d7c6b5e4f3a210987654321abcdef

Tracker.js Entegrasyonu

Analiz edilmek istenen sitelerin <head> veya <body> etiketleri arasına aşağıdaki betik eklenmelidir:

<script 
  src="http://SUNUCU_IP:5400/tracker.js" 
  data-tracker-id="YOUR_DOMAIN_UUID">
</script>

SDK Yardımcı Metotları

// Müşteri Kimlik Tanımlama (Identify)
window.analyticsTracker.identify('user_98412');

// Müşteri Çıkış Yapma
window.analyticsTracker.logout();

// Site İçi Arama Takibi
window.analyticsTracker.trackSearch('kablosuz kulaklık', 14);

// API Yanıt Süresi Takibi
window.analyticsTracker.trackApiLatency('/api/v1/orders', 120, 200);

// E-Ticaret Gelir Gönderimi
window.analyticsTracker.trackRevenue(499.90);

Sayfalamalı Domain Listesi (Laravel Paginate) GET

Sistemdeki tüm kayıtlı domainleri Laravel tarzı sayfalanmış (paginated) JSON yapısında listeler. Arama (`search`), sayfa no (`page`) ve sayfa başına adet (`per_page`) parametrelerini destekler.

GET /api/domains?page=1&per_page=15&search=example (Header: x-api-key: YOUR_ADMIN_KEY)

{
  "current_page": 1,
  "data": [
    {
      "id": "e4b9d031-6b21-4f9e-9d22-123456789abc",
      "domain_name": "example.com",
      "enabled_metrics": ["*"],
      "created_at": "2026-08-30T18:12:00.000Z"
    }
  ],
  "first_page_url": "http://localhost:5400/api/domains?page=1&per_page=15",
  "from": 1,
  "last_page": 1,
  "last_page_url": "http://localhost:5400/api/domains?page=1&per_page=15",
  "next_page_url": null,
  "path": "http://localhost:5400/api/domains",
  "per_page": 15,
  "prev_page_url": null,
  "to": 1,
  "total": 1
}

Domain Ekleme POST

Yeni bir domain ve opsiyonel domain bazlı izin verilen metrikler (Feature Toggles) tanımlar.

POST /api/domains (Header: x-api-key: YOUR_ADMIN_KEY)

// Tüm metrikler aktif varsayılan domain ekleme:
{ "domain_name": "example.com" }

// Sadece belirli metriklerin takip edildiği kısıtlı domain ekleme:
{
  "domain_name": "blogsite.com",
  "enabled_metrics": ["overview", "paths", "referrers", "device_types", "realtime"]
}

Domain Metriklerini Güncelleme PUT

Bir domain'in izin verilen aktif metrik listesini günceller.

PUT /api/domains/:id (Header: x-api-key: YOUR_ADMIN_KEY)

{
  "enabled_metrics": ["overview", "paths", "customer_lifetime_value", "top_js_errors"]
}

Domain Silme DELETE

DELETE /api/domains/:id (Header: x-api-key: YOUR_ADMIN_KEY)

Domain Veri Yeniden Atama & Otomatik Düzeltme POST

Karışmış veya yanlış domain ID'si ile kaydedilmiş geçmiş analitik olay verilerini düzeltir ve istenen domain ID'sine aktarır.

POST /api/domains/reassign-events (Header: x-api-key: YOUR_ADMIN_KEY)

// Otomatik karışan domain verisi düzeltme:
{ "run_auto_fix": true }

// Özel domain transferi:
{
  "from_domain_id": "1127721e-abe7-4ec8-abe0-76021980b859",
  "to_domain_id": "186d7202-3c70-40a6-a886-d67748b89ffe",
  "condition": "path LIKE '%urun-mx%' OR referrer LIKE '%mobixsys.com%'"
}

Domain Geçmiş Analitik Verisi Temizleme (Purge) POST

Domain tanımını ve PostgreSQL kaydını silmeden, istenen domain'e ait geçmiş analitik log verilerini (ClickHouse events) tamamen veya belirli tarih aralığında siler.

POST /api/domains/clear-events veya POST /api/domains/:id/clear-events (Header: x-api-key: YOUR_ADMIN_KEY)

// 1. Tüm geçmişi temizleme (Tüm zamanlar):
{ "domain_id": "186d7202-3c70-40a6-a886-d67748b89ffe" }

// 2. Belirli tarih aralığındaki verileri temizleme:
{
  "domain_id": "186d7202-3c70-40a6-a886-d67748b89ffe",
  "start_date": "2026-08-01 00:00:00",
  "end_date": "2026-08-15 23:59:59"
}

Veri Gönderimi (Track) POST

POST /api/track (Automated by tracker.js)

İstatistik Çekme (Stats) GET

Tarih aralığı ve istenen metrik parametreleri ile analitik verilerini sorgular.

GET /api/stats (Header: x-api-key: YOUR_ADMIN_KEY)

Query Parametreleri

Parametre Zorunlu mu? Açıklama
domain_id Evet Sorgulanacak domain UUID bilgisi.
start_date Evet Başlangıç tarihi (Örn: 2026-08-01 00:00:00)
end_date Evet Bitiş tarihi (Örn: 2026-08-31 23:59:59)
metric Evet İstenen istatistik boyutu (Tekli veya çoklu virgülle: overview,paths).
user_type Hayır Kullanıcı segmentasyonu filtresi (logged_in | guest | all).
user_id Hayır Belirli bir müşteriye özel filtreleme (Örn: user_98412).
country_code Hayır Sadece metric=cities olduğunda belirli bir ülkeye filtrelemek için verilir (Örn: TR).

Çoklu Metrik Sorgulama (Multi-Metric Batching)

Dashboard panellerinde tek bir HTTP isteği ile birden fazla metriği paralel çekmek için metrik isimlerini virgülle ayırarak gönderebilirsiniz:

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=overview,paths,device_types,referrers

Kod Örnekleri (cURL / Fetch / Axios / Laravel HTTP)

API endpoint'lerini projelerinize kolayca entegre edebilmeniz için hazır kod örnekleri:

1. cURL İstek Örneği

curl -X GET "http://localhost:5400/api/stats?domain_id=a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11&start_date=2026-08-01%2000:00:00&end_date=2026-08-31%2023:59:59&metric=overview,paths,device_types&user_type=logged_in" \
  -H "x-api-key: a8f9d7c6b5e4f3a210987654321abcdef"

2. JavaScript (Fetch API) Örneği

const response = await fetch(
  'http://localhost:5400/api/stats?domain_id=a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=overview,paths,device_types&user_type=logged_in',
  {
    method: 'GET',
    headers: {
      'x-api-key': 'a8f9d7c6b5e4f3a210987654321abcdef'
    }
  }
);
const result = await response.json();
console.log(result.data);

3. Axios (Node.js / Vue / React) Örneği

const axios = require('axios');

const response = await axios.get('http://localhost:5400/api/stats', {
  params: {
    domain_id: 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11',
    start_date: '2026-08-01 00:00:00',
    end_date: '2026-08-31 23:59:59',
    metric: 'overview,paths,device_types',
    user_type: 'logged_in' // Opsiyonel: logged_in | guest
  },
  headers: {
    'x-api-key': 'a8f9d7c6b5e4f3a210987654321abcdef'
  }
});
console.log(response.data);

4. Laravel HTTP Client (PHP) Örneği

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'x-api-key' => 'a8f9d7c6b5e4f3a210987654321abcdef',
])->get('http://localhost:5400/api/stats', [
    'domain_id'  => 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11',
    'start_date' => '2026-08-01 00:00:00',
    'end_date'   => '2026-08-31 23:59:59',
    'metric'     => 'overview,paths,device_types',
    'user_type'  => 'logged_in', // Opsiyonel
]);

$stats = $response->json();
print_r($stats);

Dönüşüm Hunisi (Funnel) POST

POST /api/stats/funnel

{
  "domain_id": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
  "start_date": "2026-08-01 00:00:00",
  "end_date": "2026-08-31 23:59:59",
  "steps": ["/", "/urunler", "/sepet", "/odeme_basarili"]
}

Unutulma Hakkı (KVKK / GDPR) POST

POST /api/stats/forget-visitor

{
  "domain_id": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
  "visitor_id": "v_abc123xyz"
}

Giriş Yapmış Müşteri vs Misafir Kullanıcı Analizi

Tüm metrikleri user_type=logged_in veya user_type=guest parametresi ile filtreleyebilirsiniz.

metric=user_status_breakdown GET

Giriş yapmış müşteriler ile misafir kullanıcıların sayısal ve yüzdesel dağılımı.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=user_status_breakdown

Yanıt Örneği

{ "data": [ { "dimension": "Guest Users", "value": 6840 }, { "dimension": "Logged-in Users", "value": 3120 } ] }

metric=top_logged_in_users GET

En çok etkileşimde bulunan kayıtlı müşterilerin sıralı listesi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=top_logged_in_users

Yanıt Örneği

{ "data": [ { "dimension": "user_98412", "value": 142, "total_revenue": 1250.5, "last_seen": "2026-08-30 16:45:10" } ] }

metric=user_profile GET

Bir müşterinin (`user_98412`) üzerine tıklandığında onun tüm oturum, harcama, cihaz ve son hareket geçmişini getirir. user_id zorunludur.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=user_profile&user_id=user_98412

Yanıt Örneği

{ "data": [ { "summary": { "user_id": "user_98412", "total_events": 142, "total_spent": 1250.5 }, "recent_activities": [...] } ] }

metric=visitor_profile GET

Giriş yapmamış herhangi bir misafirin (`visitor_id=v_3k9x0a1b2c3...`) tüm oturum, IP, şehir, ülke, cihaz ve sayfa gezinti geçmişini kronolojik zaman çizelgesiyle getirir. visitor_id zorunludur.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=visitor_profile&visitor_id=v_3k9x0a1b2c3

Yanıt Örneği

{
  "data": [
    {
      "summary": {
        "profile_id": "v_3k9x0a1b2c3",
        "total_events": 14,
        "total_sessions": 3,
        "first_seen": "2026-08-15 14:02:10",
        "last_seen": "2026-08-30 21:40:05",
        "last_device": "Desktop",
        "last_browser": "Chrome",
        "last_country": "TR",
        "last_city": "Istanbul",
        "last_ip": "176.240.x.x"
      },
      "recent_activities": [
        { "event_name": "pageview", "path": "/urun-mx-mini", "prev_path": "/", "active_duration": 120, "city": "Istanbul", "created_at": "2026-08-30 21:40:05" }
      ]
    }
  ]
}

metric=customer_lifetime_value GET

Kayıtlı müşterilerin kaydoldukları andan itibaren ürettikleri toplam LTV cirosu ve sipariş adetleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=customer_lifetime_value

Yanıt Örneği

{ "data": [ { "dimension": "user_98412", "value": 2450.0, "total_orders": 8, "customer_since": "2026-01-10 12:00:00" } ] }

metric=cart_abandonment_rate GET

Sepete ekleme olayları ile satın almayı tamamlayanların oranından sepet terk yüzdesini hesaplar.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=cart_abandonment_rate

Yanıt Örneği

{ "data": [ { "total_cart_additions": 1200, "total_checkouts": 450, "cart_abandonment_rate": 62.5 } ] }

metric=top_revenue_paths GET

En çok satış cirosu üreten sayfa/ürün yolları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=top_revenue_paths

Yanıt Örneği

{ "data": [ { "dimension": "/urunler/laptop-pro", "value": 15800.0 } ] }

metric=revenue_overview GET

Toplam ciro, sipariş sayısı ve Ortalama Sepet Tutarı (AOV).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=revenue_overview

Yanıt Örneği

{ "data": [ { "total_revenue": 45280.5, "total_orders": 182, "avg_order_value": 248.79 } ] }

metric=retention_cohorts GET

Haftalık kullanıcı sadakat ve geri gelme (Retention Cohort) analizi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=retention_cohorts

Yanıt Örneği

{ "data": [ { "cohort_week": "2026-08-03 00:00:00", "initial_visitors": 450, "week_0": 450, "week_1": 180, "week_2": 95 } ] }

metric=active_time_on_page GET

Kullanıcının sayfada gerçek etkileşimde bulunduğu (fare/scroll/tuş) **odaklanma süresi (Focus Time)**.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=active_time_on_page

Yanıt Örneği

{ "data": [ { "dimension": "/blog/rehber", "value": 84.5 } ] }

metric=bounce_by_source GET

Pazarlama kanallarına veya referrer kaynaklarına göre hemen çıkma oranları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=bounce_by_source

Yanıt Örneği

{ "data": [ { "dimension": "google_cpc", "value": 28.5 }, { "dimension": "instagram", "value": 54.2 } ] }

metric=read_completion_rate GET

Blog ve makale sayfalarında kullanıcıların içeriği %100 okuma tamamlanma yüzdesi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=read_completion_rate

Yanıt Örneği

{ "data": [ { "dimension": "/blog/yaz-indirimleri", "value": 78.4 } ] }

metric=site_search_keywords GET

Sitenin arama kutusuna en çok yazılan kelimelerin sıralaması.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=site_search_keywords

Yanıt Örneği

{ "data": [ { "dimension": "kablosuz kulaklık", "value": 412 }, { "dimension": "akıllı saat", "value": 290 } ] }

metric=zero_result_searches GET

Aranıp da sitede 0 sonuç bulunan arama kelimelerinin listesi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=zero_result_searches

Yanıt Örneği

{ "data": [ { "dimension": "oyuncu kulaklığı x1", "value": 84 } ] }

metric=next_page_after GET

Kullanıcıların bir önceki sayfadan sonra en çok tıkladığı devam sayfaları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=next_page_after

Yanıt Örneği

{ "data": [ { "dimension": "/sepet", "value": 1420 }, { "dimension": "/odeme", "value": 850 } ] }

metric=user_flows GET

Ziyaretçilerin en çok tercih ettiği 2-3 adımlı sayfa geçiş rotaları (Akış Ağacı).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=user_flows

Yanıt Örneği

{ "data": [ { "dimension": "/ -> /urunler -> /sepet", "value": 3120 } ] }

metric=file_downloads GET

İndirilen dosya (.pdf, .zip vb.) tıklamaları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=file_downloads

Yanıt Örneği

{ "data": [ { "dimension": "/katalog-2026.pdf", "value": 412 } ] }

metric=scroll_depths GET

Sayfa kaydırma derinlikleri (%25, %50, %75, %100).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=scroll_depths

Yanıt Örneği

{ "data": [ { "dimension": "50% Scroll", "value": 3100 } ] }

metric=top_js_errors GET

Frontend JavaScript hata istisnaları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=top_js_errors

Yanıt Örneği

{ "data": [ { "dimension": "Uncaught TypeError: Cannot read property 'id' of undefined", "value": 142 } ] }

metric=rage_clicks GET

Öfke tıklamaları yapılan sayfaların listesi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=rage_clicks

Yanıt Örneği

{ "data": [ { "dimension": "/odeme", "value": 89 } ] }

metric=form_dropoffs GET

Terk edilen form kimlikleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=form_dropoffs

Yanıt Örneği

{ "data": [ { "dimension": "checkout_form", "value": 240 } ] }

metric=error_pages_404 GET

Kırık / 404 sayfalarının listesi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=error_pages_404

Yanıt Örneği

{ "data": [ { "dimension": "/eski-sayfa", "value": 213 } ] }

metric=api_latency_breakdown GET

Frontend API uç noktalarının yanıt süreleri (ms) ve HTTP 5xx hataları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=api_latency_breakdown

Yanıt Örneği

{ "data": [ { "dimension": "/api/v1/orders", "value": 240, "error_count": 3 } ] }

metric=slowest_pages GET

En yavaş açılan ilk 50 sayfa.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=slowest_pages

Yanıt Örneği

{ "data": [ { "dimension": "/raporlar/detay", "value": 4120 } ] }

metric=avg_load_times GET

Sayfa bazında ortalama yüklenme süresi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=avg_load_times

Yanıt Örneği

{ "data": [ { "dimension": "/urunler", "value": 1240 } ] }

metric=core_web_vitals GET

LCP, FID, CLS, INP ve TTFB metrik ortalamaları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=core_web_vitals

Yanıt Örneği

{ "data": [ { "avg_lcp_sec": 1.45, "avg_fid_ms": 12, "avg_cls_score": 0.015, "avg_inp_ms": 42, "avg_ttfb_ms": 110 } ] }

metric=period_comparison GET

Seçilen dönemin önceki eşit dönemle % karşılaştırması.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=period_comparison

Yanıt Örneği

{ "data": [ { "current": { "total_pageviews": 15420 }, "previous": { "total_pageviews": 12100 }, "change_percentage": { "total_pageviews": 27.44 } } ] }

metric=paths GET

En çok gezilen sayfalar.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=paths

Yanıt Örneği

{ "data": [ { "dimension": "/urunler/laptop", "value": 3410 }, { "dimension": "/", "value": 2890 } ] }

metric=referrers GET

Ziyaretçilerin geldiği kaynaklar.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=referrers

Yanıt Örneği

{ "data": [ { "dimension": "https://google.com", "value": 5210 } ] }

metric=entry_pages GET

Giriş sayfaları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=entry_pages

Yanıt Örneği

{ "data": [ { "dimension": "/", "value": 4100 } ] }

metric=exit_pages GET

Çıkış sayfaları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=exit_pages

Yanıt Örneği

{ "data": [ { "dimension": "/odeme_basarili", "value": 950 } ] }

metric=goals GET

Özel etkinlikler.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=goals

Yanıt Örneği

{ "data": [ { "dimension": "form_gonderildi", "value": 312 } ] }

metric=realtime GET

Canlı online ziyaretçi sayısı.

GET /api/stats?domain_id=UUID&metric=realtime

Yanıt Örneği

{ "data": [ { "dimension": "online_users", "value": 47 } ] }

metric=hourly_breakdown GET

Günün saatlerine göre dağılım.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=hourly_breakdown

Yanıt Örneği

{ "data": [ { "dimension": "14:00", "value": 1840 } ] }

metric=day_of_week GET

Haftanın günlerine göre dağılım.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=day_of_week

Yanıt Örneği

{ "data": [ { "dimension": "Pazartesi", "value": 3200 } ] }

metric=utms GET

UTM Kaynakları (utm_source).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=utms

Yanıt Örneği

{ "data": [ { "dimension": "google", "value": 4100 } ] }

metric=utm_mediums GET

UTM Mecraları (utm_medium).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=utm_mediums

Yanıt Örneği

{ "data": [ { "dimension": "cpc", "value": 2800 } ] }

metric=utm_campaigns GET

UTM Kampanyaları (utm_campaign).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=utm_campaigns

Yanıt Örneği

{ "data": [ { "dimension": "yaz_indirimleri", "value": 1540 } ] }

metric=utm_terms GET

UTM Kelimeleri (utm_term).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=utm_terms

Yanıt Örneği

{ "data": [ { "dimension": "ucuz_laptop", "value": 420 } ] }

metric=utm_contents GET

UTM İçerikleri (utm_content).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=utm_contents

Yanıt Örneği

{ "data": [ { "dimension": "banner_top", "value": 310 } ] }

metric=device_types GET

Desktop, Mobile, Tablet dağılımı.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=device_types

Yanıt Örneği

{ "data": [ { "dimension": "Desktop", "value": 6200 }, { "dimension": "Mobile", "value": 5100 } ] }

metric=screen_resolutions GET

Ekran çözünürlükleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=screen_resolutions

Yanıt Örneği

{ "data": [ { "dimension": "1920x1080", "value": 3200 } ] }

metric=screen_types GET

Ekran türü dağılımı.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=screen_types

Yanıt Örneği

{ "data": [ { "dimension": "Desktop Screen", "value": 6200 } ] }

metric=browser_names GET

Tarayıcı isimleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=browser_names

Yanıt Örneği

{ "data": [ { "dimension": "Chrome", "value": 7100 } ] }

metric=browser_versions GET

Tarayıcı sürümleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=browser_versions

Yanıt Örneği

{ "data": [ { "dimension": "Chrome 128.0", "value": 5400 } ] }

metric=browser_languages GET

Tarayıcı dilleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=browser_languages

Yanıt Örneği

{ "data": [ { "dimension": "tr-TR", "value": 5800 } ] }

metric=browser_timezones GET

Saat dilimleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=browser_timezones

Yanıt Örneği

{ "data": [ { "dimension": "Europe/Istanbul", "value": 4900 } ] }

metric=operating_systems GET

İşletim sistemleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=operating_systems

Yanıt Örneği

{ "data": [ { "dimension": "Windows", "value": 5400 }, { "dimension": "Android", "value": 3100 } ] }

metric=os_versions GET

İşletim sistemi sürümleri.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=os_versions

Yanıt Örneği

{ "data": [ { "dimension": "Windows 10.0", "value": 4200 } ] }

metric=themes GET

Dark / Light tema tercihi.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=themes

Yanıt Örneği

{ "data": [ { "dimension": "dark", "value": 6200 }, { "dimension": "light", "value": 4800 } ] }

metric=network_connection_types GET

İnternet bağlantı hız dağılımı (4G, 5G, Wi-Fi).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=network_connection_types

Yanıt Örneği

{ "data": [ { "dimension": "4g", "value": 6120 }, { "dimension": "wifi", "value": 3410 } ] }

metric=continents GET

Kıta dağılımı.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=continents

Yanıt Örneği

{ "data": [ { "dimension": "Europe", "value": 7800 } ] }

metric=countries GET

Ülke dağılımı.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=countries

Yanıt Örneği

{ "data": [ { "dimension": "TR", "value": 4820 } ] }

metric=cities GET

Şehir dağılımı (country_code filtreli).

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=cities&country_code=TR

Yanıt Örneği

{ "data": [ { "dimension": "Istanbul", "value": 1420 } ] }

metric=visitor_types GET

Yeni vs Geri dönen ziyaretçi dağılımı.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=visitor_types

Yanıt Örneği

{ "data": [ { "dimension": "New Visitor", "value": 3140 }, { "dimension": "Returning Visitor", "value": 1680 } ] }

metric=pages_per_session GET

Oturum başına sayfa derinliği.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=pages_per_session

Yanıt Örneği

{ "data": [ { "dimension": "1 Page", "value": 2800 }, { "dimension": "2-3 Pages", "value": 1900 } ] }

metric=visit_durations GET

Oturum süre aralıkları.

GET /api/stats?domain_id=UUID&start_date=2026-08-01 00:00:00&end_date=2026-08-31 23:59:59&metric=visit_durations

Yanıt Örneği

{ "data": [ { "dimension": "1-3 min", "value": 2100 } ] }

Cookieless / GDPR & KVKK Uyumlu Mod

Çerez (cookie) ve yerel depolama (localStorage/sessionStorage) izni almadan, %100 gizlilik odaklı ve GDPR/KVKK uyumlu analitik takibi yapmak için script etiketinize data-cookieless="true" özniteliğini eklemeniz yeterlidir.

<script 
  src="http://SUNUCU_IP:5400/tracker.js" 
  data-tracker-id="YOUR_DOMAIN_UUID"
  data-cookieless="true">
</script>

🛡️ Cookieless Mod Özellikleri:

  • Sıfır Çerez Kaydı: Ziyaretçinin tarayıcısında hiçbir çerez, localStorage veya sessionStorage verisi oluşturulmaz.
  • Anonim Takip: visitor_id ve session_id değerleri otomatik olarak null olarak iletilir.
  • Aydınlatma Metni Ziyaretçi İzni Gerektirmez: Kişisel veri işlenmediği için çerez onay banner'larına (Cookie Banner) ihtiyaç duymadan sayfa gösterimleri ve metrikler toplanır.

Backend SDK'lar (Node.js & Python)

Sunucu taraflı (Server-Side) etkinlik takibi, arka plan işleri (cron), ödeme/sipariş olayları veya API webhook'ları için hazırlanan hafif kütüphaneleri kullanabilirsiniz.

1. Node.js SDK (sdk/node)

Node.js projelerinizde sıfır dış bağımlılık (dahili http/https modülleri) ile çalışır.

const AnalyticsClient = require('./sdk/node');

// Client Başlatma
const analytics = new AnalyticsClient({
  domainId: 'YOUR_DOMAIN_UUID',
  endpoint: 'http://localhost:5400/api/track' // Opsiyonel (Varsayılan: localhost:5400)
});

// Etkinlik Gönderimi (Async/Await)
async function trackServerEvent() {
  try {
    await analytics.track('order_completed', {
      path: '/checkout/success',
      user_id: 'usr_8921',
      visitor_id: 'v_8921',
      utm_source: 'google',
      utm_campaign: 'yaz_indirimi'
    });
    console.log('Sunucu etkinliği başarıyla gönderildi.');
  } catch (error) {
    console.error('Etkinlik gönderilemedi:', error.message);
  }
}

2. Python SDK (sdk/python)

Django, Flask, Fast-API veya Python scriptlerinizde harici paket yüklemeden (dahili urllib) kullanabilirsiniz.

from sdk.python.analytics import AnalyticsClient

# Client Başlatma
analytics = AnalyticsClient(
    domain_id="YOUR_DOMAIN_UUID",
    endpoint="http://localhost:5400/api/track"  # Opsiyonel
)

# Etkinlik Gönderimi
success = analytics.track("payment_failed", {
    "path": "/api/payment/process",
    "user_id": "usr_4431",
    "operating_system": "Linux",
    "device_type": "Server",
    "utm_source": "newsletter"
})

if success:
    print("Python SDK ile etkinlik kaydı oluşturuldu.")

Desteklenen Tüm Metrikler Grid (Tüm Değerler)

metric parametresi için kullanabileceğiniz 58 metrik değerinin tüm listesi:

👤 Kullanıcı & Misafir Segmentasyonu

user_status_breakdown
top_logged_in_users
user_profile
visitor_profile

💼 Kurumsal & Gelir Metrikleri

customer_lifetime_value
cart_abandonment_rate
top_revenue_paths
revenue_overview
retention_cohorts

🎯 Etkileşim & Davranış

active_time_on_page
bounce_by_source
read_completion_rate
site_search_keywords
zero_result_searches
next_page_after
user_flows
outbound_links
file_downloads
scroll_depths

⚠️ Hata & Performans

top_js_errors
rage_clicks
form_dropoffs
error_pages_404
api_latency_breakdown
slowest_pages
avg_load_times
core_web_vitals

📊 Trafik & Genel Bakış

overview
period_comparison
paths
referrers
entry_pages
exit_pages
goals
realtime
visitor_types
pages_per_session
visit_durations

⏰ Zaman Bazlı

daily_trends
hourly_breakdown
day_of_week

📣 Kampanya & UTM

utms
utm_mediums
utm_campaigns
utm_terms
utm_contents

💻 Cihaz, Tarayıcı & Ağ

device_types
screen_resolutions
screen_types
browser_names
browser_versions
browser_languages
browser_timezones
operating_systems
os_versions
themes
network_connection_types

🌍 Coğrafi Konum

continents
countries
cities