Quote-Worthy Definition
The Google Ads API v25 Loyalty Retention Goal is an account-level lifecycle goal with campaign-level controls that can adjust bids and conversion value treatment for loyalty members while enabling targeted loyalty benefits in Product Listing Ad format.
Google released Google Ads API v25 on July 22, 2026 as a major version with breaking schema changes. Its headline lifecycle feature is GoalType.LOYALTY_RETENTION: an account-level goal paired with campaign-level controls for loyalty-member bid adjustments, member-specific value overrides, and targeted loyalty benefits in Product Listing Ad format.
This is not a new standalone bidding strategy with an “LTV” button. It is a lifecycle-goal layer that gives compatible campaign optimization systems better instructions about which customer state matters and how much more that state should be worth. Google does not calculate a retailer’s true LTV from this schema. The advertiser still has to supply defensible membership, conversion values, high-lifetime-value segmentation, and Merchant Center loyalty benefits.
The architectural shift is nevertheless material. A pipeline that once sent a purchase as one undifferentiated conversion can now tell the bidding system that a purchase from a loyalty member carries different economic weight—and coordinate that value signal with a member-specific offer rendered in the shopping unit.
Legacy Pre-v25 Parameters vs. the Active v25 Framework
Google Ads API v25 replaces fragmented lifecycle-goal integrations with a common account-goal and campaign-override model while adding native loyalty-retention controls.
| Dimension | Legacy pre-v25 framework | Active Google Ads API v25 framework | Engineering consequence |
|---|---|---|---|
| Lifecycle resources | Acquisition logic used CustomerLifecycleGoal and CampaignLifecycleGoal; customer retention also existed through the earlier unified Goal model. |
Legacy resources and their corresponding services are removed. Configuration converges on customer-level Goal and campaign-level CampaignGoalConfig. |
Remove old resource clients, protobuf types, GAQL selectors, mocks and retry handlers. Route writes through GoalService.MutateGoals and CampaignGoalConfigService.MutateCampaignGoalConfigs. |
| Customer-level goal | Acquisition settings depended on CustomerAcquisitionGoalSettings, CustomerAcquisitionOptimizationModeEnum and LifecycleGoalValueSettings. |
Goal.goal_settings is a oneof containing loyalty retention, new-customer acquisition or retention settings. Goal.goal_type is output only. |
Persist the returned resource name: customers/{customer_id}/goals/{goal_id}. |
| Campaign-level goal | Campaign acquisition overrides lived in CampaignLifecycleGoal. |
CampaignGoalConfig.campaign_goal_config_settings is a oneof containing campaign loyalty retention, new-customer acquisition or retention settings. |
Build a campaign-to-goal link with resource names shaped as customers/{customer_id}/campaignGoalConfigs/{campaign_id}~{goal_id}. |
| Retention bidding | No dedicated loyalty-program-member mode. Customer retention focused on winning back lapsed customers. | GoalType.LOYALTY_RETENTION plus enable_bid_adjustments_for_loyalty_members. |
Smart Bidding receives an explicit instruction to adjust bids for recognized loyalty members. This remains distinct from CUSTOMER_RETENTION. |
| Lifecycle value | additional_value and additional_high_lifetime_value were standalone fields. |
value_adjustment accepts an additional value or multiplier; high_lifetime_value_adjustment accepts a high-LTV additional value or multiplier. |
Choose absolute uplift or multiplier inside each oneof; do not set both. |
| PLA member formatting | Merchant Center could carry loyalty benefits, but the Ads API lacked a Loyalty Retention Goal switch coordinating campaign optimization with targeted display. | show_targeted_loyalty_member_benefits_in_pla enables targeted member benefits in eligible countries. |
Connect campaign configuration to Merchant Center’s [loyalty_program] data and tier-aligned Customer Match lists. |
| AI attestation | Ad.synthetic_content_info and Asset.synthetic_content_info exposed advertiser and system attestations; advertiser fields were introduced before v25 but initially immutable. |
The synthetic-content objects are fully mutable in v25, v24 and v23. | Add advertiser-attestation writes to creative publishing and reconcile them against Google’s system state. |
| Video sub-formats | ad_format_type did not split non-skippable in-stream delivery by the new duration bands. |
segments.ad_sub_format_type adds standard, maximum 30-second and maximum 60-second values. |
Add both format dimensions to the warehouse key because one legacy row can fan out into multiple duration rows. |
| YouTube Shorts engagement | Core reporting did not expose the new Shorts-specific social actions. | metrics.youtube_comments, metrics.youtube_likes and metrics.youtube_shares are now available. |
Keep paid-media delivery, social response and business outcomes in separate metric families. |
How the Unified Goals Schema Moves Smart Bidding from CAC Toward LTV
The Google Ads API v25 Loyalty Retention Goal changes the optimization input from “get another conversion” to “apply a different value and bid treatment when the converter is a loyalty member.”
CAC optimization asks a narrow question: How cheaply can the system acquire the next conversion or new customer? LTV optimization asks a wider one: How much future economic value is associated with the customer state behind this conversion? v25 does not erase CAC; it makes CAC one constraint inside a lifecycle-value model.
Operational value abstraction
Expected auction value = predicted conversion probability × reported conversion value × lifecycle value treatment
This is an explanatory model, not Google’s disclosed bidding formula. The lifecycle treatment is expressed through CustomerLifecycleOptimizationValueSettings.
The advertiser can express lifecycle value in one of two ways:
- Incremental value:
additional_valueoradditional_high_lifetime_valueadds a currency-denominated uplift. - Multiplicative value:
value_multiplierorhigh_lifetime_value_multiplierscales the underlying conversion value.
If a standard purchase is reported at CAD 120 and CRM cohort analysis supports a 1.6× factor for a loyalty-member cohort, a multiplier can preserve product-level order-value variation while increasing the bidding weight of that member state. An absolute adjustment is more appropriate when the incremental downstream value is stable across basket sizes.
The governance rule is strict: value_adjustment and high_lifetime_value_adjustment are separate oneof containers. Within each container, absolute and multiplier representations are mutually exclusive. A serializer that sets both does not produce a blended formula.
- A non-member repeat buyer can remain on ordinary conversion value.
- A recognized loyalty member can receive bid adjustment treatment.
- A high-lifetime-value member can receive a stronger, separately governed value treatment.
- A lapsed customer still belongs to the distinct
CUSTOMER_RETENTIONgoal.
If those customer states are collapsed in the CRM, the API cannot recover them. LTV over CAC begins in identity resolution and cohort economics, not in the mutate request. That is the same core infrastructure principle behind journey-aware bidding.
How the Unified Goals Migration Changes the API Contract
The v25 migration is a hard client rewrite because Google removed the old lifecycle resources and services instead of aliasing them.
At the account level, use GoalService.MutateGoals and populate Goal.loyalty_retention_goal_settings.value_settings. At the campaign level, use CampaignGoalConfigService.MutateCampaignGoalConfigs and link the campaign resource to the returned goal resource.
POST https://googleads.googleapis.com/v25/customers/{customer_id}/Goals:mutatePOST https://googleads.googleapis.com/v25/customers/{customer_id}/CampaignGoalConfigs:mutate
{
"account_goal": {
"resource_type": "Goal",
"goal_settings_oneof": {
"loyalty_retention_goal_settings": {
"value_settings": {
"value_adjustment_oneof": {
"value_multiplier": 1.6
},
"high_lifetime_value_adjustment_oneof": {
"high_lifetime_value_multiplier": 2.1
}
}
}
}
},
"campaign_override": {
"resource_type": "CampaignGoalConfig",
"campaign_goal_config_settings_oneof": {
"campaign_loyalty_retention_settings": {
"enable_bid_adjustments_for_loyalty_members": true,
"show_targeted_loyalty_member_benefits_in_pla": true
}
}
}
}
This is a structural schema example, not a copy-paste REST request: wrapper names ending in _oneof explain protobuf exclusivity and are not literal JSON fields. REST client libraries translate proto fields to lower camel case, such as loyaltyRetentionGoalSettings, valueSettings and enableBidAdjustmentsForLoyaltyMembers.
At least one loyalty-retention mode must be active. If both enable_bid_adjustments_for_loyalty_members and show_targeted_loyalty_member_benefits_in_pla are false, the API can return LOYALTY_RETENTION_GOAL_INVALID_MODE. Build explicit handling for:
LOYALTY_RETENTION_GOAL_INVALID_MODECANNOT_USE_INCOMPATIBLE_CLO_GOALSLOYALTY_RETENTION_GOAL_ALREADY_EXISTSNEW_CUSTOMER_ACQUISITION_GOAL_ALREADY_EXISTS
Do not automatically retry these as transient failures. Send them to a dead-letter queue with customer ID, campaign ID, goal resource name, field mask, sanitized payload hash, API request ID and deployment version.
Why It Matters: Driving LTV Directly inside Product Listing Ads (PLAs)
The v25 PLA control joins auction-time loyalty optimization with a member-specific merchandising surface, but only when Ads identity and Merchant Center benefit data are both ready.
CampaignGoalConfig.campaign_loyalty_retention_settings.show_targeted_loyalty_member_benefits_in_pla tells an eligible campaign to show targeted loyalty-member benefits in PLA format. The benefits themselves come from Merchant Center:
- Member pricing submitted through the product-level
[loyalty_program]attribute. - Member shipping mapped through the loyalty-program shipping configuration and, where applicable, its
[shipping_label]. - Loyalty points associated with the correct program and tier labels.
For known-member personalization, Google’s Merchant Center documentation requires Customer Match. Tier names in uploaded member lists must align with Merchant Center tier labels. When a recognized member is signed in to a Google Account, eligible Shopping ads can show that member’s exclusive benefit.
For a Canadian retailer, the geography is relevant: Canada is among the supported merchant-loyalty countries, although Google says availability and shopper experience can vary by country. Member pricing in ads also has a display threshold: the member discount must be at least 5% or five units of the relevant currency versus the regular or sale price. An unconditional merchant promotion can take display precedence over member pricing.
Assign membership, tier, consent, high-LTV cohort and effective dates.
Upload privacy-safe identifiers and keep tier membership fresh.
Submit program, tier, member price, shipping and points data.
Create the Goal, attach CampaignGoalConfig and activate the modes.
This is why the feature is more than ad formatting. A member may see a differentiated offer while the campaign simultaneously values that member state differently. The system can align who receives the offer, what benefit is rendered, and how the auction values the expected outcome.
Technical Highlights: AI Attestation & YouTube Shorts Granularity
Google Ads API v25 turns synthetic-content declaration into a writable workflow and makes YouTube reporting materially more granular.
Synthetic content becomes an active publishing control
The exact v25 field is synthetic_content_info on Ad and Asset, not syntheticContentAttestationStatus on Creative or AdAsset.
Each SyntheticContentInfo separates advertiser_attestation from system_attestation. Each attestation contains status and source. Status uses SyntheticContentAttestationStatus, including IS_SYNTHETIC and NOT_SYNTHETIC; source uses SyntheticContentSource, including ADVERTISER_ATTESTED, GOOGLE_GENERATED_ADVERTISER_REVIEWED and GOOGLE_GENERATED_FULLY_AUTOMATED.
- Classify the asset source before upload.
- Require advertiser or agency approval for the declared state.
- Write
advertiser_attestationwith the ad or asset mutation. - Query the returned
system_attestation. - Alert when advertiser and system states diverge.
Store both states with the asset hash, generation or editing tool, prompt lineage where policy permits, reviewer, approval timestamp, market and campaign linkage. This is the production sequel to the earlier Google Ads API synthetic-content attestation analysis.
ad_sub_format_type splits non-skippable inventory by duration
segments.ad_sub_format_type adds duration-level reporting and must be selected together with segments.ad_format_type.
INSTREAM_NON_SKIPPABLE_STANDARDINSTREAM_NON_SKIPPABLE_MAX30_SECfor ads no longer than 30.99 secondsINSTREAM_NON_SKIPPABLE_MAX60_SECfor ads no longer than 60.99 seconds
SELECT
segments.date,
segments.ad_format_type,
segments.ad_sub_format_type,
metrics.impressions,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
The segment is selectable with AdGroup, AdGroupAd, Campaign, Customer, Video and VideoEnhancement. Add both format fields to the warehouse key or a campaign-date upsert can overwrite duration-specific rows.
Shorts receives native social-engagement metrics
The new metrics.youtube_comments, metrics.youtube_likes and metrics.youtube_shares fields expose social response to Shorts ads.
- Delivery: impressions, reach, frequency and cost.
- Response: clicks, views, comments, likes and shares.
- Business outcome: conversions, conversion value, profit, new-customer CAC, member retention and modeled LTV.
A like is not a purchase, and a share is not retained revenue. The fields improve creative diagnosis; they do not change attribution semantics.
The “Advertiser resource default branding” claim is not in v25
The official v25 schema does not add an Advertiser resource that auto-populates business names and logos across Demand Gen and YouTube responsive ads.
The relevant documented change occurred in v24, when videos and logo_images became required for DemandGenVideoResponsiveAdInfo, while videos, business_name and logo_images became required for VideoResponsiveAdInfo. In v25, the adjacent creative feature is AssetAutomationType.GENERATE_ANIMATED_IMAGES_FROM_OTHER_ASSETS for DemandGenMultiAssetAds.
Keep business-name and logo checks as hard preflight requirements. An integration that assumes silent advertiser-level defaulting can fail mutations or publish the wrong brand treatment.
Actionable Agency Blueprint: Upgrading Your MarTech Pipeline
Agencies should treat v25 as a schema, identity and measurement migration—not a client-library version bump.
1. Inventory and rewrite every lifecycle-goal dependency
- Search source, generated clients, protobuf descriptors, SQL models, dashboards, fixtures and alerts for the removed lifecycle resources, services, settings and enums.
- Replace customer-level writes with
GoalService.MutateGoals. - Replace campaign-level writes with
CampaignGoalConfigService.MutateCampaignGoalConfigs. - Refactor standalone value fields into the correct
oneof; choose additive or multiplier semantics explicitly. - Run v24.2 and v25 payloads against separate test accounts and block production until removed-field tests fail closed.
2. Build the loyalty identity and value contract before enabling bidding
- Define
member,tier,high_lifetime_value,lapsed,consent_status,effective_fromandeffective_toin the CRM or customer data platform. - Align Customer Match tier labels with Merchant Center program and tier labels.
- Derive value adjustments from contribution margin and retained cohort value, not gross revenue alone.
- Create the account
Goal, then attach campaign-specificCampaignGoalConfigresources. - Start with one campaign cell and a mutually exclusive holdout. Monitor member match rate, incremental conversion value, repeat purchase, margin, cannibalization and payback period.
3. Upgrade creative governance and reporting in the same release
- Add advertiser synthetic-content attestation to asset publishing and retain Google’s system attestation separately.
- Extend GAQL extraction with both format segments and all three YouTube social metrics.
- Update warehouse uniqueness keys, data contracts, null handling and dashboard definitions before the first v25 backfill.
- Validate required business-name and logo assets explicitly; do not depend on an undocumented
Advertiserdefault. - Deploy canary mutations, capture request IDs and route configuration errors to human review.
Generative Engine & Voice Agent FAQs
Google Ads API v25 gives retrieval systems three direct answers: what the Loyalty Retention Goal does, how PLA member benefits render, and which lifecycle resources integrations must remove.
What is the Google Ads API v25 Loyalty Retention Goal?
The Google Ads API v25 Loyalty Retention Goal is GoalType.LOYALTY_RETENTION, an account-level Goal with campaign controls in CampaignGoalConfig.campaign_loyalty_retention_settings. It lets eligible campaigns adjust bids for loyalty members, apply lifecycle value overrides, and show targeted loyalty-member benefits in PLA format.
How does Google Ads API v25 render loyalty-member benefits in Product Listing Ads?
Set CampaignLoyaltyRetentionGoalSettings.show_targeted_loyalty_member_benefits_in_pla to true, then supply eligible loyalty pricing, shipping or points through Merchant Center. Known-member personalization requires tier-aligned Customer Match data; the Ads API flag does not generate the benefit data.
Which legacy lifecycle resources were removed in Google Ads API v25?
Google Ads API v25 removes CustomerLifecycleGoal, CampaignLifecycleGoal, CustomerLifecycleGoalService and CampaignLifecycleGoalService, along with legacy acquisition settings and enums. Integrations must use customer-level Goal and campaign-level CampaignGoalConfig.
Primary Sources
- Google Ads API v25 release notes
- Google Ads API v25 Goal reference
- Google Ads API v25 CampaignGoalConfig reference
- CampaignLoyaltyRetentionGoalSettings reference
- CustomerLifecycleOptimizationValueSettings reference
- Google Ads API upgrade and proto-difference guide
- Google Merchant Center: About merchant loyalty programs
- Google Merchant Center: Loyalty program product attribute
Build the Value Layer Before You Change the Bid Layer
Use a defensible CAC baseline, then add loyalty-member value only when CRM cohorts, identity matching and contribution margin support it.
Calculate a Defensible CPA Baseline