Kurulumdan optimizasyona adım adım rehber

1. Neden Böyle Bir Script’e İhtiyaç Var?

– **SKU bazlı görünürlük:** Performance Max & Shopping kampanyalarında ürün, grup veya feed düzeyinde veriye kolay erişim zor.

– **Segment‑yaklaşımıyla optimizasyon:** İmza/dönüşüm almayan ürünleri hızlıca tespit ederek bütçeyi boşa harcamayı engeller; yüksek ROAS üretenleri büyütmeyi kolaylaştırır.

– **Tek tıkla görselleştirme:** Aynı Google Sheet içinde pivot, ROAS formülü, % pay tabloları ve sütun grafiği oluşur—ekstra Data Studio kurulumu gerekmez.

Kısacası: Script, **30‑60 saniyede** size tam otomatik “Ürün Sağlık Raporu + Dashboard” üretir.

2. Script’in Temel Akışı

| Adım | Ne Yapıyor? | Öne Çıkan Nokta |
|—–|————–|—————–|
| 1 – Tarih Hesabı | START/END tarihleri girilmediyse LOOKBACK_DAYS (varsayılan 30) kullanır | Dinamik raporlama |
| 2 – GAQL Sorgusu | `shopping_performance_view`’dan SKU, gösterim, tıklama, harcama, dönüşüm & gelir çeker | API v16 |
| 3 – Aggregation | Aynı SKU’ya ait tüm satırları toplar | Mikro birim → para birimine dönüştürme |
| 4 – Segment Kuralı | **zero_impr, dormant, zombie, mid_roas, high_roas** olarak sınıflandırır | KPI bazlı eşikler |
| 5 – AdsPerf Sheet | Ham metrikleri ve segmenti tabloya basar | Otomatik başlık ekleme |
| 6 – Dashboard | Pivot, ROAS formülü, % pay tablosu ve grafik yaratır | Görsel özet |

3. Segment Tanımları

| Segment | Kural | Yapılacak Aksiyon |
|———|——-|——————-|
| **zero_impr** | Gösterim = 0 | Feed / Merchant Center hatalarını düzelt, STOK kontrolü yap |
| **dormant** | Gösterim > 0, Harcama = 0, Gelir = 0 | PMAX’te ürün grubu devre dışı ↔ teklif stratejisini test et |
| **zombie** | Harcama > 0, Gelir < Harcama | Ürünü negatife al, ürün sayfasını iyileştir, fiyat/rekabet analiz et |
| **mid_roas** | Harcama > 0, 1 ≤ ROAS < 5 | İyileştirme alanı: görseller, feed title, teklif artışı A/B |
| **high_roas** | ROAS ≥ 5 | Bütçeyi ölçekle, benzer ürünleri öne çıkar |

4. Kurulum Rehberi

4.1 Ön Gereksinimler

– Google Ads MCC veya hesap erişimi
– Google Sheets (edit yetkisi)
– Script’i çalıştırmak için “Üçüncü Taraf API Erişimi” izni

4.2 Adım Adım Kurulum

1. **Google Sheets Şablonu Oluşturun**
   – Boş bir dosya açın, URL’sini alın ve `SHEET_URL` değişkenine yapıştırın.
   – İlk seferde `AdsPerf` ve `Dashboard` sekmeleri otomatik oluşacağından manuel sheet yaratmanıza gerek yok.

2. **Script’i Google Ads’e Ekleyin**
   – *Araçlar ► Toplu İşlemler ► Komut Dosyaları* yoluna gidin.
   – “+” ile yeni script ekleyin, kodu yapıştırın.
   – Gerekliyse `CURRENCY_DIV` (micros → TL) değerini ülkenize göre ayarlayın. TL için 1 000 000 doğrudur.

3. **Tarih Parametrelerini Belirleyin**
   – Belirli bir aralığı raporlamak istiyorsanız `START_DATE` & `END_DATE`’i `yyyy-MM-dd` formatında girin.
   – Boş bırakırsanız script son **LOOKBACK_DAYS** (default = 30) gün için veri çeker.

4. **Ön İzleme & Yetki Verin**
   – “*Ön İzleme*” butonu ile ilk çalıştırmayı yapın. İzin ekranında Sheets ve Ads erişimini onaylayın.
   – Log’da `Tamamlandı → X SKU, Dashboard + ROAS oluşturuldu.` mesajını gördüğünüzde kurulum hazır.

