Paylaş

blog-header

Google Ads API ile Kampanya URL’lerinin Otomatik Kontrolü

Google Ads kampanyalarınızın hedef URL’lerini düzenli olarak kontrol etmek, reklam bütçenizi korumanın en etkili yollarından biridir. Çünkü kırık veya yönlendirmeyen sayfalar, reklam tıklamalarını boşa harcar, kalite puanını düşürür ve dönüşüm oranlarınızı etkiler.

Bu yazıda, Google Ads hedef URL verilerini otomatik olarak Google Sheets’e aktaran, ardından bu URL’lerin çalışıp çalışmadığını kontrol eden ve eğer sorun tespit edilirse Gmail üzerinden uyarı e-postası gönderen bir otomasyon sisteminin nasıl kurulacağını adım adım anlatacağız.

Odak noktamız salt kod parçaları değil; API bağlantı yapısı, veri akışı, kimlik doğrulama süreçleri ve otomasyonun mantıksal tasarımı olacak.

Paylaşılan Python örnekleri, geliştirilmeye açık bir temel sunar. Dolayısıyla bu yapıyı kendi kullanım senaryonuza uyarlayabilir, farklı API uç noktaları veya veri kaynaklarıyla genişletebilirsiniz.

Yazı boyunca, sistemin sıfırdan nasıl kurulacağını, hangi noktada hangi bağlantıların devreye girdiğini ve süreçte karşılaşılabilecek teknik detayları derinlemesine inceleyeceğiz. Raporlara katkı sağlayacağını düşündüğünüz eklemeler varsa veya her türlü olumlu/olumsuz geri dönüşlerinizi bekleriz.

Hedefimiz Ne?

Bu sistemle şunları yapabileceğiz:

  • Google Ads API üzerinden aktif kampanyaların verilerini çekmek,
  • Google Sheets’e kampanya, reklam grubu ve asset URL’lerini yazmak,
  • Tüm URL’leri otomatik olarak test etmek (200 OK değilse hata olarak işaretlemek),
  • Hatalı URL tespit edilirse Gmail üzerinden otomatik e-posta göndermek,
  • Tüm süreci her gün belirli bir saatte (örneğin 15:00’te) otomatik çalıştırmak.

Gerekli Araçlar

Bu sistemi kurmak için aşağıdaki bileşenlere ihtiyacımız olacak:

  • Google Cloud Console – API erişimlerini yönetmek ve kimlik bilgilerini oluşturmak için
  • Google Ads hesabı – Verilerin çekileceği Google Ads hesabı
  • Google Sheets – Verilerin kaydedileceği ve izleneceği rapor
  • Gmail Hesabı – Bildirim e-postalarının gönderileceği hesap
  • Python 3.8+ – Otomasyonun çalışacağı dil ve ortam

 

Adım 1 – Google Cloud Projesi Oluşturma ve API Erişimlerini Açma

Öncelikle Google Cloud Console üzerinden yeni bir proje oluşturuyoruz.

Sonrasında aşağıdaki API’leri etkinleştiriyoruz:

  • Google Ads API
  • Google Sheets API

Bu API’ler, Python üzerinden hem reklam verilerini çekmemizi hem de Sheets üzerinde işlem yapmamızı sağlayacak.

 

Adım 2 – Google Ads API Kimlik Bilgilerinin Ayarlanması

Google Ads API’yi kullanabilmek için dört temel bilgiye ihtiyacımız var:

  • Developer Token

Google Ads hesabının “Admin -> API center -> API Access” bölümünden alınır. 

Eğer önceden alınan bir token yoksa yeni aldığınız token Test Access seviyesinde olacaktır. Basic Access için ek başvuru yapmanız gerekmektedir. API kullanım amacını doküman halinde sunmanız gerekiyor.

  • Client ID ve Client Secret

Google Cloud -> “APIs & Services -> Credentials -> OAuth 2.0 Client IDs” üzerinden oluşturabilirsiniz.

  • Refresh Token

Erişim süresi dolduğunda otomatik yenileme için gereklidir.

Developer Token, Client ID ve Client Secret bilgilerini almış olmanız gerekiyor. Ayrıca Google Ads hesabına erişimi olan bir gmail hesabına ihtiyacınız olacak.

