Google CM360 - Floodlights
What Is Campaign Manager 360 - Floodlights?
Campaign Manager 360 (CM360) is a comprehensive advertising management platform developed by Google. It offers advertisers a centralized solution for planning, executing, and measuring digital marketing campaigns across multiple channels and devices. With features like audience targeting, ad creative management, and real-time reporting, CM360 empowers marketers to optimize their campaigns for maximum effectiveness and return on investment.
Product Type: Advertising
Integration Type: Starter Kit & ID Sync
Event Source Type: Web and Mobile Browser
Event Scope: Conversion Events Only
Capabilities
- Sends server-side conversion events to CM360 Floodlights via the CM360 Offline Conversions API v5
- Supports conversion attribution using a single identifier per integration (e.g., gclid, dclid, mobileDeviceId, or matchId)
- Supports custom Floodlight variables
- Retrieves and stores Google Click ID (
gclid) and Display Click ID (dclid) for attribution - Stores execution markers in both cookie and IndexedDB storage for long-term persistence (365 days)
- Injects resolved conversion data and attribution IDs into the server-side event payload under
context.providers.googleGtag - Enhanced Conversions support (when enabled in CM360) — allows including
userIdentifierswith hashed PII for improved match rates
Considerations
- Single Identifier Per Integration - Only one identifier can be used at a time per CM360 - Floodlights integration. Supported identifiers are:
gclid,dclid,matchId, andmobileDeviceId. Select the identifier that aligns with your attribution setup and configure it consistently across all events. - MatchId Upload Timing - When uploading offline conversions using
matchId, Google recommends delaying the upload by 2 hours from the time of the Floodlight call to ensure the matchId is properly processed. Uploading too soon results in NOT_FOUND errors. See Google's Conversions FAQ. Contact your MetaRouter Customer Support Rep to configure a 2-hour delay. - Quantity & Value API Requirements - The
quantityandvaluefields were always required by the CM360 API, but previous API versions silently defaulted them when not provided (quantitydefaulted to0, causing aggregate conversion counts of0). With API v5, explicit mappings are required. See Google's known issues.quantitymust be a string integer (e.g.,"1","5") — float values like"0.00"will causebad float stringAPI errors. - Geolocation Not Supported - Geolocation data is not supported by this integration.
- OAuth 2.0 Not Supported - OAuth 2.0 client credentials (Desktop app flow) are not supported. This integration requires Google Cloud Service Account credentials with JWT-based authentication. Contact your GCP Admin or SRE department to establish the appropriate Service Account.
- API Quota Planning - The default CM360 API quota is 50,000 calls/day per GCP project. Calculate your expected daily event volume before implementation to determine if a quota increase is needed. Monitor usage in the GCP Console under APIs & Services > Dashboard > Campaign Manager 360 API. Enterprise customers have successfully requested quota increases from Google.
- Custom Variable Length - Custom Floodlight variable values are capped at 100 UTF-8 characters. As of February 2026, MetaRouter automatically truncates values exceeding this limit before sending to the CM360 API.
API Quotas & Limits
| Limit Type | Value | Notes |
|---|---|---|
| CM360 API Daily Quota | 50,000 calls/day per project | Default limit; can request increase from Google |
| MetaRouter Batch Size | 1,000 events per batch | Hardcoded system limit |
| Custom Variable Length | 100 characters max | Per custom Floodlight variable value |
Recommendations:
- Calculate your expected daily event volume before implementation to determine if a quota increase is needed
- Monitor API usage in Google Cloud Platform (GCP) Console to avoid hitting daily limits
- Enterprise customers have successfully requested quota increases from Google
Getting Started - From Your CM360 Account
Prerequisites
- You must have a Campaign Manager 360 account. See Advertisers/Agencies for signup information.
- Your Campaign Manager 360 account must be enabled for API Access. Most accounts have this enabled by default; if you're not sure, contact your account representative or the Campaign Manager 360 support team for assistance.
- You must have a user profile with access to this account. Have your Campaign Manager 360 account administrator create a user profile associated with this account.
- Check user profile permissions in the Campaign Manager 360 UI. These control what the user profile can access from the API. There are no separate API permissions.
- Manage user access
- NOTE: You will need to grab your user profile ID for the CM360 playbook in MetaRouter
Create User Profile with Required Permissions
To use the CM360 Offline Conversions API, you must create a user profile with the appropriate permissions:
- In CM360, navigate to Admin > User Profiles
- Create a new user profile or edit an existing one
- Assign the user profile to a User Role that includes the following permissions:
- Insert offline conversions (REQUIRED for this integration)
- Other permissions as needed for your use case
- Note the Profile ID — you will need this for the MetaRouter configuration
Critical: Without the "Insert offline conversions" permission, the integration will fail to send conversion events to CM360.
Generate Credentials (Service Account)
All requests to the Campaign Manager 360 API must be authorized. The CM360 integration requires Google Cloud Service Account credentials.
GCP User Requirements for Setup
The person performing the GCP setup needs these IAM roles on the GCP project:
| Role | Purpose |
|---|---|
Service Usage Admin (roles/serviceusage.serviceUsageAdmin) | Enable the CM360 API |
Service Account Creator (roles/iam.serviceAccountCreator) | Create the service account |
Service Account Key Admin (roles/iam.serviceAccountKeyAdmin) | Generate/download the JSON key |
Alternatively, a user with Owner or Editor on the project can perform all steps.
Pre-requisite: A GCP project must already exist — ideally the same project linked to the customer's existing DV360/CM360 account.
Service Account GCP Permissions (Not Required)
When creating the service account in GCP, the "Grant this service account access to project" step (selecting a role) is optional and can be skipped. The service account does not need any GCP-level IAM roles for CM360.
All required permissions are granted in CM360 itself when the service account email is added as a User Profile with the "Insert offline conversions" permission. CM360 API authorization happens through JWT authentication + CM360 User Profile permissions — not GCP IAM roles.
Steps
- Create service account in GCP
- Skip the "Permissions" step (click Done without selecting a role)
- Manage Keys > Add Key > Create New Key > JSON
- Download JSON key file
- Add service account email as User Profile in CM360 with "Insert offline conversions" permission
For detailed instructions, refer to the Service Accounts guide.
Floodlight Activities
Floodlight activities correspond to specific events you'd like to track, such as conversions on your website or adding users to audience lists.
Required Information:
- Floodlight Configuration ID: Use your Advertiser ID
- Floodlight Activity ID: Found in CM360 > Advertiser level > Floodlights dashboard
You will assign a Floodlight Activity ID to every event within the integration.
Floodlight Configuration Requirements:
Based on testing, Floodlight impressions will appear in reporting when:
| Setting | Requirement |
|---|---|
| Tag format | Must select "Image tag" (see note below) |
| Category | Optional — works with or without |
| Expected URL | Optional — works with correct, incorrect, or empty |
Enabling Image Tag Format: If the Tag format column is not visible, Google defaults to "Google tag" format, which won't work for server-side conversions. To enable Image tag selection: navigate to Floodlight > Configuration > Tags and select Dynamic. This allows you to manually set each Floodlight to a different tag type — you can keep existing Google tag Floodlights while setting new ones for server-side purposes as Image tag.
Adding a CM360 - Floodlights Integration
Google Tag Sync (ID Sync Configuration)
To gather the gclid value and fire client-side Floodlight conversion events, you must configure a Google Tag sync.
| Architecture | Description | Documentation |
|---|---|---|
| CM360 Sync - Decoupled | CM360 as a separate sync under parent Google Tag Settings | CM360 Sync (Decoupled) |
| Google Tag Sync - Coupled (Legacy) | CM360 bundled with GA4/Google Ads in single Google Gtag sync | CM360 Sync (Coupled) |
CM360 - Floodlights Starter Kit
From the integration library, add a "CM360 - Floodlights" integration. Then, fill out the Connection Parameters:
| Connection Parameter | Description |
|---|---|
CREDENTIALS_JSON | Paste in Service Account credentials in JSON format. Must be type "service_account". |
CONFIG_ID | Use your Advertiser ID (Floodlight Configuration ID). |
PROFILE_ID_STR | The Profile ID string associated with your user. See Manage user access. |
Add Integration to Pipeline
Once you've adjusted the starter kit:
- Go to Pipelines > Select your Pipeline
- Click the Right drop-down > Add Integration
- Select your CM360 - Floodlights integration and revision > Deploy
Event Mappings
MetaRouter provides all event mappings that CM360 integrations typically require. You may add custom events, parameters, or mappings in accordance with CM360's API documentation.
Global Mappings
Global mappings apply to all events. If your parameter names don't match the Expected Inputs, overwrite them with your own.
| Output Key | Description | Expected Input |
|---|---|---|
floodlightConfigurationId Required | String: Floodlight configuration used by the specified activity | Enrichment – $$CONFIG_ID$$ |
kind Required | String: Identifies resource type | Enrichment – dfareporting#conversion |
timestampMicros Required | String: Conversion timestamp in microseconds since Unix epoch | Expression – RFC3999 timestamp converted to epoch microseconds |
Click, Mobile Device and Match ID(s) Required | Object: Outputs exactly one identifier in priority order: gclid → dclid → mobileDeviceId → matchId. gclid and dclid are extracted as the third segment after splitting on .; matchId falls back to anonymousId | Expression – selects first available identifier |
ordinal Required | String: Deduplication identifier for the conversion | messageId |
quantity Required | String: Number of items (must be string integer, NOT float). Floor of "1" enforced. | Varies by event (see Event Specific) |
value Required | Float: Revenue amount for the conversion | Varies by event |
customVariables | Array: Custom Floodlight variable u1 mapped from context.page.title. Max 100 chars per value. As of Feb 2026, MetaRouter truncates custom variable values to 100 UTF-8 bytes before sending to the CM360 API. | Expression – maps context.page.title to u1 variable |
Event Specific
All default parameters are required as of API v5.
page
| Output Key | Description | Expected Input |
|---|---|---|
floodlightActivityId Required | String: Floodlight Activity ID for this event | Enrichment – ADD_FLOODLIGHT_ACTIVITY_ID_HERE |
value Required | Float: Revenue amount | Enrichment – 0 |
quantity Required | String: Number of items | Enrichment – "1" |
Product Added
| Output Key | Description | Expected Input |
|---|---|---|
floodlightActivityId Required | String: Floodlight Activity ID for this event | Enrichment – ADD_FLOODLIGHT_ACTIVITY_ID_HERE |
value Required | Number: Revenue amount | Expression – TOTAL_VALUE calculated from product properties |
quantity Required | String: Number of items | Expression – properties.quantity converted to string, with floor of "1" |
Quantity Transform (Lua):
local q = input.properties.quantity
if q and q > 0 then
return TO_STRING(q)
end
return '1'Order Completed
| Output Key | Description | Expected Input |
|---|---|---|
floodlightActivityId Required | String: Floodlight Activity ID for this event | Enrichment – ADD_FLOODLIGHT_ACTIVITY_ID_HERE |
value Required | Number: Revenue amount | properties.total |
quantity Required | String: Total items in order | Expression – Sum of properties.products[].quantity with floor of "1" per item |
cartData.items | Array: Cart items with product details | Expression – maps properties.products[] to itemId, quantity, unitPrice |
Quantity Transform (Lua):
return TO_STRING(
SUM(MAP(input.properties.products, function(p)
if p.quantity and p.quantity > 0 then
return p.quantity
end
return 1
end))
)Required & Recommended Identifiers
An identifier must be mapped to CM360 for successful user matching. Without an identifier, events may not appear in reporting. Required and recommended IDs are mapped as Global parameters.
| Attribute | Example | Sync Injector Required? |
|---|---|---|
gclid Required (unless using alternative identifier) | CjwKCAjwt-OwBhBnEiwAgwzrUkyN... | Yes |
Additional Identifiers
Use one of these if gclid is not available. Must be added as Global or Event Specific mappings.
| Attribute | Description | Example |
|---|---|---|
dclid | Display Click ID for DV360 attribution. Required if connecting CM360 for DV360. | CKDdz-fE_IUDFYtTCQkdbyMOPg |
matchId | First-party identifier synced with Google using Floodlight's match_id feature. Falls back to anonymousId. | 130161d0-8fee-4167-aa4d-d151eed27c6b |
mobileDeviceId | Advertising device identifier for mobile/CTV attribution. See supported identifiers. | EB2B2675-AE94-44FB-836B-9CB3E038B11C |
Enhanced Conversions
Enhanced Conversions is an extension of the standard CM360 Floodlight integration that allows you to include hashed PII (userIdentifiers) alongside your primary identifier to improve match rates.
Relationship to Standard Integration
| Aspect | Standard Integration | Enhanced Conversions |
|---|---|---|
| API | CM360 Offline Conversions API | Same API, same endpoint |
| Enablement | Default | Requires accepting Enhanced Conversions Terms of Service in CM360 Dashboard |
| Primary Identifier | Required — ONE of: gclid, dclid, matchId, or mobileDeviceId (only one accepted per integration) | Still required (until H2 2026) — ONE identifier per integration |
| userIdentifiers | Not available | Available — hashed email, phone number |
Enabling Enhanced Conversions
- Navigate to your CM360 Dashboard
- Accept the Enhanced Conversions Terms of Service
- See Google's Enhanced Conversions documentation for detailed setup instructions
userIdentifiers Field
Once Enhanced Conversions is enabled, you can include the userIdentifiers field with properly hashed PII:
{
"matchId": "my-match-id-846513278",
"ordinal": "my-ordinal-12345678512",
"quantity": 1,
"value": 104.23,
"userIdentifiers": [
{ "hashedEmail": "0c7e6a405862e402eb76a70f8a26fc732d07c32931e9fae9ab158..." },
{ "hashedPhoneNumber": "1fb1f420856780a29719b994c8764b81770d79f97e2e186..." }
]
}Important: A primary identifier is still required — exactly ONE of: matchId, gclid, dclid, or mobileDeviceId (only one identifier accepted per integration). PII alone will not work for attribution until H2 2026.
Hashing Requirements
- Email and phone number must be SHA-256 hashed before sending
- Email should be lowercase and trimmed before hashing
- Phone number should be in E.164 format before hashing
Validation & Reporting
Timing Expectations
| Metric | Expected Delay |
|---|---|
| Floodlight test results in CM360 reports | ~2 hours |
| Floodlight Impressions in CM360 reporting | Up to 24 hours |
| MatchId availability for conversion matching | 2 hours (recommended delay) |
| dclid availability for conversion matching | ~1 hour (recommended delay) |
Real-Time Validation
The best real-time confirmation method is GCP CM360 API traffic monitoring:
- Navigate to Google Cloud Platform Console
- Go to APIs & Services > Dashboard
- Select the Campaign Manager 360 API
- Monitor traffic and error rates in real-time
Browser Validation
- Check Network tab: Filter for
google-analytics.comorgoogleadservices.com - Verify conversion requests with your Floodlight activity IDs
- Check
match_idparameter is present in conversion events
Cookie/Storage Validation
- Look for
_meta_CM360_gtag_calledcookie or IndexedDB entry - Verify it contains a timestamp indicating when conversions fired
Server-Side Event Validation
Use MetaRouter's event debugger to verify:
context.providers.CM360is presentcontext.providers.googleGtagis presentgclid,dclid, and conversion firing timestamp are populated
Troubleshooting & Best Practices
Processing Delay Recommendations
Google recommends delaying conversion uploads to ensure identifiers are available for matching:
| Identifier | Recommended Delay | Used By |
|---|---|---|
matchId | ~2 hours after Floodlight call | CM360 offline conversions |
dclid | ~1 hour after click | DV360/CM360 attribution |
gclid | ~1 hour after click | Google Ads (if passing through CM360) |
To enable event delay: Contact your MetaRouter Customer Support Rep to configure a 2-hour delay for CM360 conversions.
Without delay configured: CM360 uses a fail-then-retry pattern. Events are attempted immediately; if they fail due to identifier not yet being available (NOT_FOUND), they're queued for retry.
Common Error Codes
| Error Code | Message | Cause | Fix |
|---|---|---|---|
NOT_FOUND | "The matchId was not found" | matchId hasn't propagated yet (~2 hours needed) | Wait for retry; events are automatically requeued |
INVALID_ARGUMENT | "Missing quantity" or "bad float string" | quantity field not mapped or formatted as float | Ensure quantity is mapped as string integer (e.g., "1" not 1.0) |
INVALID_ARGUMENT | Custom variable value error | Custom variable value exceeds 100 UTF-8 bytes | SDK now enforces this automatically (customers on latest version don't need to handle manually) |
PERMISSION_DENIED | "User does not have permission" | Service account missing "Insert offline conversions" permission | Check user role permissions in CM360 |
QUOTA_EXCEEDED | "Quota exceeded for project" | Hit 50,000 calls/day default limit | Request quota increase in GCP Console |
Cookie Lifetime Alignment
Set Gtag sync cookie lifetimes to match your CM360 attribution windows:
- dclid Cookie Lifetime: Should align with your DV360/CM360 lookback window
- Default is 90 days, but can be reduced if needed
- Cookie lifetimes are configurable in the Gtag sync configuration
Retry Queue Behavior
CM360 integration has built-in retry logic:
- Initial attempt made immediately
- If NOT_FOUND error (matchId not ready), event queued for retry
- Retries attempted multiple times over several hours
- Maximum ~8 retry attempts before event is dropped
This retry pattern handles the matchId delay requirement automatically, but contributes to retry queue size for high-volume implementations.
Additional CM360 - Floodlights Documentation
CM360 Conversion API Reference
Updated 5 days ago