5. **Zamanlayıcı Ayarlayın**
   – “*Zaman Tabanlı*” tetikleyici ekleyerek günlük / haftalık rapor oluşturun.
   – Sabah 08:00 gibi çalıştırmak, taze verilerle güne başlamanızı sağlar.

5. Dashboard’u Okumak

1. **Pivot Tablosu**
   – Satırda Segment, sütunlarda SKU sayısı, toplam harcama, gelir, dönüşüm.
2. **ROAS Sütunu**
   – Formülle hesaplanır; harcama 0 ise boş bırakır.
3. **% Pay Tablosu**
   – Segment bazında toplam harcama, gelir ve dönüşümün bütüne oranı.
4. **Sütun Grafiği**
   – Harcama / Gelir / Dönüşüm metriklerini görsel olarak kıyaslayın.

6. Script’i PMAX Stratejinizde Nasıl Kullanırsınız?

1. **zero_impr** ürünleri Merchant Center’da “Ürün Tanıtım Sorunları” filtresiyle eşleştirin.
2. **dormant** ürünleri ayrı bir “Deneme” kampanyasına taşıyıp düşük hedef ROAS ile test edin.
3. **zombie** ürünleri feed’den geçici olarak hariç tutun veya PMAX’te negatif listelere ekleyin.
4. **mid_roas** ürünlerde 
   – Görsel varyasyon, ek varlıklar, GTIN ekleme → kalite puanını artırır. 
   – Teklif simülasyonu ile ROAS ≥ hedef seviyesine çekilene kadar artır‑azalt testi yapın.
5. **high_roas** ürünler için 
   – Ayrı bir ROAS odaklı PMAX kampanyası açın, bütçeyi kademeli artırın. 
   – Benzer SKU’ları (renk, set, bundle) feed’de öne çıkartarak çapraz satış yapın.

7. Sık Yapılan Özelleştirmeler

| İhtiyaç | Değişiklik | Kod Satırı |
|———|————|———–|
| ROAS eşiğini 5’ten 3’e çekmek | `if (o.cost > 0 && (o.rev/o.cost) >= 3)` | `seg()` fonks. 6. satır |
| Zombi tanımında dönüşüm sayısını da dikkate almak | `&& o.conv = 0` ekleyin | Aynı satır |
| Ek metrik (CTR vb.) eklemek | GAQL `SELECT` kısmına `metrics.ctr` ekleyin | 18. satır |
| Farklı para birimi | `CURRENCY_DIV`’i 1 000 000 → 100 000 yapın | 6. satır |

8. Sonuç

Bu Google Ads script’i, **SKU bazlı reklam performansını dakikalar içinde analiz edip** kolay okunur bir dashboard’a dönüştürerek:

– Bütçeyi verimsiz ürünlerden çekip kârlı ürünlere yönlendirmenizi,
– PMAX kampanyalarını veri‑odaklı segmente etmenizi,
– Rutin raporlama iş yükünü sıfıra indirmenizi sağlıyor.

Kurulumu bir kez tamamladıktan sonra, tek yapmanız gereken **Sheets URL’sini ve zamanlayıcıyı** ayarlamak. Geriye her sabah kahvenizi yudumlayarak **segment tabloları ve ROAS grafiğine** bakmak kalıyor.

**Şimdi deneyin, harcamalarınızı optimize etmeye hemen başlayın!**

/* K O N F İ G /
var SHEET_URL = ‘https://docs.google.com/spreadsheets/d/XXXXXXXX’;
var START_DATE = ”; // ‘2025-03-01’ veya ” → LOOKBACK
var END_DATE = ”; // ‘2025-05-01’ veya ” → LOOKBACK
var LOOKBACK_DAYS = 30;
var CURRENCY_DIV = 1000000; /**/

