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 userIdentifiers with 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, and mobileDeviceId. 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 quantity and value fields were always required by the CM360 API, but previous API versions silently defaulted them when not provided (quantity defaulted to 0, causing aggregate conversion counts of 0). With API v5, explicit mappings are required. See Google's known issues. quantity must be a string integer (e.g., "1", "5") — float values like "0.00" will cause bad float string API 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 TypeValueNotes
CM360 API Daily Quota50,000 calls/day per projectDefault limit; can request increase from Google
MetaRouter Batch Size1,000 events per batchHardcoded system limit
Custom Variable Length100 characters maxPer 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

  1. You must have a Campaign Manager 360 account. See Advertisers/Agencies for signup information.
  2. 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.
  3. 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.
  4. 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:

  1. In CM360, navigate to Admin > User Profiles
  2. Create a new user profile or edit an existing one
  3. 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
  4. 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:

RolePurpose
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

  1. Create service account in GCP
  2. Skip the "Permissions" step (click Done without selecting a role)
  3. Manage Keys > Add Key > Create New Key > JSON
  4. Download JSON key file
  5. 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:

SettingRequirement
Tag formatMust select "Image tag" (see note below)
CategoryOptional — works with or without
Expected URLOptional — 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.

ArchitectureDescriptionDocumentation
CM360 Sync - DecoupledCM360 as a separate sync under parent Google Tag SettingsCM360 Sync (Decoupled)
Google Tag Sync - Coupled (Legacy)CM360 bundled with GA4/Google Ads in single Google Gtag syncCM360 Sync (Coupled)

CM360 - Floodlights Starter Kit

From the integration library, add a "CM360 - Floodlights" integration. Then, fill out the Connection Parameters:

Connection ParameterDescription
CREDENTIALS_JSONPaste in Service Account credentials in JSON format. Must be type "service_account".
CONFIG_IDUse your Advertiser ID (Floodlight Configuration ID).
PROFILE_ID_STRThe Profile ID string associated with your user. See Manage user access.

Add Integration to Pipeline

Once you've adjusted the starter kit:

  1. Go to Pipelines > Select your Pipeline
  2. Click the Right drop-down > Add Integration
  3. 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 KeyDescriptionExpected Input
floodlightConfigurationId RequiredString: Floodlight configuration used by the specified activityEnrichment – $$CONFIG_ID$$
kind RequiredString: Identifies resource typeEnrichment – dfareporting#conversion
timestampMicros RequiredString: Conversion timestamp in microseconds since Unix epochExpression – RFC3999 timestamp converted to epoch microseconds
Click, Mobile Device and Match ID(s) RequiredObject: 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 anonymousIdExpression – selects first available identifier
ordinal RequiredString: Deduplication identifier for the conversionmessageId
quantity RequiredString: Number of items (must be string integer, NOT float). Floor of "1" enforced.Varies by event (see Event Specific)
value RequiredFloat: Revenue amount for the conversionVaries by event
customVariablesArray: 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 KeyDescriptionExpected Input
floodlightActivityId RequiredString: Floodlight Activity ID for this eventEnrichment – ADD_FLOODLIGHT_ACTIVITY_ID_HERE
value RequiredFloat: Revenue amountEnrichment – 0
quantity RequiredString: Number of itemsEnrichment – "1"

Product Added

Output KeyDescriptionExpected Input
floodlightActivityId RequiredString: Floodlight Activity ID for this eventEnrichment – ADD_FLOODLIGHT_ACTIVITY_ID_HERE
value RequiredNumber: Revenue amountExpression – TOTAL_VALUE calculated from product properties
quantity RequiredString: Number of itemsExpression – 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 KeyDescriptionExpected Input
floodlightActivityId RequiredString: Floodlight Activity ID for this eventEnrichment – ADD_FLOODLIGHT_ACTIVITY_ID_HERE
value RequiredNumber: Revenue amountproperties.total
quantity RequiredString: Total items in orderExpression – Sum of properties.products[].quantity with floor of "1" per item
cartData.itemsArray: Cart items with product detailsExpression – 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.

AttributeExampleSync 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.

AttributeDescriptionExample
dclidDisplay Click ID for DV360 attribution. Required if connecting CM360 for DV360.CKDdz-fE_IUDFYtTCQkdbyMOPg
matchIdFirst-party identifier synced with Google using Floodlight's match_id feature. Falls back to anonymousId.130161d0-8fee-4167-aa4d-d151eed27c6b
mobileDeviceIdAdvertising 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

AspectStandard IntegrationEnhanced Conversions
APICM360 Offline Conversions APISame API, same endpoint
EnablementDefaultRequires accepting Enhanced Conversions Terms of Service in CM360 Dashboard
Primary IdentifierRequired — ONE of: gclid, dclid, matchId, or mobileDeviceId (only one accepted per integration)Still required (until H2 2026) — ONE identifier per integration
userIdentifiersNot availableAvailable — hashed email, phone number

Enabling Enhanced Conversions

  1. Navigate to your CM360 Dashboard
  2. Accept the Enhanced Conversions Terms of Service
  3. 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

MetricExpected Delay
Floodlight test results in CM360 reports~2 hours
Floodlight Impressions in CM360 reportingUp to 24 hours
MatchId availability for conversion matching2 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:

  1. Navigate to Google Cloud Platform Console
  2. Go to APIs & Services > Dashboard
  3. Select the Campaign Manager 360 API
  4. Monitor traffic and error rates in real-time

Browser Validation

  1. Check Network tab: Filter for google-analytics.com or googleadservices.com
  2. Verify conversion requests with your Floodlight activity IDs
  3. Check match_id parameter is present in conversion events

Cookie/Storage Validation

  • Look for _meta_CM360_gtag_called cookie 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.CM360 is present
  • context.providers.googleGtag is present
  • gclid, 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:

IdentifierRecommended DelayUsed By
matchId~2 hours after Floodlight callCM360 offline conversions
dclid~1 hour after clickDV360/CM360 attribution
gclid~1 hour after clickGoogle 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 CodeMessageCauseFix
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 floatEnsure quantity is mapped as string integer (e.g., "1" not 1.0)
INVALID_ARGUMENTCustom variable value errorCustom variable value exceeds 100 UTF-8 bytesSDK 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" permissionCheck user role permissions in CM360
QUOTA_EXCEEDED"Quota exceeded for project"Hit 50,000 calls/day default limitRequest 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:

  1. Initial attempt made immediately
  2. If NOT_FOUND error (matchId not ready), event queued for retry
  3. Retries attempted multiple times over several hours
  4. 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

OAuth 2.0

CM360 Conversion API

CM360 Conversion API Reference