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.
  • Ca... dhrutish ramoliya
    • ... dhrutish ramoliya
      • ... 'Google Ads API Forum Advisor' via Google Ads API and AdWords API Forum

Reply via email to