Google Ads — AdsPing dashboard setup

Sıfırdan üretime: AdsPing'e giriş yaptıktan sonra Google Ads conversion tracking'i bağlamak için adım adım rehber. ~5 dakika.

Bu sayfa AdsPing tarafındaki adımları anlatır. Google Ads tarafında Conversion ID / Label bulma için Google Ads — manual setup sayfasına bakın.

Önce

  • AdsPing hesabınız olmalı (yoksa kayıt olun)
  • Google Ads tarafında en az bir conversion action tanımlı olmalı (Goals → Conversions → Summary)
  • Sitenizin alan adı (örn. acme.com)
İki path paralel çalışır: AdsPing hem server-side Conversions API'ye hem browser-side gtag'e fire eder. Google ikisini gclid + timestamp ile dedup eder, bu yüzden çift sayım yaşanmaz. Server-side ad-blocker'sız visitor'lar için daha net attribution sağlar, browser-side ise her duruma karşı garantidir.

⚠ Conversion kategorisi seçimi — yanlış kategori = sayılmaz

Google Ads'te yeni conversion oluştururken seçtiğin kategori, conversion'ın kaynak türünü kilitler. Yanlış kategori seçersen AdsPing'den (gtag fire) gönderdiğin event'ler Google tarafından sayılmaz — gözle görünür hiçbir hata olmaz, sadece Conversions Summary'de 0,00 kalır.

Google Ads, conversion'ları iki kaynak türünden birine atar:

Dönüşüm kaynağıTetikleyiciAdsPing ile çalışır mı?
Web sitesiSitedeki gtag fire (gtag('event',...) çağrısı)✅ Evet — AdsPing bu tipi kullanır
Reklamlardan Gelen AramaGoogle'ın Call Ad altyapısı (reklamın içindeki "Ara" butonu, GFN)❌ Hayır — Google native, AdsPing fire'larını yok sayar

Hangi kategori hangi kaynağa düşer

Conversion oluştururken Goals → Conversions → + New conversion → kategori seç ekranında:

Kategori (TR)Kategori (EN)KaynakTipik kullanım
KişiContactWeb sitesi ✅WhatsApp / telefon / e-mail tıklamaları — en sık ihtiyaç
Potansiyel müşteri formu gönderimiSubmit lead formWeb sitesi ✅Form submit (Lead)
Randevu rezervasyonuBook appointmentWeb sitesi ✅Randevu/booking butonu
Satın alma işlemiPurchaseWeb sitesi ✅E-ticaret sale
Kaydolma işlemiSign-upWeb sitesi ✅Üyelik / hesap açma
Diğer eylemlerOtherWeb sitesi ✅Custom event — güvenli fallback
Telefon aramasıyla elde edilen potansiyel müşteriPhone call leadsReklamlardan Gelen Arama ❌SEÇME — Google native call tracking, AdsPing çalışmaz
WhatsApp + telefon tıklama tracking için: Kategori olarak Kişi (Contact) seç — asla "Telefon Araması" kategorisini değil. İsim çekici ama tuzak; Google UI'sının kafasını karıştırıcı tarafı bu.

Yanlış kategori belirtileri

  • Conversion Summary'de Tüm dönş. kolonu hep 0,00 kalıyor (Network'te request gitse bile)
  • Dönüşüm kaynağı kolonunda Reklamlardan Gelen Arama yazıyor
  • Durum: Daha önce kaydedilmiş dönüşüm yok (30 dk+ geçtiyse) veya Müdahale edilmesi gerekiyor

Bu belirtiler varsa: yeni conversion oluştur, kategoriyi Kişi/Form/Diğer ile değiştir. Yanlış olanı sil veya pasifleştir.

Veri kaynağı seçim ekranı

Kategori sonrası gelen "Veri kaynağı" ekranında SADECE "Web sitesindeki dönüşümler" işaretli olsun:

✅ Web sitesindeki dönüşümler          ← İŞARETLE
☐ Uygulamadaki dönüşümler
☐ Telefon aramalarından elde edilen     ← AÇMA (sonradan kategoriyi tekrar bozar)
☐ Çevrimdışı dönüşümler
Doğru kategori (Kişi/Form/Other/Purchase) + sadece "Web sitesindeki dönüşümler" → Dönüşüm kaynağı = Web sitesi → AdsPing'den gönderdiğin event'ler sayılır.
1

Yeni pixel oluştur

