*Account / Env*

   - 
   
   API version: *Google Ads API v20*
   - 
   
   Client library: *Python*
   - 
   
   Campaign type: *Performance Max*
   - 
   
   We can share request IDs if needed.
   
------------------------------
1) Device controls for Performance Max (API) What we tried 

We attempted to set device criteria at the *campaign level* using 
CampaignCriterionService with device.type = CONNECTED_TV and negative = 
true (to exclude CTV) for a Performance Max campaign.

*Operation (Python, simplified):*
op = client.get_type("CampaignCriterionOperation") 
create = op.create create.campaign = 
f"customers/{customer_id}/campaigns/{campaign_id}" 
create.device.type_ = client.enums.DeviceEnum.CONNECTED_TV 
create.negative = True svc = client.get_service("CampaignCriterionService") 
svc.mutate_campaign_criteria(customer_id=customer_id, operations=[op]) 

*Result:*

   - 
   
   Error: field_error: IMMUTABLE_FIELD
   - 
   
   Message: “The field attempted to be mutated is immutable.”
   - 
   
   Location points to .create.negative.
   
Questions 
   
   1. 
   
   *Is device targeting (include/exclude or bid modifiers) supported for 
   Performance Max via the API as of May 2025?*
   - 
      
      If *yes*, which resource(s)/field(s) should we use (e.g., 
      campaign_criterion.device, campaign-level setting, or a different entity)?
      - 
      
      Are there constraints like *only excludes* or *only certain device 
      types* (e.g., CTV only), or *create-time only* vs. updatable later?
      2. 
   
   If *not supported via API* (and UI shows a “Devices” section in PMax):
   - 
      
      Is that UI-only and system-managed for PMax?
      - 
      
      Any documented workaround or roadmap we can follow?
      
GAQL we use to verify current state -- Current criteria rows on the PMax 
campaign SELECT campaign_criterion.resource_name, campaign_criterion.type, 
campaign_criterion.negative, campaign_criterion.device.type FROM 
campaign_criterion WHERE campaign_criterion.campaign = 
'customers/{CID}/campaigns/{CAMPAIGN_ID}' 
------------------------------
2) Asset Group “Brand guidelines”: business name, logos, custom colors, 
font 

In the UI (Asset group → *Brand guidelines*), we see inputs for *Business 
name*, *Logos*, and under “More options”, *Custom colors* and *Font*.
What works for us 
   
   - 
   
   *Business name*: we create a *TEXT* Asset and link via AssetGroupAsset 
   with field_type = BUSINESS_NAME.
   - 
   
   *Logos*: we create *IMAGE* Assets and link via AssetGroupAsset with 
   field_type = LOGO.
   This successfully syncs and is reflected in UI.
   
*Atomic create example (mutate):*
from google.ads.googleads.v20.services.types.google_ads_service import 
MutateOperation ops = [] # Create AssetGroup (temp id pattern) ag_op = 
MutateOperation() ag_create = ag_op.asset_group_operation.create 
ag_create.resource_name = f"customers/{CID}/assetGroups/-12345" 
ag_create.campaign = f"customers/{CID}/campaigns/{PMAX_CAMPAIGN_ID}" 
ag_create.name = "AG – Brand Setup" 
ag_create.final_urls.append("https://example.com/";) ops.append(ag_op) # 
BUSINESS_NAME (TEXT asset already created → resource_name in rn_text) m = 
MutateOperation() m.asset_group_asset_operation.create.asset_group = 
f"customers/{CID}/assetGroups/-12345" 
m.asset_group_asset_operation.create.asset = rn_text # e.g., 
customers/{CID}/assets/111 m.asset_group_asset_operation.create.field_type 
= client.enums.AssetFieldTypeEnum.BUSINESS_NAME ops.append(m) # LOGO (IMAGE 
asset already created → resource_name in rn_logo) m = MutateOperation() 
m.asset_group_asset_operation.create.asset_group = 
f"customers/{CID}/assetGroups/-12345" 
m.asset_group_asset_operation.create.asset = rn_logo # e.g., 
customers/{CID}/assets/222 m.asset_group_asset_operation.create.field_type 
= client.enums.AssetFieldTypeEnum.LOGO ops.append(m) gas = 
client.get_service("GoogleAdsService") resp = gas.mutate(customer_id=CID, 
mutate_operations=ops) What we cannot find in the API 
   
   - 
   
   *Custom colors (main/accent)*
   - 
   
   *Font* (brand font selector)
   
We haven’t found writeable fields on AssetGroup, AssetGroupAsset, or a 
related resource to push *colors* or *font*. We currently store those 
locally for UX, but don’t sync them.
Questions 
   
   3. 
   
   *Are “Custom colors” and “Font” exposed in the Google Ads API for 
   Performance Max asset groups?*
   - 
      
      If *yes*, which resource(s)/field(s) should we call, and example of 
      the correct mutate operation?
      - 
      
      If *UI-only*, is there documentation confirming they are not 
      API-exposed? Any roadmap?
      
GAQL we use to inspect assets attached to the asset group SELECT 
asset_group_asset.asset_group, asset_group_asset.field_type, 
asset.resource_name, asset.type FROM asset_group_asset WHERE 
asset_group_asset.asset_group = 'customers/{CID}/assetGroups/{AG_ID}' 
------------------------------
Bonus: if device rules are supported, can you share a minimal working 
request? 
   
   - 
   
   Smallest example (either mutate_campaign_criteria or other endpoint) 
   that successfully *excludes* CONNECTED_TV (or any device) for a PMax 
   campaign—plus any caveats (creation-time only, etc.).
   
------------------------------

Thanks in advance! Links to *official docs* and a *minimal working snippet* 
would be hugely appreciated.

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 [email protected]
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/adwords-api/4003ff26-f0ff-462d-aee4-a7b0d41b7822n%40googlegroups.com.
  • Pe... Rajat Singh
    • ... 'Google Ads API Forum Advisor' via Google Ads API and AdWords API Forum

Reply via email to