AI-generated Key Takeaways
-
The process describes setting up and running in-app campaigns on DoubleClick buy-side products using a third-party app tracking solution.
-
Advertisers need to set up conversion events, link them in the third-party interface, and provide identifying variables.
-
Consent collection for DMA compliance is handled through specific variables like
eea,ad_user_data, andnpa. -
Advertisers must provide a unique authorization token with each server request to DoubleClick Digital Marketing (DDM).
-
Third-party servers ping DDM with conversion details, including user consent flags, and DDM responds with attribution information and detailed ad event data.
The following end-to-end flow describes both advertiser setup and third-party implementation required in order to run a campaign on DoubleClick buy-side products using a third-party app tracking solution.
For more information about DoubleClick Digital Marketing in general as well as an overview of in-app attribution features, see the DoubleClick Digital Marketing background page.
Advertiser sets up Conversion event in DDM to represent the install or conversion (Bid Manager only - conversion pixel) (Campaign Manager - Floodlight activity).
Advertiser "links" DDM conversion event in the third-party interface and provides key variables that identify an advertiser and conversion activity group.
srcis the advertiser ID that is the source of the Floodlight activity.catis the activity tag string, which Floodlight servers use to identify the activity group to which the activity belongs.typeis the group tag string, which identifies the activity group with which the Floodlight activity is associated.u1, u2, ...(if available) are the custom Floodlight variable key-values.
Advertiser adds variables to signify consent collection for DMA compliance.
eeais used to identify EEA users.eea=0indicates that the user is not from the EEA.eea=1indicates that the user is from the EEA.
ad_user_datais the consent flag for the use of user data for ads purposes.- Only needs to be set if
eea=1 ad_user_data=0indicates the user has denied consent for transmission of user level data to Google for ads purposes.ad_user_data=1indicates the user has granted consent for transmission of user level data to Google for ads purposes.
- Only needs to be set if
npais used for ad personalization content.npa=0indicates the user consents to personalization.npa=1indicates the user has not consented to personalization.
test_request_reason=dmacan be used to test DMA parameters- Validates all DMA parameters and returns warnings.
- Returns multi-response with fake clicks.
- Logs the conversions as test conversions.
In addition, the advertiser needs to provide third parties with its specific authorization token:
tokenis an advertiser-specific alphanumeric string that must be passed along with each server request to DDM.Advertiser runs in-app ad campaign with ad tags served by DBM on real-time bidding exchanges or served by DCM on direct-bought media.
End user sees and clicks on ads, which are logged by DDM.
When end user installs the app or completes a conversion event, such as "game play", third-party servers "ping" DDM on every app activity:
An example URL for user not in EEA
https://ad.doubleclick.net/ddm/s2s/appactivity/src=1234567;cat=fghij456;type=abcde123;u1=[friendlyname1];ord=1312312312;eea=0;npa=0An example URL for user in EEA
https://ad.doubleclick.net/ddm/s2s/appactivity/src=1234567;cat=fghij456;type=abcde123;u1=[friendlyname1];ord=1312312312;eea=1;ad_user_data=1;npa=0where:
srcis the advertiser ID that is the source of the Floodlight activity.catis the activity tag string, which Floodlight servers use to identify the activity group to which the activity belongs.typeis the group tag string, which identifies the activity group with which the Floodlight activity is associated.ordis a random number that is used to make the Floodlight tag unique.u1, u2, ...(if available) are the custom Floodlight variable key-values.eeaidentifies if the user is in the EEA.ad_user_dataidentifies if the user consents to cookies and Measurement.npaidentifies if the user consents to personalization.
with additional parameters sent through a JSON payload in an HTTP POST:
{ "app": { "bundle": "com.rovio.angrybirds" }, "device": { "ua": "Mozilla/5.0 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25", "ip": "108.176.57.230", "didmd5": "A2D2DA47AC2DE1BCA16883BD5CAA6F2F", "lmt": 1 } }and the advertiser authorization token is passed in the HTTP Authorization Header:
Authorization: Token token="[advertiser authorization token string]"where:
app(required) is the JSON object representing the app where the conversion activity took place. Useapp: {}if the app where the conversion activity took place is not available.bundle(if available) is the app object field containing a string value of the Play Store bundle name or App Store ID.deviceis the JSON object representing the device on which the conversion activity took place.uais the device object field representing the user agent string of the app where an activity was recorded. This parameter is required.ip(if available) is the device IPv4 address assigned to the device. This parameter is required.didmd5is the MD5-hash string of the uppercased IDFA or Google Play Advertising ID value.lmtis an integer, with a value of 1 if the user has enabled the "Limit Ad Tracking" option with IDFA or AdID, or 0, if not set.
DDM will respond with a JSON response of whether the conversion event is attributed to a view or click served by DCM, and if "YES", additional information about the event (last view or click):
- Ad ID
- Site ID
- Placement ID
- Creative ID
- Timestamp
An example JSON response might look like:
{ "attributed": 1, // Whether the conversion can be attributed to a DCM event. "last_impression_ad_id":283641088, "last_impression_site_id":1408067, "last_impression_placement_id":107616368, "last_impression_creative_id":60162352, "last_impression_timestamp":1415647607, "last_click_ad_id":283641088, "last_click_site_id":1408067, "last_click_placement_id":107616368, "last_click_creative_id":60162352, "last_click_timestamp":1415647657, "last_click_exclid":"CKm0nLKhyssCFceH2wod8l4I4A", "cps": <cps>, "ad_events": [ <ad event objects> ], "warnings": [<warning strings>], "errors": [<error strings>], }where:
attributedis value 1 (if the conversion can be attributed to an impression or click) or 0 (if not attributable).last_impression_ad_id(if attributed = 1) is the ad ID for the last impression.last_impression_site_id(if attributed = 1) is the site ID for the last impression.last_impression_placement_id(if attributed = 1) is the placement ID for the last impression.last_impression_creative_id(if attributed = 1) is the creative ID for the last impression.last_click_ad_id(if attributed = 1 and a click was attributed) is the ad ID for the last click.last_click_site_id(if attributed = 1 and a click was attributed) is the site ID for the last click.last_click_placement_id(if attributed = 1 and a click was attributed) is the placement ID for the last click.last_click_creative_id(if attributed = 1 and a click was attributed) is the creative ID for the last click.last_click_exclidcorresponds to a unique click ID populated using the%eiid!macro
Beginning with DMA enforcement in March 2024, the following fields will also be available:
cpsindicates which Core Platform Service the event belongs toa: Adsm: Mapsp: Play Stores: Searchh: Shoppingy: YouTube
ad_eventsis an array ofad_eventobjects containing all of the conversion events.- The
ad_eventobject has the following fields: product_typeis a string that reports the product responsible for the conversion. This will be eitherDCMorDBM.interaction_typeis the type of interaction that lead to the event. Eitherimpressionorclick.conversion_metricis the conversion metric used for attribution. Eitherconversionorview_through_conversion.timestampis the UNIX timestamp the ad event occurred with microsecond precision. This value should be used for last-click attribution.campaign_typeidentifies the type of campaign that produced the ad event.line_item_id(DBM only) is the DBM line item ID that produced the ad event.line_item_name(DBM only) is the name of the DBM line item that produced the ad event.placement_id(DCM only) is the DCM placement tag ID that produced the ad event.placement_name(DCM only) is the name of the DCM placement tag that produced the ad event.external_customer_idis the advertiser identifier that owns the campaign that produced the ad event.- If
productis DBM this field represents the DBM Advertiser ID. - If
productis DCM this field represents the DCM Advertiser ID.
- If
creative_idis the ID of the creative ad unit that produced the ad event.- If
productis DBM this field represents the DBM Creative ID. - If
productis DCM this field represents the DCM Creative ID.
- If
exchange_id(DBM only) is the ID of the exchange that served the DBM ad.insertion_order_id(DBM only) is the DBM insertion order ID.site_id(DCM only) is the DCM site ID for the ad event.cpsindicates which Core Platform Service the ad event belongs to. Refer to the full explanation of thecpsfield earlier in the documentation for further details.
- The
warningsis an array of warnings produced by the conversion event.errorsis an array of errors produced by the conversion event with HTTP error codes, for the following scenarios:HTTP 204if the request quota has been exceeded.HTTP 400when the request is considered invalid—for example, missing required parameters, and the server has fallen back to pixel tracking.HTTP 401if the authorization token is invalid.HTTP 404for any bad requests.
Advertiser will be able to see campaign reports in your system; advertiser will also be able to see conversion reports in DCM with the same parameters.
Additional example responses after DMA is enforced in March 2024
An example of an attributed conversion tracking response where the conversion is attributed to both Search + YouTube ad interactions but 5(2)(b) + 5(2)(c) cross-use consent is denied between the Search + YouTube CPSs:
{ attributed: 1, last_impression_ad_id: 283641088, last_impression_site_id: 1408067, last_impression_placement_id: 107616368, last_impression_creative_id: 60162352, last_impression_timestamp: 1415647607, last_click_ad_id: 283641088, last_click_site_id: 1408067, last_click_placement_id: 107616368, last_click_creative_id: 60162352, last_click_timestamp: 1415647655, last_click_exclid: "CKm0nLKhyssCFceH2wod8l4I4A", cps: "s", ad_events: [{ cps : "s", product_type: "DCM", interaction_type: "click", ad_event_type: "click", campaign_type: "Display", placement_id: 107616368, placement_name: "TEST PLACEMENT NAME", external_customer_id: 7480542, creative_id: 60162352, timestamp: 1415647655.123456, site_id: 1408067, }, { cps : "s", product_type:"DCM", interaction_type: "impression", ad_event_type: "impression", campaign_type: "Display", placement_id: 107616368, placement_name: "TEST PLACEMENT NAME", external_customer_id: 7480542, creative_id: 60162352, timestamp: 1415647607.123456, site_id: 1408067 },{ cps : "y", product_type: "DCM", ad_event_type: "click", campaign_type: "Display", placement_id: 107616370, placement_name: "Placement on Youtube", external_customer_id: 7480542, creative_id: 6016444, timestamp: 14344344.123456, site_id: 140806 }, ]}Example of an affirmative conversion tracking response for a DBM Campaign:
{ attributed: 1, last_click_ad_id: 283641088, last_click_site_id: 1408067, last_click_placement_id: 107616368, last_click_creative_id :60162352, last_click_timestamp: 1415647655, last_click_exclid: "CKm0nLKhyssCFceH2wod8l4I4A" cps: "y", ad_events: [{ product_type: "DBM", interaction_type: "click", ad_event_type: "click", campaign_type: "Display", line_item_id: 123456789, line_item_name: "TEST LINE ITEM NAME", external_customer_id: 2550, creative_id: 512333, exchange_id: 132, insertion_order_id: 523423, timestamp: 1432681913.123456 cps: "y" }, { product_type: "DCM", interaction_type: "click", campaign_type: "Display", placement_id: 9342323, placement_name: "TEST PLACEMENT NAME", external_customer_id: 7480542, creative_id: 8234234, timestamp: 1432681913.123456, cps: "y" } ]}