Meta kurulumunda olduğu gibi: dashboard'da sol menüden Pixels, sağ üstte + New pixel.

URL: app.adsping.com/dashboard/pixels

Screenshot pending

Dashboard → Pixels sayfası, sağ üstte + New pixel butonu

Ekran görüntüsü: /dashboard/pixels, sağ üstteki + New pixel butonu vurgulanmış

Dashboard ana sayfası — + New pixel butonu wizard'ı başlatır
2

Domain bilgilerini gir

Step 0 — pixel adı, birincil domain, opsiyonel subdomain'ler.

  1. Pixel name — kendi referansınız için (örn. Acme Web)
  2. Primary domain acme.com (www otomatik kapsanır)
  3. Subdomains (opsiyonel)
Screenshot pending

Wizard step 0 — Domain formu

Ekran görüntüsü: /dashboard/pixels/new wizard Step 0, alanlar dolu örnek

Step 0 — pixel adı, birincil domain, opsiyonel subdomain alanları
3

Plan seç

Stripe Checkout açılır — 14 gün ücretsiz deneme ile başlar (ilk pixel).

Screenshot pending

Wizard step 1 — plan seçimi

Ekran görüntüsü: Wizard Step 1, 3 plan kartı yan yana

Step 1 — Starter / Growth / Scale tier kartları
Ödeme sonrası otomatik olarak /dashboard/pixels/<id>?subscribed=1 URL'ine yönlendirilirsiniz.
4

Pixel detay sayfasına git

Pixel detayı 3 sekmeden oluşur: Report, Destinations, Settings.

Sekmelerin içeriği:

  • Report — Diagnostics kartı + son event'ler listesi
  • Destinations — Meta / TikTok / Google Ads kartları ve pipeline'lar
  • Settings — Install snippet + Allowed Domains + pixel ayarları
Screenshot pending

Pixel detay sayfası — 3 sekmeli yapı

Ekran görüntüsü: /dashboard/pixels/<id> Destinations sekmesi

Pixel detay üstündeki 3 sekmeli bar — Destinations seçili
5

Google'ı bağla

Destinations sekmesinde Google Ads kartına gidin. OAuth ile bağlanın.

Adım 5.1 — Google hesabını OAuth ile bağla

Google Ads kartında Connect Google Ads butonuna tıklayın. Google penceresi açılır, izin verirsiniz.

  • Erişebildiğiniz tüm customer'lar (ajansa MCC altında 500 alt-hesap dahil) otomatik listelenir
  • Customer adları (descriptive_name) otomatik yüklenir
  • Conversion ID (AW-XXXXXXXXXX) seçilen customer'dan otomatik türetilir — sormaya gerek yok
Screenshot pending

Google Ads destination kartı + Connect butonu

Ekran görüntüsü: Google Ads kartının disconnected hâli

Destinations → Google Ads kartı, Connect Google Ads butonu

Adım 5.2 — Conversion action ekle

AdsPing'e bağlayacağın conversion action'ın Dönüşüm kaynağı = Web sitesi olmalı. Eğer Reklamlardan Gelen Arama kaynaklı bir action seçersen AdsPing fire'ları sayılmaz — yukarıdaki kategori tablosuna bak.

OAuth tamamlandıktan sonra Add Google Ads Action dialog'u açılır. Her conversion action için iki bilgi lazım:

  1. Conversion Action ID — Google Ads → Goals → Conversions → o action'a tıkla → URL'in sonunda ctId=987654321 → bu numara
  2. gtag Event Name — Google'ın verdiği snippet'te gtag('event','ads_conversion_xxx',…) satırındaki ads_conversion_xxx kısmı

Sonra Maps to pb.js event dropdown'undan pb.js event ismini seçin (Lead, Contact, Purchase, …). Save → kart Connected olur.

Screenshot pending

Add Google Ads Action dialog — auto-fill panel

Ekran görüntüsü: Add action dialog, customer dropdown + auto-filled AW-… + Action ID input + Event Name input

Dialog: customer seçince AW-… otomatik dolar. Sadece Action ID + Event Name girersiniz
Birden fazla conversion için her birini ayrı pipeline olarak ekleyin (Add Another Action). Aynı pixel altında 5-6 ayrı action tutmak normal.
6

Sitenize entegre edin

Önce stack'inizi seçin — her birinin entegrasyonu farklı.

Settings sekmesinden Install snippet'i kopyaladıktan sonra, sitenizin tipine göre aşağıdaki bölümlerden birini izleyin.

