General News
September 16, 2025
Safari Broke GCLID. Google’s Fixes, Session Attributes, and What Spectacle Is Doing About It
Vincent Gaemers

On this page
Safari broke GCLID. Google broke it more. Now they’re fixing it.
If you’ve been on LinkedIn or Reddit the past weeks, you’ve seen the panic. Safari’s privacy changes made GCLID tracking unreliable. That meant broken attribution pipelines everywhere.
Google’s answer was GBRAID and WBRAID, their “privacy-safe” IDs. The problem? Half of Google’s own stack didn’t work with them. Enhanced Conversions for Leads failed. One-per-click counting failed. Custom variables failed.
Teams like ours spent weeks building workarounds. Dual upload systems. Split pipelines. Documentation full of strange error codes. It wasn’t pretty.
Here are the key conflicts we kept running into:
- Only one click ID per conversion. If you sent gclid and gbraid together, Google rejected it.
- Enhanced Conversions couldn’t run with gbraid or wbraid.
- Custom variables broke if braid parameters were present.
- One-per-click actions weren’t allowed with braid at all.
- Duplicate or expired clicks triggered endless retries.
Some of these errors weren’t even in the developer docs. They just happened.
Below we listed all the known conflicts for Google Ads API conversion monitoring, and the ones we encountered. This will be updated once we have received new information. The last update is from the 16th of September 2025
Click ID conflicts
gclid+gbraid
Error:VALUE_MUST_BE_UNSET
Resolution: Use only one click ID per conversiongclid+wbraid
Error:VALUE_MUST_BE_UNSET
Resolution: Use only one click ID per conversiongbraid+wbraid
Error:GBRAID_WBRAID_BOTH_SET
Resolution: Use only one click ID per conversion
Enhanced Conversions for Leads
gbraid/wbraid+user_identifiers
Error:The field cannot be set., at conversions[0].user_identifiers
Resolution: Remove theuser_identifiersfield when using gbraid/wbraidgbraid/wbraid+ Enhanced Conversions for Leads
Error:VALUE_MUST_BE_UNSET
Resolution: Enhanced Conversions for Leads cannot use gbraid/wbraid
Conversion action type
gbraid/wbraid+ one-per-click counting
Error:Conversion actions that use one-per-click counting can't be used with gbraid or wbraid parameters
Resolution: Change toMANY_PER_CLICKcounting- Wrong conversion action type for Enhanced Conversions
Error:INVALID_CONVERSION_ACTION_TYPE
Resolution: Ensure the conversion action type isUPLOAD_CLICKS
Custom variables
gbraid/wbraid+custom_variables
Error:VALUE_MUST_BE_UNSET
Resolution: Removecustom_variableswhen using gbraid/wbraid
Enhanced Conversions for Web
gbraid/wbraid+ Enhanced Conversions for Web
Error:CONVERSION_NOT_FOUND
Resolution: Enhanced Conversions for Web is not supported with gbraid/wbraid
Temporal conflicts
conversion_date_timebefore click time
Error:CONVERSION_PRECEDES_EVENT
Resolution: Set the conversion time after the click time- Click older than the lookback window
Error:EXPIRED_EVENT
Resolution: Use a conversion action with a longer lookback window
Duplicate conflicts
- Same
order_idfor multiple conversions
Error:DUPLICATE_ORDER_ID
Resolution: Use unique order IDs - Same click ID + conversion time + action
Error:CLICK_CONVERSION_ALREADY_EXISTS
Resolution: Adjustconversion_date_time, or verify whether this is a retry - Multiple conversions in the same request
Error:DUPLICATE_CLICK_CONVERSION_IN_REQUEST
Resolution: Remove duplicates from the request
Account and access conflicts
- Wrong customer ID for the click
Error:INVALID_CUSTOMER_FOR_CLICK
Resolution: Use the customer ID that owns the click - Conversion action not found or not enabled
Error:NO_CONVERSION_ACTION_FOUND
Resolution: Enable the conversion action in the correct account - Customer data terms not accepted
Error:CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS
Resolution: Accept the customer data terms
Consent conflicts
- Setting consent to
UNKNOWN
Error:RequestError.INVALID_ENUM_VALUE
Resolution: Set it toDENIEDif the consent status is unknown
Call conversion conflicts
always_use_default_value= false for call conversions
Error:INVALID_VALUE
Resolution: Set it to true for WEBSITE_CALL and AD_CALL types
Attribution model conflicts
- Invalid attribution model
Error:CANNOT_SET_RULE_BASED_ATTRIBUTION_MODELS
Resolution: Use onlyGOOGLE_ADS_LAST_CLICKorGOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN
What changed on October 3
Google quietly rolled out support for GCLID + GBRAID together. That’s big. Instead of patching leaks, we can now rebuild for completeness. link
On top of that, a new attribute appeared: session_attributes (support documentation). It gives additional context when click IDs are missing. Think:
- Campaign source and ID
- Landing page URL and referrer
- Session start timestamp
- User agent
No cookies required. You can capture it with a small JavaScript helper or pipe it into Offline Conversion Import as key/value pairs.
This matters because when GCLID fails, Google’s AI can still model conversions from these rich signals. That means more attributed conversions, better bidding, and a setup that can handle future privacy shifts.
What we’re doing at Spectacle
We’ve been capturing all of these events since 1 August. Every Spectacle account now sends:
- Click IDs (gclid, gbraid, wbraid)
- Session attributes for extra context
- Conversion metadata like order ID and timestamp
All of this flows through server-side conversion tracking. That means cleaner, deduplicated events go straight from your Spectacle account into Google.
The result:
- Better conversion monitoring — fewer gaps in your reporting.
- Stronger ad signals — platforms optimise on real outcomes, not partial data.
- Improved marketing performance — smarter bids, more revenue impact.
For us, this shift has actually made things easier. By sending higher-quality data directly, our pipelines are simpler and our attribution more durable.
Why this matters
The story isn’t just “Safari broke GCLID.” It’s that most conversion architectures were fragile. Google’s fixes (finally) give us tools to build something more durable.
At Spectacle, we’ll keep documenting conflicts and resolutions so our clients don’t have to reinvent the wheel. Next up, we’ll share example code snippets and GTM recipes you can use to capture session_attributes yourself.
Why did Safari break GCLID tracking?
Safari's privacy updates blocked third-party cookies and limited URL parameters, which made GCLID IDs unreliable for conversion tracking.
What are GBRAID and WBRAID in Google Ads?
They are Google's privacy-safe replacements for GCLID on certain browsers. They allow attribution without exposing user-level identifiers.
Why did GBRAID and WBRAID cause conflicts?
Many Google Ads features didn't support braid IDs. Enhanced Conversions for Leads, one-per-click counting, and custom variables all failed when braid parameters were present.
What is session_attributes in Google Ads?
It's a new field that captures privacy-safe session context such as campaign source, landing page URL, timestamp, and user agent, giving more signals when click IDs are missing.
How does Spectacle help with these changes?
Spectacle captures click IDs, session attributes, and conversion metadata server-side. This means marketers send cleaner, more complete events to Google, improving conversion tracking and ad performance.
Latest insights