API Basic Access Permission has not been answered for over a week

2023-06-26 Thread Champaign Admin
Hi guys

We submitted a request over two weeks ago and then a week ago for API basic 
access - but have not received a response.

Can someone please come back to us?

We have a developer access that we want to change to basic.

thanks!!

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/5be91a1b-c9b7-43a7-b8d3-5421ae847e6bn%40googlegroups.com.


Get "Resource was not found" when creating SHOPPING campaign

2023-06-26 Thread Mike Fang
Hi 
I got error "Resource was not found" when creating SHOPPING campaign
Could you please help to check what the reason of it?

I, [2023-06-26T15:02:23.353200 #55021]  INFO -- : CID: 8667304723, Host: 
googleads.googleapis.com:443, Method: 
/google.ads.googleads.v12.services.CampaignBudgetService/MutateCampaignBudgets, 
IsFault: no, Request ID: f057ZEJ8Jdlou-hpFkr93g
D, [2023-06-26T15:02:23.354559 #55021] DEBUG -- : Outgoing request: 
Headers: 
{"developer-token":"REDACTED","login-customer-id":"9677213623","x-goog-api-client":"gl-ruby/3.1.3
 
gccl/20.0.0 gax/0.9.0 gapic/20.0.0 
grpc/1.47.0","x-goog-request-params":"customer_id=8667304723"} Payload: 
{"customerId":"8667304723","operations":[{"create":{"name":"Interplanetary 
Budget 
1687762942793","amountMicros":"11100","deliveryMethod":"STANDARD","explicitlyShared":false}}]}
D, [2023-06-26T15:02:23.354652 #55021] DEBUG -- : Incoming response: 
Payload: 
{"results":[{"resourceName":"customers/8667304723/campaignBudgets/12717849749"}]}
W, [2023-06-26T15:02:23.869043 #55021]  WARN -- : CID: 8667304723, Host: 
googleads.googleapis.com:443, Method: 
/google.ads.googleads.v12.services.CampaignService/MutateCampaigns, 
IsFault: yes, Request ID: 3s7NdIOvKt7-_-9yOfpbGw
I, [2023-06-26T15:02:23.869522 #55021]  INFO -- : Outgoing request: 
Headers: 
{"developer-token":"REDACTED","login-customer-id":"9677213623","x-goog-api-client":"gl-ruby/3.1.3
 
gccl/20.0.0 gax/0.9.0 gapic/20.0.0 
grpc/1.47.0","x-goog-request-params":"customer_id=8667304723"} Payload: 
{"customerId":"8667304723","operations":[{"create":{"name":"gg without 
enable","status":"PAUSED","advertisingChannelType":"SHOPPING","shoppingSetting":{"merchantId":"688974403","campaignPriority":0,"enableLocal":true},"campaignBudget":"customers/8667304723/campaignBudgets/12717849749","startDate":"2023-06-26","endDate":"2023-06-27","manualCpc":{}}}]}
I, [2023-06-26T15:02:23.869769 #55021]  INFO -- : Incoming response 
(errors):
 
Google::Ads::GoogleAds::Errors::GoogleAdsError(Google::Ads::GoogleAds::Errors::GoogleAdsError):
 
Resource was not found.

Thanks
Mike

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/17ed375a-e052-46f2-94a0-5ed1714b0c18n%40googlegroups.com.


RE: creating and mutating video campaigns

2023-06-26 Thread 'Google Ads API Forum Advisor' via Google Ads API and AdWords API Forum
Hi Mohamad,

Thank you for reaching out to the Google Ads API team.

As mentioned 
here:(https://developers.google.com/google-ads/api/docs/campaigns/overview#differences_from_the_google_ads_ui),
 video campaign metrics are available for retrieval in the API. However, video 
campaigns cannot be mutated at all from the API, including simple operations 
such as pausing or enabling as well as complex operations like organizing, 
changing criteria, or adding ad groups. For video campaign management, kindly 
do this via the Google Ads UI.

Let me know if you have any questions.

This message is in relation to case "ref:_00D1U1174p._5004Q2mWtti:ref"

Thanks,

Google Ads API Team

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/jIPt70RWUN8Q0080Fepw2WTmezVreaJusHQA%40sfdc.net.


RE: 'resourceexhausted too many requests.' despite not exceeding request limit.

2023-06-26 Thread 'Google Ads API Forum Advisor' via Google Ads API and AdWords API Forum
Hi Julia,

Thank you for reaching out to Google Ads API Forum.

It appears that you are getting a RESOURCE_EXHAUSTED error, it means that a 
system frequency limit has been exceeded. Kindly prevent sending too many 
requests in a short period of time and also ensure to set up short delays 
between requests or combine more operations into fewer requests. You can check 
this documentation 
(https://developers.google.com/google-ads/api/docs/best-practices/common-errors?hl=en#quotaerror)
 for more details.

Additionally, kindly note that as per this documentation 
(https://developers.google.com/google-ads/api/docs/best-practices/quotas#daily_api_operation_limits),
 daily API usage limits are based on the number of API operations made per 
developer token. API operations are the total sum of get requests and mutate 
operations. The limits for daily API operations depend on the access level of 
the developer token. The Access Levels and Permissible Use Guide outlines the 
specific API operation limits for each access level. Requests that violate 
these limits are rejected with the error RESOURCE_EXHAUSTED. You may check the 
API Limits and Quotas 
(https://developers.google.com/google-ads/api/docs/best-practices/quotas?hl=en) 
for more information.

If the issue still persists after trying the suggestions from the above 
statement, kindly share with us the updated complete request and response logs 
with the request ID and request header generated on your end showing the error 
so our team can further investigate and provide appropriate guidance.

You may send the requested logs via Reply privately to the author option. If 
this option is not available, then send it instead on this email address 
googleadsapi-supp...@google.com.

Reference Links:

API operations: 
https://developers.google.com/google-ads/api/docs/rate-sheet#api_operations
Access Levels and Permissible Use: 
https://developers.google.com/google-ads/api/docs/access-levels
request - 
https://developers.google.com/google-ads/api/docs/concepts/field-service#request
response - 
https://developers.google.com/google-ads/api/docs/concepts/field-service#response
request ID - 
https://developers.google.com/google-ads/api/docs/concepts/call-structure#request-id
request header - 
https://developers.google.com/google-ads/api/docs/concepts/call-structure#request_headers

This message is in relation to case "ref:_00D1U1174p._5004Q2mWqPf:ref"

Thanks,

Google Ads API Team

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/vtJLA0RWURNG00RtmoOFBTT2SpGMZtcUCcoA%40sfdc.net.


Re: service account auth error - not_ads_user

2023-06-26 Thread 'Google Ads API Forum Advisor' via Google Ads API and AdWords API Forum
Hi Vlad,

Thank you for the reply.

Kindly note that the NOT_ADS_USER error 
(https://developers.google.com/google-ads/api/docs/best-practices/common-errors#authenticationerror)
 is one of the common authorization errors encountered when the service account 
has not been correctly linked to the Google Ads account via the OAuth2 
assertion flow. Kindly note that you need to use the actual email address of 
the Google Ads user with permissions on the Google Ads account you want to 
access. You may check the guide on how to set up OAuth2 for API access using 
your own credentials with a service account in the client library you are using 
here: 
https://developers.google.com/google-ads/api/docs/oauth/service-accounts?hl=en#client_library_configuration

This error typically means that the email address used to create your OAuth 
credentials in Google Cloud Console is not associated with any Google Ads 
account. See this section in our Common Errors 
(https://developers.google.com/google-ads/api/docs/best-practices/common-errors#authenticationerror)
 guide.

If you know the email address that was used to create your OAuth credentials, 
you should be able to log into the Google Ads UI and send it an invitation by 
following the instructions in the guide I linked to above.

You may also need to enable the Google Ads API in your Google Cloud project by 
following the steps here 
(https://developers.google.com/google-ads/api/docs/first-call/oauth-cloud-project).

If you are still encountering errors after considering all the mentioned 
information above, you may provide us with the user account / email address 
that you used to generate API access so we can further check this information. 
You may then send the requested information via the Reply privately to author 
option. If this option is not available, you may send the details directly to 
our googleadsapi-supp...@google.com alias instead.

In addition, we strongly recommend using OAuth2 installed app or web flows 
(https://developers.google.com/google-ads/api/docs/oauth/cloud-project#choose_an_application_type)
 instead of service accounts unless you need domain-specific features (for 
example, impersonation). OAuth2 installed application and web flows require 
user interaction only once, when access to the account is granted. You need to 
implement the code set up on your end to make calls using service accounts.

This message is in relation to case "ref:_00D1U1174p._5004Q2mWOfh:ref"

Thanks,

Google Ads API Team

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/RQ0rQ0RWURPI003Y3cApA2SJKzLOM5uD5Ssg%40sfdc.net.


Internal error encountered.

2023-06-26 Thread Ahmed Kamal
hello,
i got the following exception 
Status(StatusCode="Internal", Detail="Internal error encountered.", 
DebugException="Grpc.Core.Internal.CoreErrorDetailException: 
{"created":"@168578.12400","description":"Error received from peer 
ipv4:216.58.211.202:443","file":"..\..\..\src\core\lib\surface\call.cc","file_line":953,"grpc_message":"Internal
 
error encountered.","grpc_status":13}")

when i try to use UploadOfflineConversion

GoogleAdsClient client = new GoogleAdsClient(new 
Google.Ads.GoogleAds.Config.GoogleAdsConfig()
{
LinkedCustomerId = CustomerId,
OAuth2ClientId = ClientId,
OAuth2ClientSecret = ClientSecret,
OAuth2RefreshToken = RefreshToken,
DeveloperToken = DevToken,
UseGrpcCore = true,
});
// Get the ConversionActionService.
ConversionUploadServiceClient conversionUploadService =
client.GetService(Services.V14.ConversionUploadService);

// Creates a click conversion by specifying currency as USD.
ClickConversion clickConversion = new ClickConversion()
{
ConversionAction = "Pending-Revenues",
ConversionValue = ConvertedValue.Value,
ConversionDateTime = ConversionTime.ToString("MMdd 
HHmmss") + " Africa/Cairo",
CurrencyCode = CurrencyCode
};

// Verifies that exactly one of gclid, gbraid, and wbraid 
is specified, as required.
// See 
https://developers.google.com/google-ads/api/docs/conversions/upload-clicks
// for details.
string[] ids = { GCLID };
int idCount = ids.Where(id => 
!string.IsNullOrEmpty(id)).Count();

if (idCount != 1)
{
throw new ArgumentException($"Exactly 1 of gclid, 
gbraid, or wbraid is " +
$"required, but {idCount} ID values were provided");
}

// Sets the single specified ID field.
if (!string.IsNullOrEmpty(GCLID))
{
clickConversion.Gclid = GCLID;
}

try
{
// Issues a request to upload the click conversion.
UploadClickConversionsResponse response =
conversionUploadService.UploadClickConversions(
new UploadClickConversionsRequest()
{
CustomerId = CustomerId,
Conversions = { clickConversion },
PartialFailure = true,
ValidateOnly = false,
DebugEnabled = false
});

// Prints the result.
ClickConversionResult uploadedClickConversion = 
response.Results[0];
Console.WriteLine($"Uploaded conversion that occurred 
at " +
$"'{uploadedClickConversion.ConversionDateTime}' 
from Google " +
$"Click ID '{uploadedClickConversion.Gclid}' to " +
$"'{uploadedClickConversion.ConversionAction}'.");
}
catch (Exception ex)
{

}
and here is the stack trace

   at 
Google.Ads.Gax.Interceptors.UnaryRpcInterceptor.<>c__DisplayClass1_0`2.b__0(Task`1
 
oldTask)
   at 
System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
task)
   at 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
 
task)
   at 
Google.Api.Gax.Grpc.ApiCall.GrpcCallAdapter`2.<>c__DisplayClass4_0.d.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Google.Api.Gax.TaskExtensions.WaitWithUnwrappedExceptions(Task task)
   at Google.Api.Gax.Grpc.ApiCall.GrpcCallAdapter`2.CallSync(TRequest 
request, CallSettings callSettings)
   at 
Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass1_0`2.b__0(TRequest
 
request, CallSettings callSettings)
   at 
Google.Api.Gax.Grpc.ApiCall`2.<>c__DisplayClass12_0.b__1(TRequest
 
req, CallSettings cs)
   at Google.Api.Gax.Grpc.ApiCall`2.Sync(TRequest request, CallSettings 
perCallCallSettings)
   at 
Google.Ads.GoogleAds.V14.Services.ConversionUploadServiceClientImpl.UploadClickConversions(UploadClickConversionsRequest
 
request, CallSettings callSettings)

Thanks

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot

Missing refresh_token error even though it's there

2023-06-26 Thread Henrik Ravnskjær
First off. I'm really new to Google Ads API.

I'm trying to created a small C# console app to retrieve some basic ads 
info (clicks, impressions..)

I have created a cloud app to get a client ID and secret. Enabled Google Ad 
API.
I have the developer token from Google Ads API Center.
(It is still in Test Access level. I have applied for basic access, but 
waiting on approval)

Then I needed to get a refresh token for my user. I used a tutorial program 
to get that, so now (I think) I have all the GoogleAdsAPI info that I added 
to app.config.

  
  
  
  
  
  


I then have this code I try to run:
  GoogleAdsServiceClient googleAdsService = 
client.GetService(Services.V14.GoogleAdsService);

  string query =
 @"SELECT
 ad_group.id,
 ad_group.name,
 campaign.id,
 campaign.name,
 metrics.impressions,
 metrics.clicks,
 segments.device,
 segments.day,
 FROM ad_group
 WHERE segments.date DURING LAST_7_DAYS
 AND ad_group.status IN ('ENABLED','PAUSED')
 ORDER BY metrics.impressions DESC
 LIMIT 50";
  try
  {
// Issue a search request.
googleAdsService.SearchStream(customerId.ToString(), query,
delegate (SearchGoogleAdsStreamResponse resp)
{
  // Display the results.
  foreach (GoogleAdsRow criterionRow in resp.Results)
  {
Console.WriteLine(
$"'{criterionRow.AdGroup.Name}' with ID " +
$"{criterionRow.AdGroup.Id} in campaign " +
$"'{criterionRow.Campaign.Name}' with ID " +
$"{criterionRow.Campaign.Id} had " +
$"{criterionRow.Metrics.Impressions.ToString()} 
impressions, " +
$"{criterionRow.Metrics.Clicks} clicks " +
"during the last 7 days.");
  }
}
);
  }
  catch (GoogleAdsException e)
  {
Console.WriteLine("Failure:");
Console.WriteLine($"Message: {e.Message}");
Console.WriteLine($"Failure: {e.Failure}");
Console.WriteLine($"Request ID: {e.RequestId}");
throw;
  }

But I get this error:
System.AggregateException: 'One or more errors occurred. 
(Status(StatusCode="Internal", Detail="Error starting gRPC call. 
TokenResponseException: Error:"invalid_request", Description:"Missing 
required parameter: refresh_token", Uri:""", 
DebugException="Google.Apis.Auth.OAuth2.Responses.TokenResponseException: 
Error:"invalid_request", Description:"Missing required parameter: 
refresh_token", Uri:""
   at 
Google.Apis.Auth.OAuth2.Responses.TokenResponse.FromHttpResponseAsync(HttpResponseMessage
 
response, IClock clock, ILogger logger)
   at 
Google.Apis.Auth.OAuth2.Requests.TokenRequestExtenstions.ExecuteAsync(TokenRequest
 
request, HttpClient httpClient, String tokenServerUrl, CancellationToken 
taskCancellationToken, IClock clock, ILogger logger)
   at 
Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.FetchTokenAsync(String 
userId, TokenRequest request, CancellationToken taskCancellationToken)
   at 
Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.FetchTokenAsync(String 
userId, TokenRequest request, CancellationToken taskCancellationToken)
   at 
Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.RefreshTokenAsync(String 
userId, String refreshToken, CancellationToken taskCancellationToken)
   at 
Google.Apis.Auth.OAuth2.UserCredential.RefreshTokenAsync(CancellationToken 
taskCancellationToken)
   at Google.Apis.Auth.OAuth2.TokenRefreshManager.RefreshTokenAsync()
   at 
Google.Apis.Auth.OAuth2.UserCredential.GetAccessTokenWithHeadersForRequestAsync(String
 
authUri, CancellationToken cancellationToken)
   at 
Google.Apis.Auth.OAuth2.TokenRefreshManager.g__LogException|10_0(Task
 
task)
   at 
Grpc.Auth.GoogleAuthInterceptors.<>c__DisplayClass3_0.d.MoveNext()
--- End of stack trace from previous location ---
   at 
Grpc.Net.Client.Internal.GrpcProtocolHelpers.ReadCredentialMetadata(DefaultCallCredentialsConfigurator
 
configurator, GrpcChannel channel, HttpRequestMessage message, IMethod 
method, CallCredentials credentials)
   at 
Grpc.Net.Client.Internal.GrpcCall`2.ReadCredentials(HttpRequestMessage 
request)
   at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage 
request, Nullable`1 timeout)"))'

It says the refresh token isn't there... But it is in my config file...
What I'm I missing/doing wrong??

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to t

Another USER_PERMISSION_DENIED code 7

2023-06-26 Thread effective world
Hi
I'm trying to replicate the GetAccountHieararchy.php example on my Laravel 
application and I keep getting this aparently very common permissions error 
but I can't see whats the problem:

{ "message": "The caller does not have permission", "code": 7, "status": 
"PERMISSION_DENIED", "details": [ { "@type": 
"type.googleapis.com\/google.ads.googleads.v13.errors.GoogleAdsFailure", 
"errors": [ { "errorCode": { "authorizationError": "USER_PERMISSION_DENIED" 
}, "message": "User doesn't have permission to access customer. Note: If 
you're accessing a client customer, the manager's customer id must be set 
in the 'login-customer-id' header. See 
https:\/\/developers.google.com\/google-ads\/api\/docs\/concepts\/call-structure#cid"
 
} ], "requestId": "HvUJs9KXJuoUXsX1rySSZg" } ] }

Using a refresh token generated with the playground app and then placing it 
in th google_ads_php.ini works.
But it doesn't with my implementation of the oauth2 login
Is there something wrong or missing here? I see in the playground some 
parameters in the first step that I don't see here. This is not my 
implementation I'm just looking to understand and fix the permissions issue 
here.
class MCCHierarchy
{

public function all()
{
$efGoogleAds = new EfGoogleAds();
return $this->createCustomerClientHierarchy($efGoogleAds);
}

private function createCustomerClientHierarchy(EfGoogleAds $efGoogleAds)
{

// First, fetch the list of accessible customers
$outputArray = $this->getAccessibleCustomers($efGoogleAds->
getGoogleAdsClient());

$selects = ['customer_client.client_customer', 'customer_client.level', 
'customer_client.manager', 'customer_client.descriptive_name', 
'customer_client.currency_code', 'customer_client.time_zone', 
'customer_client.id', 'customer_client.status'];
$wheres = [
['customer_client.level', '= 1'],
['customer_client.status', '= "ENABLED"'],
['customer_client.manager', '= true']
];

// Now, we fetch subClients againsts each customer
foreach ($outputArray as $key => $mccClient) {
try{
$subAccountsStreamReport = new StreamReportGoogleAds('customer_client', 
$efGoogleAds->serviceClient, intval($mccClient['clientId']), $selects, 
$wheres, '');
}catch(\Google\ApiCore\ApiException $e){
Log::error('Client id failing: '.$mccClient['clientId']);
if (isset($e->getMetadata()[0]["errors"][0]["errorCode"][
"authorizationError"]) && $e->getMetadata()[0]["errors"][0]["errorCode"][
"authorizationError"] === 'CUSTOMER_NOT_ENABLED') {
// The customer account can't be accessed because it is not yet enabled or 
has been deactivated.
// You may want to log this or handle differently in your application.
continue;
} else {
throw $e;
}
}
$subClientArray = [];
$subClientIdsArray = [];
try{
foreach ($subAccountsStreamReport->stream->iterateAllElements() as 
$subAccount) {
$customerClient = $subAccount->getCustomerClient();
$subClientArray[] = [
'clientName' => $customerClient->getDescriptiveName(),
'clientId' => $customerClient->getId(),
'manager' => $customerClient->getManager(),
'clientStatus' => CustomerStatus::name($customerClient->getStatus())
];
$subClientIdsArray[] = [
"subClientName" => $customerClient->getDescriptiveName(),
"subClientId" => $customerClient->getId()
];
}
}catch(\Google\Ads\GoogleAds\Lib\V13\GoogleAdsException $e){
Log::error('Client id failing in second loop: '.$mccClient['clientId']);
throw $e;
}
$outputArray[$key]['subClients'] = $subClientArray;
$outputArray[$key]['subClientsIds'] = json_encode($subClientIdsArray);
}
//dd($outputArray);
return $outputArray;
}
/**
* Retrieves a list of accessible customers with the provided set up 
credentials.
*
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
* @return int[] the list of customer IDs
*/
private function getAccessibleCustomers(GoogleAdsClient $googleAdsClient): 
array
{
$outputArray = [];
// Issues a request for listing all customers accessible by this 
authenticated Google
// account.
$customerServiceClient = $googleAdsClient->getCustomerServiceClient();
$accessibleCustomers = $customerServiceClient->listAccessibleCustomers([
'customer.status' => 'ENABLED']);
foreach ($accessibleCustomers->getResourceNames() as $customerResourceName) 
{
$customer = CustomerServiceClient::parseName($customerResourceName)[
'customer_id'];
$outputArray[] = [
'clientName' => $customerResourceName,
'clientId' => intval($customer),
];
}

return $outputArray;
}

class GoogleAuthController extends Controller
{
private $client;

public function __construct()
{
$this->client = new Google_Client();
$this->client->setClientId(env('GOOGLE_ADS_CLIENT_ID'));
$this->client->setClientSecret(env('GOOGLE_ADS_CLIENT_SECRET'));
$this->client->setRedirectUri(env('GOOGLE_ADS_REDIRECT_URI'));
$this->client->addScope('https://www.googleapis.com/auth/adwords');
}

public function login()
{
$authUrl = $this->client->createAuthUrl();
return redirect($authUrl);
}

public function callback(Request $request)
{
if (!$request->has('code')) {
return redirect()->route('login')->withErrors('

Assistance Needed: Google Ads Data Integration into Zoho CRM

2023-06-26 Thread Kaido Whims
Hello,

My team and I are facing challenges integrating Google Ads data into Zoho 
CRM. We're using a standard Joomla registration form and aiming to evaluate 
our ROI by comparing ad investment with offline customer sales. The Zoho 
instructions for integration have been helpful, except for a disconnect 
we're experiencing on step 3. Zoho support hasn't been able to provide a 
clear solution, stating their limited involvement with third-party matters. 
The specific issue lies with the line "$gclid": 
"CMPjuu-Xx78CFRSTjgodPHsA3Q," as our developer informs us that the $GCLID 
needs to be unique to each ad click.

Considering the simplicity of the problem, I would greatly appreciate any 
assistance or explanation from the community to help resolve this matter.

*Note:* Our sales predominantly occur offline.

*These are the instructions from zoho support below*

To facilitate webform tracking using third-party web forms, please follow 
the steps outlined below:


   1. Add the following hidden field code in your web form's code:
   
   2. Include the following tracking code in all your website's web pages, 
   just before the  tag:
   
   3. Modify your existing API script by including the "GCLID" variable as 
   shown in the sample below to transfer the tracking details:
   {
 "data": [
{
   "Company": "Zylker",
   "Last_Name": "Daly",
   "First_Name": "Paul",
   "Email": "p.d...@zylker.com",
   "State": "Texas",
   "$gclid": "CMPjuu-Xx78CFRSTjgodPHsA3Q"
}
 ]
  }

The tracking code "zcga.js" fetches the GCLID from the browser's cookies 
and sends it to the third party's database. To make this information 
available in Zoho CRM, it needs to be pushed via API. Include the GCLID 
variable in addition to the existing variables, allowing the GCLID to be 
pushed to Zoho CRM.

*For more details, please refer to the Zoho CRM help article at*
[https://help.zoho.com/portal/en/kb/crm/integrations/google/google-ads/articles/configure-google-ads-crm-integration#Step_2_Add_hidden_element_in_your_web_forms:~:text=js%27%3E%3C/script%3E-,For%20Third%2Dparty%20web%20forms%3A,-In%20the%20case].

Thank you for your assistance and any insights you can provide to resolve 
this issue promptly.

Best regards,

Kaido Whims

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/d977740c-70b0-4e5f-8e43-be457ec25b89n%40googlegroups.com.


Shopping Ads script

2023-06-26 Thread Ionut Fratila
Hi,

I'm trying to write a small script for my Google Shopping Ads campaigns so 
that when a product group gets 100 clicks and its conversion value is 0, it 
will be excluded.

I'm a newbie to programming and I'm having trouble with the second 
condition: conversion value < 0, because I haven't found a method available 
to retrieve values like conversion value, conversion or cost at the Product 
Groups level.

Can someone help me find a method?

Here is the code, but only with the first condition:
function main()
{
const productGroups = AdsApp.productGroups()
.withCondition("metrics.clicks > 100")
.Achieve();
for (const productGroup of productGroups)
{
productGroup.exclude();
}
}

Thank you!

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/1ed4bc31-6c5b-4d3c-893b-4272e10e2312n%40googlegroups.com.


Re: it's been over a month since i applied for baisic access for google ads api token, but still no reply

2023-06-26 Thread Moon Huang
Hi Google Ads API Team ,
Thank you so much for your help.
We had received email from Compliance team.
Thanks again.

Best,
Moon
On Tuesday, June 20, 2023 at 1:32:21 AM UTC+8 Google Ads API Forum Advisor 
wrote:

> Hi Moon,
>
> Thank you for providing additional information.
>
> @Compliance team - The client sent their details privately to our team. 
> For your reference, here's the MCC ID of the client: 329-775-6294. He noted 
> that they did not receive any reply or case ID after submitting their 
> application. Please confirm if you are able to assist.
> This message is in relation to case "ref:_00D1U1174p._5004Q2mCoKB:ref"
>
> Thanks,
>   
> [image: Google Logo] Google Ads API Team 
>
>
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/45a314ae-1791-483c-9a17-fe23989a577en%40googlegroups.com.


Audience segment & metrics

2023-06-26 Thread Muhammad Fikri Mohd Saman
I'm trying to achieve the Audience Segment as can be achieved in Google Ads 
UI report (refer to attached image) alongside with some metrics. What would 
be the query to attain this?

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/107ef9e4-6c06-4533-8741-ac5b96957239n%40googlegroups.com.


RE: audience segment & metrics

2023-06-26 Thread 'Google Ads API Forum Advisor' via Google Ads API and AdWords API Forum
Hi,

Thank you for reaching out to Google Ads API Forum.

In order for us to investigate further, can you share with us the Google Ads UI 
screenshot (without cropping with CID shown) of the data in the UI you are 
trying to retrieve via API? This is so we can check on our end as well and 
investigate further. You can provide it via the Reply privately to author 
option. If this option is not available, then send it instead on this email 
address googleadsapi-supp...@google.com.

This message is in relation to case "ref:_00D1U1174p._5004Q2mXrlB:ref"

Thanks,

Google Ads API Team

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/yxQem0RWWEIV00NvbmxHE1Qk-Q_ucASNAtIQ%40sfdc.net.