Upgrade your conversion uploads from the Google Ads API to the Data Manager API
to gain access to several improvements and features.

Here's a comparison between using the Data Manager API and the Google Ads API to manage
conversions.

|   | Data Manager API | Google Ads API |
|---|---|---|
| Support for sending offline conversions and enhanced conversions for leads | Supported. Yes | Supported. Yes |
| Support for sending Google Ads tag conversions as an additional data source for your tag conversions, to maximize ad interaction signals and strengthen your data and overall performance | Supported. Yes | Not supported. No |
| Data model | Unified data model across all Google Ads conversion use cases and all Google advertising products. | Data model is only for Google Ads use cases, and differs for each use case. |
| Encryption | Supports [encryption](https://developers.google.com/data-manager/api/devguides/concepts/encryption). Yes | Not supported. No |
| Developer token | Not required. | Required. |
| Support for uploading [session attributes](https://developers.google.com/data-manager/api/devguides/events/google-ads/offline/send-events#session_attributes) and IP addresses for events | Available to all API users. Yes | [Only available to specific API users](https://ads-developers.googleblog.com/2026/01/changes-to-ip-address-and-session.html). No |
| [Conversion adjustments](https://developers.google.com/data-manager/api/devguides/events/google-ads/offline/upgrade#conversion-adjustments) | Supported in the unified [`IngestEvents`](https://developers.google.com/data-manager/api/reference/rest/v1/events/ingest) method. | Requires the separate `ConversionAdjustmentUploadService`. |
| Quotas and limits | Project-based [quotas and per-request limits](https://developers.google.com/data-manager/api/devguides/limits). | [Developer token-based quotas](https://developers.google.com/google-ads/api/docs/api-policy/access-levels) and [per-request limits](https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion-upload-service). |
| Error model | Uses a [fast-fail model](https://developers.google.com/data-manager/api/devguides/concepts/understand-errors#fast-fail). | Uses a [partial failure model](https://developers.google.com/google-ads/api/docs/best-practices/partial-failures). |

## Difference in destination account requirements

In the Data Manager API, the `operating_account` of the
[destination](https://developers.google.com/data-manager/api/devguides/concepts/destinations) must be the
[Google Ads conversion customer](https://developers.google.com/google-ads/api/docs/conversions/getting-started#conversion_tracking_setup). This differs from the Google Ads API.

> [!IMPORTANT]
> **Key Term:** The **Google Ads conversion customer** is the Google Ads account that owns the conversion action identified by the `product_destination_id` of the destination.

The Google Ads API supports sending conversions for a Google Ads account using the
`customer_id` of either:

1. The **Google Ads conversion customer**.

   The Data Manager API supports this approach.
2. [Any account that is a parent or descendant](https://developers.google.com/google-ads/api/docs/conversions/getting-started#importing_across_accounts) of the
   **Google Ads conversion customer**.

   The Data Manager API doesn't support this approach. If you're utilizing this
   behavior in the Google Ads API, change the `operating_account` of each
   destination to the owner of the conversion action. This may differ from the
   `customer_id` you use in your Google Ads API requests.

## Conversion adjustments

The Data Manager API unifies initial conversion uploads and subsequent conversion
adjustments into a single method.

In the Google Ads API:

- Adjusting conversions requires using the separate `UploadConversionAdjustments` method in the `ConversionAdjustmentUploadService`.
- If you attempt to upload multiple conversions using the standard `UploadClickConversions` method for the same conversion action with the same transaction ID (`order_id`), the request will fail.
- You must specify the `ConversionAdjustmentType` in the request.

In the Data Manager API:

- Conversion uploads and adjustments use the unified [`IngestEvents`](https://developers.google.com/data-manager/api/reference/rest/v1/events/ingest) endpoint.
- Uploading an event with an existing `transaction_id` for the same conversion action with updated conversion values or user data is automatically handled as an adjustment. The API won't return a duplicate transaction ID error.
- No adjustment type is required in the request. The Data Manager API infers how to process the adjustment based on the fields provided in the event.
- Unlike the Google Ads API, the Data Manager API doesn't support conversion retractions, which completely remove a previously recorded conversion by setting its conversion value and count to `0`. You can restate the value of a conversion, but the conversion count will remain the same.

For more details, see [Conversion adjustments](https://developers.google.com/data-manager/api/devguides/events/google-ads/conversion-adjustments).