Performance Max: (1) Device targeting via API? (2) Asset Group “Brand guidelines” (colors/fonts) API support?

20 views
Skip to first unread message

Rajat Singh

unread,
Oct 30, 2025, 7:26:56 AM10/30/25
to Google Ads API and AdWords API Forum


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
  1. 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.

Google Ads API Forum Advisor

unread,
Oct 30, 2025, 1:29:38 PM10/30/25
to rajat.sing...@gmail.com, adwor...@googlegroups.com

Hi,

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

 
1. Is device targeting (include/exclude or bid modifiers) supported for Performance Max via the API as of May 2025? 1.1 If yes, which resource(s)/field(s) should we use (e.g., campaign_criterion.device, campaign-level setting, or a different entity)
  • With the introduction of device targeting, you now have the ability to specify at the campaign level where your Performance Max ads will appear. This feature provides a new layer of control, enabling you to optimize your campaign reach across various platforms. To set up device targeting, add a DeviceInfo criterion to your Performance Max campaign. 
  • Define DeviceInfo criteria using one of the predefined Device enums. The main use case for device targeting is to adjust bids for a specific device using the bid_modifier value of CampaignCriterion.
1.2 Are there constraints like only excludes or only certain device types (e.g., CTV only), or create-time only vs. updatable later
  • You can only target devices. Exclusion is not supported. There is no constraint on device types. To assist you further with regard to the 'IMMUTABLE_FIELD' error, please provide us with the complete API logs (request and response logs with request-id and request header) generated at your end.
  • I would request you to enable logging for the specific client library that you are using. You can refer to the guides Java.NetPHPPythonRuby or Perl to enable logging at your end. For REST interface requests, you can enable logging via the curl command by using the -i flag.
2. We haven’t found writeable fields on AssetGroup, AssetGroupAsset, or a related resource to push colors or font. 3.1 Are “Custom colors” and “Font” exposed in the Google Ads API for Performance Max asset groups?
 

Thanks,
 
Google Logo Google Ads API Team

Feedback
How was our support today?

rating1    rating2    rating3    rating4    rating5
[2025-10-30 17:28:38Z GMT] This message is in relation to case "ref:!00D1U01174p.!500Ht01vSE1S:ref" (ADR-00337961)



Reply all
Reply to author
Forward
0 new messages