Google’ın resmi aracı olan OAuth 2.0 Playground ile bu işlem hızlıca tamamlanabilir.

  • Sayfanın sağ üst köşesindeki Settings (Ayarlar) simgesine tıkla.
  • “Use your own OAuth credentials” seçeneğini aktif et.
  • Açılan alanlarda:
    • Client ID → Google Cloud Console’daki Client ID’yi gir
    • Client Secret → Google Cloud Console’daki Client Secret’ı gir
  • Kaydet
  • “Select & authorize APIs” alanında, “Google Ads API” ve “Google Sheets API V4” kısımlarını bul
  • “Authorize APIs” butonuna tıkla
  • İzinleri onayla
  • “Exchange authorization code for tokens” butonuna tıkla.
  • Buradan Refresh Token kodunu alabilirsin.

Tüm bu bilgileri “google-ads.yaml” dosyasında aşağıdaki formatta saklıyoruz:

developer_token: “your_developer_token”
client_id: “your_client_id”
client_secret: “your_client_secret”
refresh_token: “your_refresh_token”
login_customer_id: 1111111111 # MCC hesabınız
use_proto_plus: True

Bu dosyayı proje dizininizde saklayın.

 

Adım 3 – Google Sheets Hazırlığı

Google Sheets tarafında bir çalışma dosyası oluşturun.
Bu dosya, kampanya URL’lerinin, sitelink’lerin ve hata durumlarının saklanacağı yer olacak.

2 adet sheet oluşturuyoruz. (İsimlendirmeler isteğinize göre değiştirilebilir.)

  • Sheet1 – Search ve Pmax kampanyalarının Final URL’leri
  • Sitelinks – Hesap ve kampanya bazlı sitelink URL’leri 

Spreadsheet ID’yi not alın. Bu ID, Google Sheets URL’sinde /d/ ve /edit arasında yer alan uzun karakter dizisidir.

Adım 4 – Service Account ile Erişim Ayarları

Sheets API’ye erişebilmek için bir service account oluşturacağız:

  • Google Cloud Console -> IAM & Admin -> Service Accounts -> “Create Service Account”
  • Hesap oluşturun ve JSON anahtar dosyasını indirin (service_account.json)

Örnek “service_account.json” dosyası:

{
“type”: “service_account”,
“project_id”: “your_project_id”,
“private_key_id”: “your_private_key_id”,
“private_key”: “—–BEGIN PRIVATE KEY—–\your_privete_key\n—–END PRIVATE KEY—–\n”,
“client_email”: “your_client_email_name@abiding-hull-471108-q5.iam.gserviceaccount.com”,
“client_id”: “your_client_id”,
“auth_uri”: “https://accounts.google.com/o/oauth2/auth”,
“token_uri”: “https://oauth2.googleapis.com/token”,
“auth_provider_x509_cert_url”: “https://www.googleapis.com/oauth2/v1/certs”,
“client_x509_cert_url”: “https://www.googleapis.com/robot/v1/metadata/x509/your_client_email_name%40abiding-hull-471108-q5.iam.gserviceaccount.com”,
“universe_domain”: “googleapis.com”
}

  • Bu e-posta adresini, oluşturduğunuz Google Sheet’in “Share” kısmına Editor olarak ekleyin.

Böylece Python kodu, Sheets’e doğrudan yazma iznine sahip olacak.

 

Adım 5 – Python Ortamının Hazırlanması

Python ile ilgili adımları geçiyorum, son sürüm vb. ortamların hazır olduğunu düşünüyorum.

Terminal veya komut satırında gerekli kütüphaneleri yükleyin:

pip install google-ads google-api-python-client google-auth requests  

 

Adım 6 – Gmail Üzerinden E-posta Gönderimi

Otomasyonun sonunda hata tespit edilirse, sistem Gmail üzerinden otomatik olarak e-posta gönderir.
Bu nedenle Gmail hesabınız için bir Uygulama Şifresi (App Password) oluşturmanız gerekir.

Adımlar:

  1. Google hesabınızda iki adımlı doğrulamayı (2FA) aktif edin.
  2. App Passwords sayfasına gidin.
  3. Yeni bir uygulama oluşturun (ör. “Broken URL Automation”).
  4. Oluşan 16 haneli şifreyi kaydedin.

Bu şifre, kod içinde Gmail hesabınızla birlikte kullanılarak güvenli şekilde mail gönderimini sağlar.

 

Adım 7 – Çalışma Mantığı

