Posts tagged with google-ads-api

I am migrating our API ingestion from googleads to google-ads in python and I noticed that the campaign resource only returns entities that have status "ENABLED". In the googleads version, it returns all entities by default when you request for it.

I tried modifying the GAQL to include filtering like where campaign.status != 'ENABLED' and I get no results back from the API.

Is there a way to get entities with all status like "PAUSED", "REMOVED" etc? Also, is there a place to run the GAQL in the web UI? (They have the GAQL validator but it doesn't let me run it)

I've tried to run this GAQL on an MCC, but didn't get any rows.

ads-script:

campaignIds query =SELECT customer.id, campaign.resource_name, campaign.name FROM campaign WHERE campaign.id IN ("123456"); _rowsToMap(accountToCampaignsMap, AdsApp.report(query, REPORTING_OPTIONS));     }     function _rowsToMap(map, response) {       rows = response.rows();       while (rows.hasNext()) {         var row = rows.next();         Logger.log(JSON.stringify(row)); ... } 

Even though I see it in the UI under this MCC

What am I missing?

I am trying to create a report for Extended Text Ads using Google Ads API.

I was able to do this for my reporting using Adwords API whereby I selected labels and labelids in the columns field.

cols = [     'AccountDescriptiveName', 'AdGroupId', 'AdGroupName', 'AdGroupStatus',     'AdNetworkType2', 'AdType', 'CampaignId', 'CampaignName',     'CampaignStatus', 'Clicks', 'Conversions', 'Cost', 'CreativeFinalUrls',     'Description', 'ExpandedTextAdDescription2', 'HeadlinePart1',     'HeadlinePart2', 'ExpandedTextAdHeadlinePart3', 'Id', 'Impressions',     'LabelIds', 'Labels', 'Path1', 'Path2', 'Status' ] sel = create_selector(     cols,     pred_fields=['Status', 'CampaignStatus', 'AdGroupStatus', 'AdNetworkType2', 'AdType'],     pred_operators=['EQUALS', 'EQUALS', 'EQUALS', 'EQUALS', 'EQUALS'],     pred_values=['ENABLED', 'ENABLED', 'ENABLED', 'SEARCH', 'EXPANDED_TEXT_AD']) ads_df = get_report_as_df(     client,     selector=sel,     report_type='AD_PERFORMANCE_REPORT',     date_range_type='LAST_30_DAYS', ) 

However, from what I understand the new GAQL approach requires using the ad_group_ad resource which does not have labelids and labelname inside? I know there is a ad_group_ad_label resource however, I am not sure how I can make use of it. Also https://developers.google.com/google-ads/api/docs/migration/mapping#ad_performance tells me that I should "Select label.resource_name from the resource ad_group_ad_label" but as GAQL queries only allow retrieval of one resource how do I go about it?

Currently I have these in my GAQL Query

SELECT customer.descriptive_name, ad_group.id, ad_group.name, ad_group.status, ad_group_ad.ad.type, campaign.id, campaign.name, campaign.status, metrics.clicks, metrics.conversions, metrics.cost_micros, ad_group_ad.ad.final_urls, ad_group_ad.ad.expanded_text_ad.description, ad_group_ad.ad.expanded_text_ad.description2, ad_group_ad.ad.expanded_text_ad.headline_part1, ad_group_ad.ad.expanded_text_ad.headline_part2, ad_group_ad.ad.expanded_text_ad.headline_part3, ad_group_ad.ad.id, metrics.impressions, ad_group_ad.ad.expanded_text_ad.path1, ad_group_ad.ad.expanded_text_ad.path2, ad_group_ad.status FROM ad_group_ad WHERE ad_group_ad.status = ENABLED AND campaign.status = ENABLED AND ad_group.status = ENABLED AND ad_group_ad.ad.type = EXPANDED_TEXT_AD 

I am trying to integrate firebase into google ads account to track installation conversions from the app , i unknowingly used the first_open (ios) for the staging app while i need it on production app , i can't import the one for the production since they are both considered the same conversion action

 You've imported 0 app conversion actions from Google Analytics (GA4)     Important next steps:  warning     The following Firebase event(s) couldn't be imported,     because you already have conversion action(s)      tracking the same conversion event for     the same app: (iOS) First open 

, and can't remove the one already exists , it fails with this error message :

This conversion action cannot be removed because it is used for optimization at the campaign-level. 

also when trying to Change conversions setting it says :

Cannot edit campaign conversions setting for a UAC campaign. 

any idea or suggestion would be great

usually we add a script to our website to track conversion for google analytics. Is there any way send the data from plain javascript code such as in the case of Facebook. for example:

'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const Content = bizSdk.Content; const CustomData = bizSdk.CustomData; const DeliveryCategory = bizSdk.DeliveryCategory; const EventRequest = bizSdk.EventRequest; const UserData = bizSdk.UserData; const ServerEvent = bizSdk.ServerEvent; const access_token = '<ACCESS_TOKEN>'; const pixel_id = '<ADS_PIXEL_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); let current_timestamp = Math.floor(new Date() / 1000); const userData = (new UserData())                 .setEmails(['joe@eg.com'])                 .setPhones(['12345678901', '14251234567'])                 // It is recommended to send Client IP and User Agent for Conversions API Events.                 .setClientIpAddress(request.connection.remoteAddress)                 .setClientUserAgent(request.headers['user-agent'])                 .setFbp('fb.1.1558571054389.1098115397')                 .setFbc('fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890'); const content = (new Content())                 .setId('product123')                 .setQuantity(1)                 .setDeliveryCategory(DeliveryCategory.HOME_DELIVERY); const customData = (new CustomData())                 .setContents([content])                 .setCurrency('usd')                 .setValue(123.45); const serverEvent = (new ServerEvent())                 .setEventName('Purchase')                 .setEventTime(current_timestamp)                 .setUserData(userData)                 .setCustomData(customData)                 .setEventSourceUrl('http://jaspers-market.com/product/123')                 .setActionSource('website'); const eventsData = [serverEvent]; const eventRequest = (new EventRequest(access_token, pixel_id))                 .setEvents(eventsData); eventRequest.execute().then(   response => {     console.log('Response: ', response);   },   err => {     console.error('Error: ', err);   } );

or we can do something like: To send new events, make a POST request to this API's /events edge from this path: https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events?access_token={TOKEN}. When you post to this edge, Facebook creates new server events.