Fanvue Google Ads conversion tracking
Fanvue Google Ads conversion tracking captures gclid, gbraid and wbraid on your tracking link, then uploads offline and enhanced conversions so Google Ads sees every Fanvue subscription, renewal and purchase.
What you get
Fanvue Google Ads conversion tracking is a server-side integration in Fanvue API. It closes the gap between a Google Ads click and revenue that happens later on Fanvue.com, days or weeks after the click, by uploading conversions directly to Google's servers instead of relying on browser-only tags.
- gclid, gbraid and wbraid capture on every Fanvue tracking link, stored for 90 days
- Offline conversion import via the Google Ads API for subscriptions, renewals, PPV and tips
- Enhanced conversions for web using SHA-256 hashed email for better match rates
- Optional GA4 Measurement Protocol events and Consent Mode v2 support
How does Fanvue Google Ads conversion tracking work?
A fan clicks a Google Ads search, display or video ad that lands on a Fanvue tracking link. Google appends a click identifier, gclid for standard clicks, gbraid for app-to-web clicks on iOS, or wbraid for privacy-sandbox web clicks. Fanvue API's landing script stores whichever identifier is present in a first-party cookie. When the fan later converts on Fanvue, Fanvue API builds a conversion record and uploads it to Google Ads using the Google Ads API's ConversionUploadService.UploadClickConversions call.
- Fan clicks a Google Ads ad linking to a Fanvue tracking link.
- The landing page stores gclid, gbraid or wbraid in a first-party cookie for 90 days.
- The fan subscribes, renews, buys a PPV message or tips on Fanvue.
- Fanvue API hashes the fan's email and builds the conversion upload.
- Fanvue API uploads the conversion to the matching conversion action in Google Ads.
Before you start
Have these five things ready before you open the Fanvue API dashboard:
- A Google Ads account with conversion tracking enabled
- A conversion action created for each Fanvue event you want to track (subscribe, purchase)
- API access with a developer token and OAuth credentials for that Google Ads account
- A Fanvue tracking link for the creator you are running ads for
- A Fanvue API key with the ads-tracking scope enabled
Step-by-step setup
01Create a conversion action
In Google Ads, create a conversion action for each Fanvue event you want counted, typically one for subscriptions and one for purchases (renewals, PPV, tips). Note the conversion action ID.
- Conversion action
- Fanvue - Subscribe
- Category
- Sign-up
- Value
- Use different values for each conversion
02Generate API credentials
Request a developer token in the Google Ads API Center and set up OAuth credentials for the account that owns the conversion actions. These allow server-side conversion uploads.
- Developer token
- ••••••••Xy4a
- OAuth client
- Configured
03Connect in the Fanvue API dashboard
Paste the customer ID, developer token and OAuth credentials into Ads Tracking → Google Ads in the Fanvue API dashboard. Fanvue API stores the credentials encrypted.
04Add your tracking link to Google Ads
Use your Fanvue tracking link as the final URL with the {gclid} value track parameter enabled, so Google Ads automatically appends the click ID.
- Final URL
- link.apifanvue.com/c/creator_xyz?gclid={gclid}
05Map Fanvue events to conversion actions
Map each Fanvue event to the matching conversion action ID you created in step 1. This mapping controls which conversion action receives the uploaded conversion.
- New subscription
- Fanvue - Subscribe
- Renewal / PPV / Tip
- Fanvue - Purchase
06Send a test event
Click "Send test event" in the Fanvue API dashboard, then check the Google Ads Diagnostics tab for the conversion action to confirm it was received without a partial failure.
Capture the click ID
Google Ads can append gclid, gbraid or wbraid depending on the click's device and consent context. Fanvue API's tracking-link script reads whichever one is present and stores it in a first-party cookie for 90 days, matching the maximum age Google Ads accepts for offline conversion uploads.
// capture-gclid.ts - run on your Fanvue tracking-link landing page
function captureGoogleClickIds() {
const params = new URLSearchParams(window.location.search);
const ids = { gclid: params.get("gclid"), gbraid: params.get("gbraid"), wbraid: params.get("wbraid") };
const ninetyDays = 90 * 24 * 60 * 60 * 1000;
const expires = new Date(Date.now() + ninetyDays).toUTCString();
for (const [key, value] of Object.entries(ids)) {
if (!value) continue;
document.cookie = `_${key}_fv=${value}; expires=${expires}; path=/; SameSite=Lax; Secure`;
}
}
captureGoogleClickIds();Event mapping
Fanvue events map to Google Ads conversion actions and GA4 events as follows.
| Fanvue event | Google Ads / GA4 event | Required / recommended parameters |
|---|---|---|
| Tracking link click | page_view (GA4) | Recommended: gclid, gbraid or wbraid, page_location |
| Free follow / signup | sign_up | Required: hashed email, gclid, conversion_date_time |
| New subscription | subscribe (conversion action) | Required: gclid, conversion_value, currency_code |
| Renewal | purchase (conversion action) | Required: conversion_value, currency_code, order_id |
| PPV message purchase | purchase (conversion action) | Required: conversion_value, currency_code, order_id |
| Tip | purchase (conversion action) | Required: conversion_value, currency_code, order_id |
Full payload example
The same offline conversion upload can be sent with a raw cURL call to the Google Ads API, the Fanvue API TypeScript client, or a plain Python request. All three produce the same conversion record. A fourth snippet shows the optional GA4 Measurement Protocol call.
curl -X POST "https://googleads.googleapis.com/v17/customers/CUSTOMER_ID:uploadClickConversions" \
-H "Authorization: Bearer OAUTH_ACCESS_TOKEN" \
-H "developer-token: DEVELOPER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"conversions": [
{
"gclid": "<gclid>",
"conversionAction": "customers/CUSTOMER_ID/conversionActions/CONVERSION_ACTION_ID",
"conversionDateTime": "2025-03-01 14:32:11+00:00",
"conversionValue": 9.99,
"currencyCode": "USD",
"orderId": "fanvue_sub_abc123",
"userIdentifiers": [
{ "hashedEmail": "<sha256(lowercase(trim(email)))>" }
]
}
],
"partialFailure": true
}'Deduplication
Google Ads deduplicates conversions by order_id rather than a shared event_id. Fanvue API sets order_id to a stable identifier for each conversion, for example fanvue_sub_abc123, so retried uploads or a combination of enhanced conversions and offline conversion import never double count the same subscription or purchase.
Matching and privacy
Fanvue API only sends hashed personal data for enhanced conversions. Email addresses are trimmed of whitespace, lowercased, and hashed with SHA-256 before they leave Fanvue API's servers. Raw email addresses are never transmitted to Google Ads.
Consent Mode v2 signals, ad_user_data and ad_personalization, are read from your consent banner and passed with every conversion. If a fan has not granted ad_user_data consent, Fanvue API withholds the enhanced conversion fields and relies on modeled conversions instead, matching how Google Ads expects consent-aware traffic to behave.
Test and verify
Open the Diagnostics tab on the conversion action in Google Ads to see upload health, recent conversions and any partial failures. Send a test event from the Fanvue API dashboard and confirm it appears in Diagnostics within a few hours, since offline conversion imports are not always instant. A good result shows the conversion listed with status "Recorded" and the correct value and currency.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Conversions show "Unverified" in Google Ads | Enhanced conversions not enabled on the conversion action | Turn on enhanced conversions for web in the conversion action settings and confirm hashed email is being sent |
| Offline conversions never appear | gclid missing or expired before upload (gclid expires after 90 days) | Confirm the tracking-link cookie is set on click and upload conversions well within the 90-day window |
| UploadClickConversions returns PARTIAL_FAILURE | Malformed conversion_date_time or wrong conversion action resource name | Match the RFC 3339-style timestamp format and verify the customers/{id}/conversionActions/{id} path |
| App-to-web installs from Google Ads not attributed | gbraid or wbraid not captured for iOS or privacy-sandbox traffic | Capture all three click IDs, gclid, gbraid and wbraid, on the landing page script |
| GA4 events missing from Google Ads conversion import | GA4 property not linked to the Google Ads account, or event not marked as a conversion | Link GA4 to Google Ads in Admin, then mark the imported event as a conversion in Google Ads |
| Consent Mode blocks conversion modeling | ad_user_data or ad_personalization not set before the tag fires | Set both Consent Mode v2 signals from your consent banner before any tracking call runs |
| Diagnostics tab shows "No recent conversions" | Conversion action paused or no conversions uploaded in the last 7 days | Check the conversion action is not paused and confirm Fanvue API is sending uploads on schedule |
Also track on Meta / TikTok / Snapchat
Back to the Fanvue ads tracking overview, or compare plans on Fanvue API pricing.
Frequently asked questions
Ready to build on Fanvue?
Get API keys, docs and MCP access in one click. Free trial, no credit card.