Artık yapı tamam.
Otomasyonun genel akışı şu şekilde:

  1. Google Ads API üzerinden aktif kampanyalar, reklam grupları ve asset URL’leri çekilir.
  2. Çekilen veriler Google Sheets dosyasına yazılır.
  3. Sistem her URL’yi kontrol eder:
    • Sayfa 200 OK dönüyorsa Sağlıklı
    • 404, 500 veya timeout hatası varsa Sağlıksız olarak işaretlenir.
  4. Eğer hatalı URL tespit edilirse Gmail üzerinden otomatik uyarı gönderilir.

Adım 8 – Günlük Otomatik Çalışma Zamanlaması

Bu sistemin her gün belirli bir saatte çalışması için bir zamanlama (scheduler) tanımlayabilirsiniz. Windows kullandığım için ben Task Scheduler üzerinden bu işlemi tamamladım.

Adım 9 – Test Etme

Kodu manuel olarak da test edebilirsiniz.
Terminalde:

python check_urls.py

Her şey doğruysa:

  • Google Sheets dosyanızda yeni veriler görünecektir,
  • Eğer kırık bir URL varsa Gmail’inize uyarı e-postası gelir,
  • Log’larda “Tüm URL’ler sağlıklı” veya “Hatalı URL bulundu” mesajı yer alır.

 

Adım 10 – Neyi Neden Yaptığımız ve Çıktılar

Bu bölümde, kullandığımız kodların(check_url.py) ne işe yaradığını ve çalıştırıldığında hangi sonuçları ürettiğini açıklamaya çalışacağız.

Aşağıdaki satırlar proje içinde kullanılacak dış kütüphaneleri ve API istemcilerini yüklüyor.

from google.ads.googleads.client import GoogleAdsClient
from google.oauth2 import service_account
from googleapiclient.discovery import build
import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

Bu kod parçası, projemizin konfigürasyon (ayar) kısmını oluşturur. Burada Google Ads API, Google Sheets ve e-posta bildirimleri için gerekli tüm bağlantı bilgileri ve kimlik doğrulama dosyaları tanımlanır.

GOOGLE_ADS_CONFIG_PATH = “google-ads.yaml”
CUSTOMER_ID = “your_customer_id”

SERVICE_ACCOUNT_FILE = “service_account.json”
SPREADSHEET_ID = “your_spreadsheet_id”
SHEET1_NAME = “Sheet1”
SITELINKS_SHEET_NAME = “Sheet2”

EMAIL_SENDER = “your_email”
EMAIL_RECEIVER = “your_email”
EMAIL_PASSWORD = “your_app_password”

“send_email” fonksiyonu, işlemler tamamlandığında otomatik e-posta bildirimi göndermek için kullanılıyor.

def send_email(subject, body):

msg = MIMEMultipart()
msg[“From”] = EMAIL_SENDER
msg[“To”] = EMAIL_RECEIVER
msg[“Subject”] = subject
msg.attach(MIMEText(body, “plain”))

try:
with smtplib.SMTP_SSL(“smtp.gmail.com”, 465) as server:
server.login(EMAIL_SENDER, EMAIL_PASSWORD)
server.send_message(msg)
print(“The email has been sent.”)
except Exception as e:
print(f”The email could not be sent.: {e}”) 

“check_url” fonksiyonu, verilen URL’nin erişilebilirliğini kontrol etmek için kullanılır.

  • check_url() fonksiyonu bir URL alır ve boş olup olmadığını kontrol eder.
  • URL varsa, requests.get() ile 5 saniyelik zaman aşımı süresi içinde istekte bulunur.
  • Yanıtın status_code değeri 200 ise “OK” döndürür; farklı bir durum kodu varsa “Error [kod]” olarak döner.

def check_url(url):
if not url:
return “”
try:
r = requests.get(url.strip(), timeout=5)
if r.status_code == 200:
return “OK”
else:
return f”Error {r.status_code}”
except requests.exceptions.RequestException as e:
return f”Failed: {e.__class__.__name__}”

“get_search_campaigns” fonksiyonu, Google Ads hesabındaki aktif Search ve Display kampanyalarının reklam URL’lerini çekmek için kullanılır.

  • GoogleAdsService üzerinden bir sorgu (GAQL) çalıştırır.
  • Sorgu; kampanya ID’si, adı, reklam ID’si, reklam grubu adı ve final_urls alanlarını getirir.
  • Sadece ENABLED (aktif) durumdaki ve SEARCH veya DISPLAY kanal tipindeki kampanyalar alınır.

def get_search_campaigns(client, customer_id):
ga_service = client.get_service(“GoogleAdsService”)
query = “””
SELECT
campaign.id,
campaign.name,
ad_group_ad.ad.id,
ad_group.name,
ad_group_ad.ad.final_urls,
campaign.advertising_channel_type
FROM ad_group_ad
WHERE campaign.status = ‘ENABLED’
AND campaign.advertising_channel_type IN (‘SEARCH’, ‘DISPLAY’)
ORDER BY campaign.id
“””
results = []
response = ga_service.search(customer_id=customer_id, query=query)
for row in response:
final_urls = [str(url) for url in row.ad_group_ad.ad.final_urls] if row.ad_group_ad.ad.final_urls else []
results.append((
row.campaign.id,
row.campaign.name,
row.ad_group_ad.ad.id,
row.ad_group.name,
“, “.join(final_urls),
“SEARCH/DISPLAY”
))
return results 

“get_account_sitelinks” fonksiyonu, hesap düzeyinde ekli olan Sitelink uzantılarını almak için kullanılır.

  • GoogleAdsService üzerinden GAQL sorgusu ile customer_asset tablosundan veriler çekilir.
  • Sorgu, her sitelink için; link metni, açıklamalar, final URL’ler ve varlık adı bilgilerini döndürür.
  • Bu fonksiyon, kampanya veya reklam grubu bazlı değil, doğrudan hesap seviyesinde ekli sitelinkleri listeler.

def get_account_sitelinks(google_ads_client, customer_id):
ga_service = google_ads_client.get_service(“GoogleAdsService”)
query = “””
SELECT
customer_asset.asset,
customer_asset.status,
asset.name,
asset.sitelink_asset.link_text,
asset.sitelink_asset.description1,
asset.sitelink_asset.description2,
asset.final_urls
FROM customer_asset
WHERE asset.type = ‘SITELINK’
“””
results = []
response = ga_service.search(customer_id=customer_id, query=query)
for row in response:
final_urls = [str(url) for url in row.asset.final_urls] if row.asset.final_urls else []
results.append((“”, “”, row.asset.name, row.asset.sitelink_asset.link_text, row.asset.sitelink_asset.description1 or “”, “, “.join(final_urls)))
return results

Aynı mantıkta PMax ve kampanya bazlı sitelink URL bilgilerini almak için de ayrı ayrı fonksiyon çalıştırıyoruz. Daha sonra bu bilgileri Sheets içerisine ilgili alanlara yazıyoruz.

Kodun tamamına aşağıdaki link üzerinden ulaşabilirsiniz.

https://github.com/mehmetakifc/google-ads-url-checker

Kampanya URL bilgilerinin bulunduğu Sheet1 sayfası aşağıdaki gibi görünüyor:

 

Sitelink URL bilgilerinin bulunduğu Sitelinks sayfası aşağıdaki gibi görünüyor:

 

Mail bildirimi ise aşağıdaki gibi görünüyor:

 

Sonuç

Bu yazıda, Google Ads Nihai URL’leri ve Sitelink URL’lerini düzenli olarak kontrol edip raporlayan ve hatalı bağlantıları tespit eden tam otomatik bir sistemi oluşturmaya çalıştık.

Böylece:

  • Google Ads kampanyalarındaki hatalı URL’ler erken tespit edilir,
  • Gereksiz tıklama maliyetleri önlenir,
  • Tüm veriler Google Sheets’te merkezi olarak izlenebilir,
  • E-posta bildirimleri sayesinde hızlı aksiyon alınabilir.

Kısacası bu sistem, hem teknik hem operasyonel olarak reklam hesaplarını daha sağlıklı, şeffaf ve verimli hale getirir.

 

Merhaba ben Mehmet Akif ÇANDIR, sektörde mühendis olarak görev aldıktan sonra merakım ve mühendislik bilgimin de katkısıyla Web/App Analytics sektöründe çalışmaya başladım. Web/App Analist olarak kendimi geliştirmekte ve hizmet vermekteyim. 2022 Temmuz ayından beri Perfist şirketinde Web/App Analyst olarak çalışmaktayım.

Perfist Blog

Benzer Yazılar

Diğer Yazılar