There are no matching costs between Google Ads Preview Data Transfer's tables - ads_GeoStats and ads_CampaignStats.

I'm interested in getting matched locations cost report for our world campaigns and I used ads_GeoStats table for that but when I check the value of metrics_cost_micros in ads_GeoStats, it shows that it is less than the value of metrics_cost_micros in ads_CampaignStats or Google Ads console.

Steps to reproduce:

select sum(metrics_cost_micros/1000000) from a.google_ads_preview.ads_CampaignStats_* where campaign_id = 123 and _DATA_DATE ='YYYY-MM-DD'

select sum(metrics_cost_micros/1000000) from a.google_ads_preview.ads_GeoStats_* where campaign_id =123 and _DATA_DATE = 'YYYY-MM-DD'

Any help in understanding why this gap exists?

Thanks, Roy

Expect the same costs from the google ads console and ads_GeoStats table.

Does anybody have some sample code that shows how to get the daily, total billed cost (across all campaigns) of a google ads account?

I have been looking for a sample for a while but could not find where you can get the total cost/billed cost for the day (or for a certain period of time).

I am doing this in Js but a sample in any language is okay. I would like to send this data to an airtable base, so if you have any suggestions on how that can be done too, that would be great!

Thanks in advance!

I have created a WhatsApp business App on https://developers.facebook.com/apps/

I am able to send messages using the API & Access Token

curl -X POST \   'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \   -H "Authorization: ACCESS_TOKEN" \   -d '{     "messaging_product": "whatsapp",     "to": "1650XXXXXXX",     "text": {"body" : "hi"}    }' 

I want to send the message in a WhatsApp group, any ways to achieve this?

We are sending enhanced conversions to Google ADS API using the Upload Click Conversions method of the API client. This is the only data we send to API. No user identifier data about customers is sent to API before that via GTM. In Google Ads UI measurements, I see that Google only shows 5% of what actual conversions are. Does this mean we need to send Google Ads API some information through GTM before we send the conversions through the API client?

I am working on a project to let a client authorize their google ads account, and then use those authorized credentials to download data on their behalf. I have a webapp that successfully Authorizes the app to do things on the clients behalf. This generates an access code that I then trade for two credentials, an access token and a refresh token. This refresh token then gets passed to a database, where a separate app attempts to query the googleAds API. It is my understanding that the Google Oauth engine only needs the refresh token.

I am trying to authorize by use of load_from_dict() or load_from_env() methods of the GoogleAdsClient class. Both yield the same error: google.auth.exceptions.RefreshError: ('invalid_client: Unauthorized', {'error': 'invalid_client', 'error_description': 'Unauthorized'})

I have verified the developer_token, client_id, and client_secret are all accurate to what is in the API console. I have also verified the refresh_token is being passed correctly to the credential dict.

I am really at a loss on where to go from here. I have read many stack overflow threads with similar titles, and yet I am still stuck at the same place.

Here are some relevant links.

Google Ads API configuration

Google Identity and Server side web apps

Google's example of an API call

Relevant code

class GoogleAds: def __init__(self):     self.scope = ['https://www.googleapis.com/auth/adwords']     self.client_id = os.getenv('GOOGLE_ADS_CLIENT_ID')     self.client_secret = os.getenv('GOOGLE_ADS_CLIENT_SECRET')     self.developer_token = os.getenv('GOOGLE_ADS_DEVELOPER_TOKEN')     self.refresh_token = os.getenv('GOOGLE_ADS_REFRESH_TOKEN') def authorize(self):     credentials = {         "developer_token": self.developer_token,         "refresh_token": self.refresh_token,         "client_id": self.client_id,         "client_secret": self.client_secret,         "use_proto_plus":"True",         "grant_type": "refresh_token",     }     print(credentials)     googleads_client = GoogleAdsClient.load_from_dict(credentials)     service = googleads_client.get_service("GoogleAdsService")     request = googleads_client.get_type("SearchGoogleAdsRequest")     return service, request