App User-Agent
As part of our broader efforts to combat spam, we have developed a standardized specification for the User-Agent header sent by an analytics/ads product on behalf of an app user. The app User-Agent can be derived from native code to adhere to the following specification:
name version (os_and_version; locale; device; build; Proxy)
The definition of these fields is as follows:
User-Agent components | |
---|---|
name | The name of the analytics/ads product. ( Note that if user agent is constructed on the client side, Android// Specified by API consumer. iOS// Specified by API consumer. |
version | The version of the analytics/ads product.
( Android// Specified by API consumer. iOS// Specified by API consumer. |
os_and_version | The operating system and operating system version the app
is running on. ( AndroidString osAndVersion = "Android " + Build.VERSION.RELEASE; iOSUIDevice *uid = [UIDevice currentDevice]; NSString *osAndVersion = [NSString stringWithFormat:@"%@ %@", [uid systemName], [uid systemVersion]]; |
locale | An IETF locale tag for the device, using two-letter
language and country code separated by an underscore.
( AndroidString locale = Locale.getDefault(); iOSNSString *locale = [[NSLocale currentLocale] localeIdentifier] |
device | The name of the physical device running the analytics/ads
product.
( AndroidString device = Build.MODEL; iOS@import Darwin.sys.sysctl; NSString *device(void) { size_t bufferSize = 64; NSMutableData *buffer = [[NSMutableData alloc] initWithLength:bufferSize]; int status = sysctlbyname("hw.machine", buffer.mutableBytes, &bufferSize, NULL, 0); if (status != 0) { return nil; } return [[NSString alloc] initWithCString:buffer.mutableBytes encoding:NSUTF8StringEncoding]; } |
build | "Build/" followed by the build number of the operating
system.
( AndroidString build = "Build/" + Build.ID; iOS@import Darwin.sys.sysctl; NSString *build(void) { size_t bufferSize = 64; NSMutableData *buffer = [[NSMutableData alloc] initWithLength:bufferSize]; int status = sysctlbyname("kern.osversion", buffer.mutableBytes, &bufferSize, NULL, 0); if (status != 0) { return nil; } return [[NSString alloc] initWithCString:buffer.mutableBytes encoding:NSUTF8StringEncoding]; } |
Only include ; Proxy
at the end of the app User-Agent when constructing the
app User-Agent server side. If the app User-Agent is entirely constructed on the
client side, exclude ; Proxy
. Thus an app User-Agent might be:
- Android:
AdMob/7.10.1 (Android 6.0; en_US; SM-G900F; Build/MMB29M; Proxy)
- iOS:
AdMob/7.10.1 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy)
Conversion Tracking Request
The purpose of conversion tracking requests is to notify Google Ads of an app event that should be tracked as a conversion and/or used to populate a remarketing list, and to retrieve metadata describing any click that preceded the event.
All API calls are made to the www.googleadservices.com
domain. Conversion
requests are POST
requests via HTTPS on the following path:
/pagead/conversion/app/versionwhere version is the intended version of the conversion tracking API. Currently the only valid version is
1.0
.
A standard app conversion request will contain the following parameters.
Conversion Tracking Request | |
---|---|
dev_token |
Required Location: Query The unique, static developer token issued to the API consumer. Z_eErE4DkvcKjDM1OVE4c4 |
link_id |
Required Location: Query The link identifier binding the developer token of the API consumer to a specific app. 31FF8D67E5BB5DD5029DCC2734C2F884 |
app_event_type |
Required Location: Query The name of the app event that occurred. This field is an enumeration, and will only accept the following values: • first_open • session_start • in_app_purchase • view_item_list • view_item • view_search_results • add_to_cart • ecommerce_purchase • custom The |
app_event_name |
Required under certain conditions Location: Query The name of any custom app event which is not accepted in the
level_achieved Level Achieved This field must not contain any of the values reserved for
|
app_event_data |
Optional Location: Body Forward any additional rich event data as a simple JSON object mapping string keys to values. Acceptable values are strings and arrays of strings. {"level": 5, "attempts": 20} |
rdid |
Required Location: Query A valid UUID string representing the raw device ID. f10e1de2-e237-4f50-b6aa-843c45cc63d6 In case that device id is missing, such as device id from an ATT unconsented user, set it as all zero. 00000000-0000-0000-0000-000000000000 |
id_type |
Required Location: Query The type of identifier stored in the Androidadvertisingid iOSidfa |
eea |
Required under certain conditions Location: Query The EEA scope.
|
ad_personalization |
Required under certain conditions Location: Query The flags for personalized ads
|
ad_user_data |
Required under certain conditions Location: Query The consent flag for use of user data for ads purposes
|
lat |
Required Location: Query Limit-ad-tracking status for the device.
|
app_version |
Required Location: Query The current version of the app. This should be standardized as follows. AndroidpackageManager.getPackageInfo(packageName(), PackageManager.GET_META_DATA).versionName iOS[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] 1.2.4 |
os_version |
Required Location: Query The current version of the app’s host OS. This should be standardized as follows. Androidandroid.os.Build.VERSION.RELEASE iOS[[UIDevice currentDevice] systemVersion] |
sdk_version |
Required Location: Query The version of the SDK that measured the event. Because this is mainly used
for debugging, it should reflect the release version exactly as it is published
with your SDK releases. If the app does not use an SDK, please pass the same
value as 1.9.5r6 |
timestamp |
Required Location: Query The UNIX timestamp the conversion event occurred, in seconds with up to microseconds precision. 1432681913.123456 |
value |
Optional Location: Query The monetary value of the event, if any. This should always be formatted as a machine-readable floating point value using a decimal point to separate the integer and fractional part of the value. 1.99 |
currency_code |
Required under certain conditions Location: Query The ISO
4217 currency code for the USD |
gclid |
Required under certain conditions Location: Query The value of the Cj0KEQjw0dy4BRCuuL_e5M |
market_referrer_gclid |
Required under certain conditions Location: Query The value of the BX3QojHp4mY5MrJtFM_d1u |
gclid_only_request |
Required under certain conditions Location: Query Identifier for 1 |
gbraid |
Required under certain conditions Location: Query Last seen ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O |
app_open_source |
Required under certain conditions Location: Query Value to identify ad click deeplink or organic app sessions. ad_click or organic |
User-Agent |
Required Location: Header The app user agent as defined previous section. AdMob/7.10.1 (Android 6.0; en_US; SM-G900F; Build/MMB29M) |
X-Forwarded-For |
Required Location: Header The public IPv4 or IPv6 address of the device where the event was measured. 216.58.194.174 |
All requests must be sent via HTTPS. Pings received via HTTP will be rejected.
Please note that if the request body is empty (in cases where no rich event data
is passed in the app_event_data
payload), our server requires that
you explicitly set the Content-Length: 0
header on your request.
Sample Request
An example of a valid conversion tracking request with a non-custom event type and revenue information is:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=in_app_purchase &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &eea=0 &ad_personalization=1 &ad_user_data=1 &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD &market_referrer_gclid=BX3QojHp4mY5MrJtFM_d1u &gclid=Cj0KEQjw0dy4BRCuuL_e5M &gclid_only_request=0 &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
{"app_event_data":{"item_id":["Crayons","Markers"]}}
An example of a valid conversion tracking request with a non-custom event type and revenue information with rdid (advertisingid) not available is:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=in_app_purchase &rdid=00000000-0000-0000-0000-000000000000 &id_type=advertisingid &eea=0 &ad_personalization=1 &ad_user_data=1 &lat=1 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD &market_referrer_gclid=BX3QojHp4mY5MrJtFM_d1u &gclid=Cj0KEQjw0dy4BRCuuL_e5M &gclid_only_request=1 &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; Android,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
{"app_event_data":{"item_id":["Crayons","Markers"]}}
An example of a valid session start request is:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=session_start &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &eea=0 &ad_personalization=1 &ad_user_data=1 &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &gclid=Cj0KEQjw0dy4BRCuuL_e5M &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
An example of a valid session start reattribution request for a session
which began from the deep link
example://product/123?gclid=Cj0KEQjw0dy4BRCuuL_e5M
is:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=session_start &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &eea=0 &ad_personalization=1 &ad_user_data=1 &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &gclid=Cj0KEQjw0dy4BRCuuL_e5M &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
An example of a valid conversion tracking request for an EEA user with ad user data consent granted and ads personalization declined is:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=in_app_purchase &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &eea=1 &ad_personalization=0 &ad_user_data=1 &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
Event Data Encoding
For the app_event_data
body parameter, please use the following conventions
for primitive data types:
Float
- Use dot character as decimal separator independently of app localisation
- Use two-digit decimal precision to represent monetary values. e.g. 2.99
- Do not use exponential notation, e.g. 2E+9
- Do not use a comma character to separate groups of digits, e.g. 1,000,000
- Valid examples:
-0.5
2.99
1000000.123
Integer
- Only send whole integer values with no decimal digits
- Do not use a comma character to separate groups of digits, e.g. 1,000,000
- Valid examples:
1000
-11
0
Date
- Date format: yyyy-mm-dd
yyyy
= four digit year, e.g. 2016mm
= two digit month, e.g. 09 for Septemberdd
= two digit day, e.g. 23 for the 23rd day of the month
- Always send the number of digits specified above, e.g. if sending the
value for dd for the 5th day of the month, send
05
. - Valid examples:
"2016-09-23"
"1990-12-31"
- Date format: yyyy-mm-dd
Timestamp
- Time format: Unix/Epoch timestamp defined in UTC timezone with up to microseconds precision
- Valid examples:
1478713087
for Wed, 09 Nov 2016 17:38:07 GMT1073513982.123000
for Wed, 07 Jan 2004 22:19:42.123 GMT
Arrays
- Only send arrays of primitive values (strings, numbers, and booleans)
- Valid Examples:
[123, 456, 789]
["abc"]
Conversion Tracking Response
The conversion tracking response has the following format:
{ "ad_events": [<ad event objects>], "errors": [<error strings>], "attributed": true|false }
Both the ad_events and errors arrays may be empty.
We expect errors will be machine readable error codes, e.g. invalid_timestamp
.
Error Codes
invalid_timestamp - The request did not have a valid timestamp.
eea_missing_or_invalid - Either request did not have the "eea" field set or it was invalid.
ad_user_data_missing - The "ad_user_data" request field was not set. The "ad_user_data" field is required for all in-scope DMA requests.
ad_user_data_invalid - The "ad_user_data" request value was invalid. The "ad_user_data" field is required for all in-scope DMA requests.
ad_personalization_missing_or_invalid - Either request did not have the "ad_personalization" field set or it was invalid. The "ad_personalization" field is required for all in-scope DMA requests.
Ad events are the core objects of app attribution, and will contain the following properties.
Important notes regarding response behavior dependent on user consent:
If the conversion has ads user data consent and the user has cross-use consent
within their Google user settings, Google Ads will respond with a single last
click across all of its CPSes. If the user has not consented to cross-use consent
within their Google user settings, Google Ads will respond with multiple last
clicks, on a per CPS basis.
If the conversion includes certain CPSes in the user-selected cross-use consent
but not others, Google Ads will respond with a single last click across the CPSes
granted cross-use consent, but with multiple last clicks, on a per CPS basis,
for those CPSes not granted cross-use consent.
Conversion Tracking Response | |
---|---|
ad_event_id |
Always present string
Q2owS0VRancwZHk0QlJDdXVMX2U1TQ |
conversion_metric |
Always present string The conversion metric used for attribution. We will initially support one conversion metric. conversion |
timestamp |
Always present number The UNIX timestamp the ad event occurred, in seconds with up to microseconds precision. This value should be used for last-click attribution. 1432681913.123456 |
campaign_type |
Always present string This field will identify the type of campaign that produced the ad event. The possible values are as follows. ACI ACE ACPre Search Display Video Shopping Hotel Performance_Max Other ACI is an abbreviation for App Campaign for Install. ACE is an abbreviation for App Campaigns for Engagement. |
campaign_id |
Always present number The numeric campaign ID of the campaign that produced the ad event. This value is guaranteed unique. 123456789 |
campaign_name |
Always present string The advertiser-defined campaign name of the campaign that produced the ad event. This value is not guaranteed unique. Occasional Gamers (Video) |
ad_type |
Always present string The type of ad that resulted in the ad event. This value can be used to distinguish between various types of inventory as follows. App PromotionClickToDownloadApp Engagement AppDeepLinkApp Engagement — Install and Continue flow AppDeepLinkContinueCatch-all for other values Unknown |
external_customer_id |
Always present number The advertiser identifier for the advertiser that owns the campaign that produced the ad event. This value can be used to differentiate Google Ads accounts. 123456789 |
location |
Always present number The location ID code for the geographical location of the ad event. Refer to the Google Ads API reference to interpret location codes. |
network_type |
Always present string This field will identify the Google Ads advertising network the ad event occurred on. The possible values are as follows. Search Display YouTube GoogleTv cross-network |
network_subtype |
Will be string This field will identify the “subtype” of the Google Ads advertising network the ad event occurred on. The possible values vary by primary network type. SearchOrdinary Google SearchGoogleSearchGoogle Search Partners SearchPartners DisplayMobile Web PublishersmGDNApp Publishers Google AdMob YouTubeYouTube Videos networkYouTubeVideosYouTube Search network YouTubeSearchVideo Partners VideoPartners GoogleTvGoogleTV Videos networkGoogleTvVideos cross-networkPerformance Max cross networkcross-network |
video_id |
Only provided when string The YouTube video ID associated with the ad event. dQw4w9WgXcQ |
keyword |
Only provided when string The search keyword associated with the ad event. +food +delivery |
match_type |
Only provided when string The match type for search keywords. ExactePhrase pBroad b |
placement |
Only provided when string The placement associated with the ad event. mobileapp::1-343200656 |
ad_group_id |
Only provided when number The numeric ID of the ad group that produced with the ad event. This value is guaranteed unique. 123456789 |
ad_group_name |
Only provided when string The advertiser-defined ad group name of the ad group that produced the ad event. This value is not guaranteed unique. My App AdGroup |
creative_id |
Only provided when number The numeric ID of the creative ad unit that produced the ad event. This value is guaranteed unique. 123456789 |
interaction_type |
This field will always be engagement. string |
Sample Responses
An example of a conversion tracking response when the request contained errors is:
{ "ad_events": [], "errors": ["INVALID_CURRENCY_CODE"], "attributed": false }
An example of a negative conversion tracking response is:
{ "ad_events": [], "errors": [], "attributed": false }
A conversion tracking response will be returned for all conversion tracking requests.
An example of an affirmative conversion tracking response for a non-EEA user for a Universal App Campaign is:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Search", "network_subtype": "GoogleSearch", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true, "warnings": [] }
An example of an affirmative conversion tracking response for a non-EEA user for a Search campaign is:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "Search", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Search", "network_subtype": "GoogleSearch", "video_id": null, "keyword": "+space +birds", "match_type": "b", "placement": null, "ad_group_id": 123456789, "ad_group_name": "My App AdGroup", "creative_id": 123456789, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true, "warnings": [] }
An example of an affirmative conversion tracking response for a non-EEA user for a Display campaign is:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "Display", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Display", "network_subtype": "mGDN", "video_id": null, "keyword": null, "match_type": null, "placement": "mobile-app::2-343200656", "ad_group_id": 123456789, "ad_group_name": "My App AdGroup", "creative_id": 123456789, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true, "warnings": [] }
An example of an affirmative conversion tracking response for a non-EEA user for a YouTube campaign is:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "Video", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "YouTube", "network_subtype": "YouTubeVideos", "video_id": "dQw4w9WgXcQ", "keyword": null, "match_type": null, "placement": null, "ad_group_id": 123456789, "ad_group_name": "My App AdGroup", "creative_id": 123456789, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true, "warnings": [] }
An example of an attributed conversion tracking response where the conversion is attributed to both Play + Search ad interactions but 5(2)(b) + 5(2)(c) cross-use consent is denied between the Play + Search CPSs is:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "click", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Display", "network_subtype": "", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }, { "ad_event_id": "I8YUwWqxvOyqcwOcqBAkYZBMaOONSd", "conversion_metric": "conversion", "interaction_type": "click", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Search", "network_subtype": "", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }, ], "errors": [], "warnings": [], "attributed": true }
An example of an attributed conversion tracking response where the conversion is attributed to both Play + Search ad interactions and 5(2)(b) + 5(2)(c) cross-use consent is accepted between the Play + Search CPSs is similar to today's conversion behavior:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "click", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Display", "network_subtype": "", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }, ], "errors": [], "warnings": [], "attributed": true }
An example of an attributed conversion tracking response where the conversion is attributed to both Play, Search and YouTube ad interactions and 5(2)(b) + 5(2)(c) cross-use consent is accepted between the Play + Search CPSs but is denied to the YouTube CPS is:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "click", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Display", "network_subtype": "", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }, { "ad_event_id": "I8YUwWqxvOyqcwOcqBAkYZBMaOONSd", "conversion_metric": "conversion", "interaction_type": "click", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Youtube", "network_subtype": "YouTubeVideos", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }, ], "errors": [], "warnings": [], "attributed": true }
Cross-network Attribution Request
When Google Ads responds to a conversion tracking request affirmatively, the API consumer must notify Google Ads of its cross-network attribution decision after identifying the last click.
The cross-network attribution request is identical to the original conversion tracking request, but with a request path of:
/pagead/conversion/app/1.0/cross_network
and the addition of two required parameters:
Cross-network Attribution Request | |
---|---|
ad_event_id |
Required Location: Query The |
attributed |
Required Location: Query Whether or not Google Ads received credit for the conversion by the API
consumer. Either |
An example of a valid cross-network attribution request is:
POST /pagead/conversion/app/1.0/cross_network ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=custom &app_event_name=level_achieved &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD &ad_event_id=Q2owS0VRancwZHk0QlJDdXVMX2U1TQ &attributed=1 Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
A valid cross-network attribution request will always receive a generic 200 response with no response body.