import asyncio
import logging
from google.protobuf.json_format import MessageToDict
logging.basicConfig(level=logging.INFO, format='[%(asctime)s - %(levelname)s] %(message).5000s')
logging.getLogger('google.ads.googleads.client').setLevel(logging.INFO)
import google.ads.googleads.client
def setup_google_ads_connection():
google_ads_client = (
google.ads.googleads.client.GoogleAdsClient.load_from_storage("googleads.yaml")
)
ga_service = google_ads_client.get_service("GoogleAdsService", version="v19")
return google_ads_client, ga_service
async def main(google_ads_client, google_ads_service):
cust_list = ["2978713003"]
for cust_id in cust_list:
asset_query = "SELECT segments.date,campaign.id,ad_group.id,metrics.impressions,metrics.clicks,metrics.cost_micros,asset_field_type_view.field_type,metrics.video_views,metrics.cross_device_conversions FROM asset_field_type_view WHERE segments.date >= '2025-03-05' AND segments.date <= '2025-03-05' AND metrics.impressions > 0 AND campaign.id in ('21080449403')" setting = google_ads_client.get_type('SummaryRowSettingEnum').SummaryRowSetting.SUMMARY_ROW_WITH_RESULTS
search_request = google_ads_client.get_type("SearchGoogleAdsStreamRequest")
search_request.customer_id = cust_id
search_request.query = asset_query
search_request.summary_row_setting = setting
_CLIENT_TIMEOUT_SECONDS = 400
stream = google_ads_service.search_stream(
search_request,
timeout=_CLIENT_TIMEOUT_SECONDS
)
result = []
summary_result = []
for batch in stream:
summary_row = batch.summary_row
summary_row = MessageToDict(
summary_row,
use_integers_for_enums=False,
preserving_proto_field_name=True
)
summary_result.append(summary_row)
for row in batch.results:
row = MessageToDict(
row,
use_integers_for_enums=False,
preserving_proto_field_name=True
)
result.append(row)
if result:
print(f"{cust_id} has data")
if __name__ == "__main__":
google_ads_client, google_ads_service = setup_google_ads_connection()
asyncio.run(
main(google_ads_client, google_ads_service)
)