function main () {

/* —- Tarih aralığı —- / var to = END_DATE ? new Date(END_DATE) : new Date(); var from = START_DATE ? new Date(START_DATE) : new Date(to.getTime() – LOOKBACK_DAYS86400000);
var fmt = Utilities.formatDate;
var fromStr = fmt(from,’UTC’,’yyyy-MM-dd’);
var toStr = fmt(to,’UTC’,’yyyy-MM-dd’);

/* —- GAQL —- */
var gaql =
‘SELECT segments.product_item_id, ‘ +
‘metrics.impressions, metrics.clicks, metrics.cost_micros, ‘ +
‘metrics.conversions, metrics.conversions_value ‘ +
‘FROM shopping_performance_view ‘ +
‘WHERE segments.date BETWEEN “‘ + fromStr + ‘” AND “‘ + toStr + ‘”‘;

var rows = AdsApp.report(gaql,{apiVersion:’v16′}).rows();
var bySku = {};
while (rows.hasNext()) {
var r = rows.next(),
sku = r[‘segments.product_item_id’];
if (!sku) continue;
var o = bySku[sku] || {impr:0,click:0,cost:0,conv:0,rev:0};
o.impr += +r[‘metrics.impressions’];
o.click+= +r[‘metrics.clicks’];
o.cost += +r[‘metrics.cost_micros’]/CURRENCY_DIV;
o.conv += +r[‘metrics.conversions’];
o.rev += +r[‘metrics.conversions_value’];
bySku[sku]=o;
}

/* —- Segment kuralı —- */
function seg(o){
if (o.impr === 0) return ‘zero_impr’;
if (o.cost === 0 && o.rev === 0) return ‘dormant’;
if (o.cost > 0 && o.rev < o.cost) return ‘zombie’; if (o.cost > 0 && (o.rev/o.cost) >= 5) return ‘high_roas’;
return ‘mid_roas’;
}

/* —- AdsPerf tablosu —- */
var ss = SpreadsheetApp.openByUrl(SHEET_URL);
var perf = ss.getSheetByName(‘AdsPerf’) || ss.insertSheet(‘AdsPerf’);
perf.clear();
perf.appendRow(
[‘SKU’,’Impr’,’Clicks’,’Cost’,’Revenue’,’Conv’,’ROAS’,’Segment’]
);

var out=[], totCost=0, totConv=0;
for (var sku in bySku){
var o = bySku[sku], roas = o.cost>0 ? o.rev/o.cost : 0;
totCost += o.cost; totConv += o.conv;
out.push([sku,o.impr,o.click,o.cost,o.rev,o.conv,roas,seg(o)]);
}
if (out.length) perf.getRange(2,1,out.length,out[0].length).setValues(out);

/* —- Dashboard —- */
var dash = ss.getSheetByName(‘Dashboard’);
if (dash) dash.clear(); else dash = ss.insertSheet(‘Dashboard’);

/* Pivot */
var pvRange = dash.getRange(‘A1’);
var pv = pvRange.createPivotTable(perf.getDataRange());
pv.addRowGroup(8); // Segment
pv.addPivotValue(1, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA)
.setDisplayName(‘SKU_Count’);
pv.addPivotValue(4, SpreadsheetApp.PivotTableSummarizeFunction.SUM)
.setDisplayName(‘Total_Cost’);
pv.addPivotValue(5, SpreadsheetApp.PivotTableSummarizeFunction.SUM)
.setDisplayName(‘Total_Revenue’);
pv.addPivotValue(6, SpreadsheetApp.PivotTableSummarizeFunction.SUM)
.setDisplayName(‘Total_Conv’);

/* ROAS sütunu ekle (formülle) */
var hdrRow = 2; // Pivot başlık satırı
dash.getRange(hdrRow,6).setValue(‘ROAS’);
var lastRow = dash.getLastRow();
dash.getRange(hdrRow+1,6,lastRow-hdrRow,1)
.setFormulaR1C1(‘=IF(RC[-3]=0,””,RC[-2]/RC[-3])’);

/* % Paylar tablosu / var pctStart = lastRow + 3; dash.getRange(pctStart,1,1,4) .setValues([[‘Segment’,’Cost%’,’Rev%’,’Conv%’]]); dash.getRange(pctStart+1,1) .setFormula(‘=ArrayFormula({A3:A,B3:B/’+totCost+’100,C3:C/’+totCost+
100,D3:D/’+totConv+’100})’);

/* Grafik */
var chart = dash.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(dash.getRange(2,1,lastRow-1,4)) // Seg + Counts + Cost + Rev
.setOption(‘title’,’Segment Bazında Harcama / Gelir / Dönüşüm’)
.setPosition(1,8,0,0)
.build();
dash.insertChart(chart);

Logger.log(‘Tamamlandı → ‘ + out.length +
‘ SKU, Dashboard + ROAS oluşturuldu.’);
}

Barış

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir