14.10.2025
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.
Bu sistemle şunları yapabileceğiz:
Bu sistemi kurmak için aşağıdaki bileşenlere ihtiyacımız olacak:
Öncelikle Google Cloud Console üzerinden yeni bir proje oluşturuyoruz.
Sonrasında aşağıdaki API’leri etkinleştiriyoruz:
Bu API’ler, Python üzerinden hem reklam verilerini çekmemizi hem de Sheets üzerinde işlem yapmamızı sağlayacak.
Google Ads API’yi kullanabilmek için dört temel bilgiye ihtiyacımız var:
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.
Google Cloud -> “APIs & Services -> Credentials -> OAuth 2.0 Client IDs” üzerinden oluşturabilirsiniz.
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.
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.
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.)
Spreadsheet ID’yi not alın. Bu ID, Google Sheets URL’sinde /d/ ve /edit arasında yer alan uzun karakter dizisidir.
Sheets API’ye erişebilmek için bir service account oluşturacağız:
Ö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”
}
Böylece Python kodu, Sheets’e doğrudan yazma iznine sahip olacak.
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
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:
Bu şifre, kod içinde Gmail hesabınızla birlikte kullanılarak güvenli şekilde mail gönderimini sağlar.
Artık yapı tamam.
Otomasyonun genel akışı şu şekilde:
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.
Kodu manuel olarak da test edebilirsiniz.
Terminalde:
python check_urls.py
Her şey doğruysa:
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.
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.
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.
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:
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:
Kısacası bu sistem, hem teknik hem operasyonel olarak reklam hesaplarını daha sağlıklı, şeffaf ve verimli hale getirir.
Perfist Blog
Benzer Yazılar
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 […]
Devamını Oku
Senior Level Performans PazarlamasıGEO (Generative Engine Optimization) Nedir? GEO, yapay zekâ tabanlı arama motorlarında içeriğin daha görünür olması için yapılan optimizasyon çalışmalarıdır. Amacı, yapay zekâların verdiği cevaplarda içeriğin daha sık önerilmesini sağlamaktır. Klasik arama motoru sıralamalarından farklı olarak, yapay zekâ modellerinin içerik okuma ve anlamlandırma biçimine göre içerik üretilir. GEO ve SEO Arasındaki Farklar SEO, Google gibi arama […]
Devamını Oku
Mid Level SEOAnswer Engine Optimization, arama motorlarının ötesinde yapay zekâ destekli yanıt motorlarına içerik uyarlama sürecidir. Kullanıcıların sorularına en net ve doğru yanıtı vermeyi amaçlar. Bu sayede içerikler yalnızca Google’da değil, aynı zamanda ChatGPT, Perplexity gibi yapay zekâ platformlarında da öne çıkar. Geleneksel SEO, web sitelerinin arama motoru sonuç sayfalarında görünürlüğünü artırmaya odaklanır. AEO ise içeriklerin doğrudan […]
Devamını Oku
Mid Level SEOGoogle Analytics 4’te oturumun ne olduğu, oturum sürelerinin neden önemli olduğu, hangi oturum metriklerinin bulunduğu ve bu ayarların nasıl yapılandırılacağını açıklayacağız. GA4’te Oturum Nedir? Oturum, bir kullanıcının web siteniz veya mobil uygulamanızla belirli bir zaman aralığında gerçekleştirdiği tüm etkileşimlerin bütünüdür. Kullanıcı sitenize geldiğinde bir oturum başlar ve belirli bir süre boyunca etkileşim olmazsa (örneğin […]
Devamını Oku
Beginner Level Web/App Analitiği