Google'ın helper snippet'leri gerekli değil: Google size gtagSendEvent() + manual gtag.js snippet'leri vermiş olabilir. Bunları kullanmayın — pb.js zaten gtag.js'i otomatik yükler ve event'leri pipeline'da kayıtlı event name'lere map'leyip fire eder. Sadece pbq() çağrısı yapın.

Stack 1 — Düz HTML / Vanilla JS

6.1 — Snippet'i sayfaya ekle

Sitenizdeki her sayfanın <head> bölümüne (veya ortak template'e) tek satır ekleyin:

<!-- AdsPing pb.js — gtag.js'i otomatik yükler, AW-… otomatik gelir -->
<script async src="https://api.adsping.io/pb.js" data-pixel-id="<PIXEL_ID>"></script>

Bu kadar. gtag.js manuel yüklemenize gerek yok — pb.js init sırasında /gtag-config'i çağırıp AW-… ile gtag.js'i otomatik inject eder.

6.2 — Event tetikleme

Form gönderme → Lead:

<form id="contact-form">
  <input name="email" type="email" required>
  <input name="phone" type="tel" required>
  <button type="submit">Gönder</button>
</form>

<script>
  document.getElementById('contact-form').addEventListener('submit', function(e) {
    e.preventDefault();
    var form = this;
    pbq('track', 'Lead', { content_name: 'İletişim Formu' });
    // gtag fire'ının ağa beacon atması için ~300ms tolerans
    setTimeout(function() { form.submit(); }, 300);
  });
</script>

WhatsApp / telefon → Contact:

<script>
  function trackAndGo(url, eventName, params) {
    if (window.pbq) pbq('track', eventName, params || {});
    setTimeout(function() { window.location.href = url; }, 300);
    return false;
  }
</script>

<a href="https://wa.me/902121234567"
   onclick="return trackAndGo(this.href, 'Contact', {content_name:'WhatsApp CTA'});">
  WhatsApp
</a>

<a href="tel:+902121234567"
   onclick="return trackAndGo(this.href, 'Contact', {content_name:'Phone CTA'});">
  +90 (212) 123 45 67
</a>
Navigation timing kritik: <a href> tıklaması veya form submit'i, tarayıcı sayfayı bırakmadan önce browser-side gtag fire'ının ağa beacon atmasını engelleyebilir. setTimeout(..., 300) ile gtag'a yetişme süresi verin. Yeni sekmede açılan link'lerde (target="_blank") bu tolerans gerekmez.

Stack 2 — React / Next.js

6.1 — Script'i layout'a ekle

Next.js App Router'da app/layout.tsx:

// app/layout.tsx
import Script from "next/script";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="tr">
      <head>
        {/* pb.js — gtag.js'i otomatik yükler */}
        <Script
          src="https://api.adsping.io/pb.js"
          data-pixel-id="<PIXEL_ID>"
          strategy="afterInteractive"
        />
      </head>
      <body>{children}</body>
    </html>
  );
}

6.2 — TypeScript: window.pbq tipi

// types/global.d.ts
export {};

declare global {
  interface Window {
    pbq?: (
      cmd: string,
      eventName: string,
      params?: Record<string, unknown>
    ) => void;
  }
}

6.3 — Helper utility

// lib/tracking.ts
type EventData = {
  content_name?: string;
  content_category?: string;
  value?: number;
  currency?: string;
  order_id?: string;
};

export function track(eventName: string, data: EventData = {}) {
  if (typeof window === "undefined") return;
  window.pbq?.("track", eventName, data);
}

/**
 * Navigate-after-track helper — for <a href> or form submits that
 * navigate away. Fires the event and waits ~300ms before navigating
 * so browser-side gtag fire has time to put its beacon on the network.
 */
export function trackAndGo(
  url: string,
  eventName: string,
  data: EventData = {},
  delay = 300,
) {
  track(eventName, data);
  setTimeout(() => {
    window.location.href = url;
  }, delay);
}

6.4 — Component örnekleri

Contact form (Lead):

"use client";

import { useState } from "react";
import { track } from "@/lib/tracking";

export function ContactForm() {
  const [submitting, setSubmitting] = useState(false);

  async function onSubmit(e: React.FormEvent<HTMLFormElement>) {
    e.preventDefault();
    setSubmitting(true);
    const form = new FormData(e.currentTarget);

    try {
      const res = await fetch("/api/contact", {
        method: "POST",
        body: form,
      });
      if (res.ok) {
        track("Lead", { content_name: "İletişim Formu" });
      }
    } finally {
      setSubmitting(false);
    }
  }

  return (
    <form onSubmit={onSubmit}>
      <input name="email" type="email" required />
      <input name="phone" type="tel" required />
      <button disabled={submitting}>Gönder</button>
    </form>
  );
}

WhatsApp / phone link (Contact):

import { trackAndGo } from "@/lib/tracking";

export function WhatsAppLink() {
  const number = "902121234567";
  const url = `https://wa.me/${number}`;
  return (
    <a
      href={url}
      onClick={(e) => {
        e.preventDefault();
        trackAndGo(url, "Contact", { content_name: "WhatsApp CTA" });
      }}
    >
      WhatsApp ile İletişim
    </a>
  );
}
SPA route change'de PageView: Meta'da olduğu gibi, App Router'da usePathname ile useEffect içinde pbq('track','PageView') fire'lamak gerek. pb.js init'te bir kere PageView atar, sonraki route change'leri yakalamaz.
7

Doğrula

Üç farklı kanaldan doğrulama yapın.

(a) AdsPing dashboard

Pixel detay → Report sekmesi:

  • Recent events listesinde event'i aç: destinations.google_ads.status ne yazıyor?
  • success ✅ → Browser-side gtag fire çalışıyor
  • auth_failed ⚠️ → Server-side CAPI Basic Access bekliyor (browser-side yine çalışır)

(b) Google Ads

ads.google.com → Goals → Conversions → Summary → o action satırı:

  • Status kolonu: ilk fire'dan ~30 dk sonra Recording conversions
  • Conversions kolonu: 24-48h içinde sayılar gelir

(c) Browser debug

Console'da:

localStorage.setItem('pb_gtag_debug', '1'); location.reload();

Beklenen log:

[pb.js gtag] fetch:ok { conversionId: "AW-1234567890", eventNameKeys: ["Lead", "Contact"] }
[pb.js gtag] load:done

Bir event tetiklediğinde (form submit / WhatsApp tıklama) Network sekmesinde şu request görünmeli:

GET https://www.googletagmanager.com/g/collect?...&en=ads_conversion_xxx&tid=AW-1234567890

Sık karşılaşılan sorunlar

BelirtiÇözüm
Network'te request gidiyor ama Google Ads'te conversion sayısı 0 kalıyor
(Dönüşüm kaynağı: "Reklamlardan Gelen Arama")
Yanlış conversion kategorisi seçilmiş. Conversion Telefon Araması kategorisinde oluşturulduğu için kaynak Reklamlardan Gelen Arama — AdsPing'in gtag fire'ları bu kaynak türü için sayılmaz. Yeni conversion oluştur, kategoriyi Kişi (Contact) seç. Detay.
Console'da [pb.js gtag] fetch:no-labelsPipeline'da gtagEventName (veya gtagConversionLabel) boş. Add Google Ads Action dialog'undan event name'i doldur.
Server-side CAPI 403 PERMISSION_DENIEDOAuth ile bağlandığın Google account'unun Google Ads üzerinde Admin / Standard erişimi yok. Tools → Access and security üzerinden kontrol edip gerekirse pixel ayarlarından Reconnect yap. Browser-side fire bu süre içinde çalışmaya devam eder.
WhatsApp tıklamasında conversion görünmüyor ama Network'te AdsPing'e POST gidiyorNavigation timing: tarayıcı googletagmanager.com request'i atmadan sayfayı bıraktı. setTimeout(..., 300) ile navigate'i geciktir.
Google Ads "Recording conversions" yazıyor ama sayı artmıyorTrafiğin gclid'i yok (direct traffic) — Google conversion'ı attribute edemez. Reklamdan gelen trafikle test et veya conversion action ayarlarındaki Conversion window'u kontrol et.
Customer dropdown'da hesap görünmüyorOAuth login Google Ads hesabınızla yapılmamış olabilir. Google Ads kartından Disconnect → tekrar Connect Google Ads ile doğru hesabı seçin.
Bittiğinde: Sitenizdeki her pbq('track', 'Lead', …) / Contact çağrısı Google Ads conversion'ı kaydeder. gclid attribution otomatik. Server-side CAPI Basic Access onayı geldiğinde aynı kod hiçbir değişiklik yapmadan offline conversion + refund forwarding'i de devreye alır.