Hi everyone,
I'm attempting to override the default conversion goals at the campaign level using the Google Ads API V18. I aim to apply a campaign-specific conversion goal that differs from the account-default conversion goal. However, even though my API call succeeds and the CampaignConversionGoal resources are created, the Google Ads dashboard still displays “account-default” for the campaign conversion goal. *Below is the relevant PHP code snippet from my Laravel controller where I create the conversion goals:* use Google\Ads\GoogleAds\V18\Enums\ConversionActionCategoryEnum\ConversionActionCategory; use Google\Ads\GoogleAds\V18\Enums\ConversionOriginEnum\ConversionOrigin; use UnexpectedValueException; private function applyConversionGoals($googleAdsClient, $customerId, $campaignResourceName, $conversionGoals) { if (empty($conversionGoals)) { \Log::warning("⚠️ No conversion goals provided for campaign: " . $campaignResourceName); return; } \Log::info("🔍 Processing Conversion Goals: " . json_encode($conversionGoals)); $operations = []; foreach ($conversionGoals as $goal) { if (!isset($goal['category']) || !isset($goal['origin'])) { \Log::error("🚨 Missing category or origin in goal: " . json_encode($goal)); continue; } $categoryKey = strtoupper($goal['category']); $originKey = strtoupper($goal['origin']); // Convert category using enum. try { $categoryValue = ConversionActionCategory::value($categoryKey); } catch (UnexpectedValueException $e) { \Log::error("🚨 Invalid conversion category provided: " . $categoryKey); continue; } // Convert origin using enum. try { $originValue = ConversionOrigin::value($originKey); } catch (UnexpectedValueException $e) { \Log::error("🚨 Invalid conversion origin provided: " . $originKey); continue; } // Convert biddable flag to boolean. $biddable = isset($goal['biddable']) ? filter_var($goal['biddable'], FILTER_VALIDATE_BOOLEAN) : false; try { $conversionGoal = new CampaignConversionGoal([ 'campaign' => $campaignResourceName, 'category' => $categoryValue, 'origin' => $originValue, 'biddable' => $biddable, ]); $operation = new CampaignConversionGoalOperation(); $operation->setCreate($conversionGoal); $operations[] = $operation; } catch (\Throwable $th) { \Log::error("🔴 Error creating conversion goal for {$categoryKey}: " . $th->getMessage()); } } if (empty($operations)) { \Log::warning("⚠️ No valid Conversion Goal operations created for campaign: " . $campaignResourceName); return; } try { $mutateRequest = new MutateCampaignConversionGoalsRequest([ 'customer_id' => $customerId, 'operations' => $operations, ]); $campaignConversionGoalServiceClient = $googleAdsClient->getCampaignConversionGoalServiceClient(); $response = $campaignConversionGoalServiceClient->mutateCampaignConversionGoals($mutateRequest); \Log::info("✅ Conversion Goals Applied Successfully: " . json_encode($response->getResults())); } catch (\Throwable $th) { \Log::error("🚨 Google Ads API Error in Conversion Goals: " . $th->getMessage()); } } *I'm passing the following JSON payload from my front end:*{ "campaignBudget": 10000000, "campaign": { "name": "Test Campaign", "status": "PAUSED", "type": "SEARCH", "start_date": "2025-02-25", "end_date": "", "locations": [ { "id": 2004, "name": "Afghanistan" } ], "languages": [ { "id": 1000, "name": "English" } ], "networks": [ "SEARCH", "DISPLAY" ], "ad_schedule": [], "conversion_goals": [ { "category": "PURCHASE", "origin": "WEBSITE", "biddable": true } ] }, "adGroup": { "name": "Test Ad Group", "cpc_bid_micros": 1000000, "keywords": [ "adgpt" ] }, "ad": { "businessName": "", "headlines": [ "AdGPT - Your AI Ads Manager", "AdGPT - Your AI Ads Manager", "AdGPT - Your AI Ads Manager" ], "descriptions": [ "Boost sales with AdGPT.com for Nike Shoes ads", "Boost sales with AdGPT.com for Nike Shoes ads", "Boost sales with AdGPT.com for Nike Shoes ads" ], "final_urls": [ "adgpt.com" ] }, "brand_id": 192 } When I check the campaign in the Google Ads dashboard, the conversion goal still appears as "account-default" rather than reflecting the override I intended (PURCHASE/WEBSITE). *Questions:* 1. *Why does the campaign-level conversion goal override appear as account-default?* Is it possible that if the override values match the account-level default settings, the UI shows account-default even though the override is applied? 2. *Are there specific conditions (e.g., campaign objective or other settings) that must be met to ensure that the conversion goal override takes effect and is visible in the dashboard?* 3. *Is there a propagation delay or a known issue in the Google Ads UI regarding the display of campaign-level conversion goals?* Any insights or suggestions on how to force the dashboard to reflect the campaign-specific conversion goal would be greatly appreciated. Thanks in advance for your help! -- -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ 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 visit https://groups.google.com/d/msgid/adwords-api/001eea1b-acea-486a-b113-f8b56cc70167n%40googlegroups.com.