Use the mappings in the tables to map the Google Ads API methods and fields to
their IngestEventsRequest equivalent in the Data Manager API.
API methods
The Data Manager API lets you upload each batch of store sales events in a single
IngestEventsRequest.
In contrast, the Google Ads API required a three step process using the
OfflineUserDataJobService:
- Create a job using
CreateOfflineUserDataJob - Add operations to the job using
AddOfflineUserDataJobOperations - Run the job using
RunOfflineUserDataJob
Request fields
Each IngestEventsRequest is subject to
request limits. If the number of
operations in your AddOfflineUserDataJobOperations request
exceeds these limits, you must split this into multiple Data Manager API ingestion
requests.
Here is how the fields of the Google Ads API requests map to the Data Manager API.
CreateOfflineUserDataJobRequest
The following table shows how the fields of a CreateOfflineUserDataJobRequest
map to an IngestEventsRequest.
CreateOfflineUserDataJobRequest (Google Ads API) |
IngestEventsRequest (Data Manager API) |
Notes |
|---|---|---|
customer_id |
destinations.operating_account |
See Customer and conversion action fields. |
|
destinations |
See Customer and conversion action fields. |
|
Diagnostics | Use the request_id returned in the IngestEventsResponse to retrieve diagnostics about your conversion upload. |
job.id |
request_id |
Use the request_id returned in the IngestEventsResponse to retrieve diagnostics about your conversion upload. |
job.external_id |
No equivalent | |
job.type |
No equivalent | |
job.store_sales_metadata.third_party_metadata.partner_id |
destinations.login_account |
A data partner uploading store sales conversions will be identified by the login_account of a destination. See Configure destinations for more details. |
job.store_sales_metadata.third_party_metadata.advertiser_upload_date_time |
No equivalent | |
job.store_sales_metadata.third_party_metadata.valid_transaction_fraction |
No equivalent | |
job.store_sales_metadata.third_party_metadata.partner_match_fraction |
No equivalent | |
job.store_sales_metadata.third_party_metadata.partner_upload_fraction |
No equivalent | |
job.store_sales_metadata.third_party_metadata.bridge_map_version_id |
No equivalent | |
job.store_sales_metadata.loyalty_fraction |
No equivalent | |
job.store_sales_metadata.transaction_upload_fraction |
No equivalent | |
job.store_sales_metadata.custom_key |
|
Map to the variable field of a CustomVariable at the event level or an ItemCustomVariable at the item level. |
enable_match_rate_range_preview |
No equivalent | |
validate_only |
validate_only |
|
| No equivalent | consent |
Google Ads API only supports specifying consent at the event level in UserData. For the Data Manager API, you can specify consent for all events in a request by setting the consent field on the IngestEventsRequest. You can override this value for an individual event by setting the consent field of Event. |
| No equivalent | encoding |
Required for UserData uploads. Set to the Encoding used for UserIdentifier values. |
| No equivalent | encryption_info |
Set if the request contains encrypted UserData user identifiers. See Encryption for details. |
AddOfflineUserDataJobOperationsRequest
The following table shows how the fields of a AddOfflineUserDataJobOperationsRequest
map to an IngestEventsRequest.
AddOfflineUserDataJobOperationsRequest (Google Ads API) |
IngestEventsRequest (Data Manager API) |
Notes |
|---|---|---|
|
destinations |
See Customer and conversion action fields. |
resource_name |
No equivalent | The Data Manager API doesn't require updating a job resource. |
enable_partial_failure |
No equivalent | If the IngestEventsRequest succeeds, any failures that occur during downstream processing are handled at the event level, which can result in a partial success. Use Diagnostics to retrieve the status of your upload as well as errors and warnings for individual events. If the IngestEventsRequest fails (for example, due to a BadRequest), no events are processed and you will need to resolve the error and retry the request. See Understand API errors for more information. |
enable_warnings |
No equivalent | Use Diagnostics to retrieve warnings about your Data Manager API request. You don't need to enable this. |
operations |
events |
The OfflineUserDataJobOperation.create operation is equivalent to sending an IngestEventsRequest. The Data Manager API doesn't support removing events. |
validate_only |
validate_only |
|
| No equivalent | consent |
Google Ads API only supports specifying consent at the event level in UserData. For the Data Manager API, you can specify consent for all events in a request by setting the consent field on the IngestEventsRequest. You can override this value for an individual event by setting the consent field of Event. |
| No equivalent | encoding |
Required for UserData uploads. Set to the Encoding used for UserIdentifier values. |
| No equivalent | encryption_info |
Set if the request contains encrypted UserData user identifiers. See Encryption for details. |
Customer and conversion action fields
The Google Ads API requires the developer-token request header, and you set the
login-customer-id and linked-customer-id
request headers for different authentication scenarios.
The Data Manager API doesn't require a developer token, and you specify login and
linked customer information using fields of a Destination instead of request
headers. Check out Configure destinations for more
information about destinations.
| Google Ads API | Destination (Data Manager API) |
Notes |
|---|---|---|
customer_id of the request |
operating_account |
Set the account_id to the customer ID of the Google Ads conversion account. Set the account_type of the operating_account to GOOGLE_ADS. |
developer-token request header |
No equivalent | A developer token is not required for the Data Manager API. |
login-customer-id request header |
login_account |
Set the account_id to the customer ID of the login account. Set account_type to GOOGLE_ADS if the login account is a Google Ads account, or DATA_PARTNER if the login account is a data partner account. |
linked-customer-id request header |
linked_account |
If you're accessing the operating_account using a partner link, set the account_id to the customer ID of the linked account and set account_type to DATA_PARTNER. Otherwise, don't set the linked_account field. |
conversion_action |
product_destination_id |
Set to the numeric ID of the conversion action. Don't use the resource name. |
Event fields
The following table shows how the fields of a store sales conversion map between the two APIs.
Unlike the Google Ads API, which supports including only a single item per
transaction using ItemAttribute, the Data Manager API supports including multiple
items per event in CartData.
OfflineUserDataJobOperation.create (Google Ads API) |
Event (Data Manager API) |
Notes |
|---|---|---|
| No equivalent | event_source |
Required Set to IN_STORE for store sales conversions. |
transaction_attribute.conversion_action |
destinations.product_destination_id |
See Customer and conversion action fields. Use the numeric ID of the conversion action instead of the resource name. |
transaction_attribute.transaction_date_time |
event_timestamp |
See Timestamp format for details. |
transaction_attribute.transaction_amount_micros |
|
Set to the currency value, not the value in micros. For example, for a conversion value of $5.23, use the value 5.23. |
transaction_attribute.currency_code |
currency |
Required. |
transaction_attribute.order_id |
transaction_id |
Required. |
transaction_attribute.store_attribute.store_code |
event_location.store_id |
Required Set the store code in the store_id field in the EventLocation object. |
transaction_attribute.custom_value |
|
Map to the value field of a CustomVariable at the event level or an ItemCustomVariable at the item level. |
transaction_attribute.item_attribute.item_id |
cart_data.items[].merchant_product_id |
|
transaction_attribute.item_attribute.merchant_id |
|
If you set cart_data.merchant_id, it acts as a default for all items, but you can override it for individual items. |
transaction_attribute.item_attribute.country_code |
|
If you set cart_data.merchant_feed_label, it acts as a default for all items, but you can override it for individual items. |
transaction_attribute.item_attribute.language_code |
|
If you set cart_data.merchant_feed_language_code, it acts as a default for all items, but you can override it for individual items. |
transaction_attribute.item_attribute.quantity |
cart_data.items[].quantity |
|
| No equivalent | cart_data.items[].unit_price |
Set to the unit price excluding tax, shipping, and event scoped (transaction-level) discounts for this item. |
user_identifiers |
|
Required.
|
consent |
consent |
Both APIs use a similar Consent object (ad_user_data, ad_personalization). For the Data Manager API, you can also set consent for all events in a request by setting the consent field on the IngestEventsRequest. |
User identifier fields
UserIdentifier (Google Ads API) |
UserIdentifier (Data Manager API) |
Notes |
|---|---|---|
user_identifier_source |
The source determines which field to populate on the Data Manager API
|
|
hashed_email |
email_address |
Set to the formatted and hashed email address. You can also encrypt the hashed email address. |
hashed_phone_number |
phone_number |
Set to the formatted and hashed phone number. You can also encrypt the hashed phone number. |
address_info |
address |
Set to an AddressInfo object. Follow the formatting and hashing guidelines. You can also encrypt the hashed attributes of an address. |
address_info.hashed_first_name |
address.given_name |
|
address_info.hashed_last_name |
address.family_name |
|
address_info.country_code |
address.region_code |
|
address_info.postal_code |
address.postal_code |
|
address_info.city |
No equivalent | Not supported in the current version of the Data Manager API. |
address_info.state |
No equivalent | Not supported in the current version of the Data Manager API. |
address_info.hashed_street_address |
No equivalent | Not supported in the current version of the Data Manager API. |