Custom naming templates configured in tenant policy settings are ignored by the GAM adapter. Instead, the GAM adapter reads from AdapterConfig fields which are never populated by the policy settings UI.
Example:
Configured template (in tenant policies): {brand_name} - {buyer_ref}
Expected order name: Acme Corp - mb_x2ypSo_OTE
Actual order name: Campaign mb_x2ypSo_OTE - Feb 09-28, 2026 [mb_x2ypSo_OTE]
The actual name uses the default template {campaign_name|brand_name} - {date_range} because the custom template is stored in Tenant.order_name_template but the GAM adapter reads from AdapterConfig.gam_order_name_template.
Root Cause:
Configuration disconnect between Tenant and AdapterConfig
GAM adapter reads from AdapterConfig (lines 623-625, google_ad_manager.py):
if adapter_config.gam_order_name_template:
order_name_template = adapter_config.gam_order_name_template
But policy settings UI writes to Tenant (lines 371-375, policy_service.py):
if "order_name_template" in updates:
tenant.order_name_template = updates["order_name_template"]
Custom naming templates configured in tenant policy settings are ignored by the GAM adapter. Instead, the GAM adapter reads from AdapterConfig fields which are never populated by the policy settings UI.
Example:
Configured template (in tenant policies): {brand_name} - {buyer_ref}
Expected order name: Acme Corp - mb_x2ypSo_OTE
Actual order name: Campaign mb_x2ypSo_OTE - Feb 09-28, 2026 [mb_x2ypSo_OTE]
The actual name uses the default template {campaign_name|brand_name} - {date_range} because the custom template is stored in Tenant.order_name_template but the GAM adapter reads from AdapterConfig.gam_order_name_template.
Root Cause:
Configuration disconnect between Tenant and AdapterConfig
GAM adapter reads from AdapterConfig (lines 623-625, google_ad_manager.py):
But policy settings UI writes to Tenant (lines 371-375, policy_service.py):