Managing conversions requires a complex integration, often involving multiple
interdependent tools and processes. This guide offers detailed steps you can
take to troubleshoot any issues you're having, whether you're getting errors
from the API that you don't understand, or if you're confused about the metrics
or diagnostics you see in the UI.

> [!IMPORTANT]
> **Important:** A successful import response from the API does not necessarily mean the conversions have been attributed. See [Data discrepancies after a successful upload](https://support.google.com/google-ads/answer/13321563#Datadiscrepanciesaftersuccessfulupload) for more details on data discrepancies after a successful import.

## Reading metrics in the Google Ads UI

The Google Ads UI **does not** organize conversion metrics by import date, so using
the reports in the UI to verify import results can be misleading. To verify
import health, start with [offline data diagnostics](https://developers.google.com/google-ads/api/docs/conversions/upload-summaries). You can
also learn more about diagnostics in the Google Ads UI for
[enhanced conversions for leads](https://support.google.com/google-ads/answer/15249267) and
[enhanced conversions for web](https://support.google.com/google-ads/answer/11954870).

## Problems with Enhanced Conversions for Leads

This section focuses on addressing common issues encountered while importing
enhanced conversions for leads.

### Common errors

The following guidance helps you diagnose and fix common errors with enhanced
conversions for leads.

| Error ||
|---|---|
| [`NO_CONVERSION_ACTION_FOUND`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#no_conversion_action_found) | The specified conversion action is either not enabled, or cannot be accessed by the client account specified by the `customer_id` field in the request. Make sure the conversion action in your upload is enabled and is owned by the customer sending the upload request. This error may also occur if the GCLID in the request belongs to a client account that does not have access to the conversion action specified in the request. You can verify whether a GCLID belongs to a client account using the [`click_view`](https://developers.google.com/google-ads/api/fields/v26/click_view) resource, by submitting a query that filters by `click_view.gclid` and `segments.date`, where the date is the date the click occurred. |
| [`INVALID_CONVERSION_ACTION_TYPE`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#invalid_conversion_action_type) | The specified conversion action has a type that is not valid for enhanced conversions for leads. Make sure the `ConversionAction` specified in your upload request has type `UPLOAD_CLICKS`. |
| [`CUSTOMER_NOT_ENABLED_ENHANCED_CONVERSIONS_FOR_LEADS`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#customer_not_enabled_enhanced_conversions_for_leads) | Make sure you've enabled enhanced conversions for leads in your conversion settings. Find instructions for this in the [prerequisites](https://developers.google.com/google-ads/api/docs/conversions/upload-offline#prerequisites) guide. |
| [`DUPLICATE_ORDER_ID`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#duplicate_order_id) | Imported events include multiple conversions with the same Order ID and were not processed. Make sure Order IDs are unique and try again. |
| [`CLICK_NOT_FOUND`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#click_not_found) | No click was found that matched the provided user identifiers. > [!NOTE] > **Note:** Treat this error as a warning unless it occurs with the majority of your conversions. If a conversion encounters this warning, the Google Ads API includes it in the `successful_event_count` of your [offline data diagnostics](https://developers.google.com/google-ads/api/docs/conversions/upload-summaries). The Google Ads API includes an entry for `CLICK_NOT_FOUND` in the `https://developers.google.com/google-ads/api/reference/rpc/v26/OfflineConversionUploadClientSummary#alerts[]` collection so you can monitor the frequency of this warning. This error is expected if the click is not from a Google Ads campaign. For example it may come from [SA360](https://marketingplatform.google.com/about/search-ads-360/) or [DV360](https://marketingplatform.google.com/about/display-video-360/). Other possible causes are as follows: - The uploading customer is different from the [Google Ads conversion customer.](https://developers.google.com/google-ads/api/docs/conversions/getting-started#conversion_tracking_setup) - [Tagging](https://developers.google.com/google-ads/api/docs/conversions/upload-offline#tagging) is not correctly configured for your lead form. - The uploaded data has not been correctly [normalized and hashed](https://developers.google.com/google-ads/api/docs/conversions/upload-offline#prepare-data). In rare instances where the uploading customer is different from the Google Ads conversion customer, this error can mean that the uploading customer has accepted the customer data terms, but the serving customer has not. You can determine if an account has accepted the customer data terms by querying the [`customer`](https://developers.google.com/google-ads/api/fields/v26/customer) resource and checking the `customer.conversion_tracking_setting.accepted_customer_data_terms` field. |

### Discrepancies in metrics

Keep in mind the following common issues:

- Conversions may be dropped by our processing pipeline for various reasons, and
  such conversions are unrecoverable. See
  [Data discrepancies after a successful upload](https://support.google.com/google-ads/answer/13321563#Datadiscrepanciesaftersuccessfulupload) for more
  information.

- Double-check that the Google tag is set up correctly on your webpage, and
  firing on lead form submissions. If your tag is **not** firing on form
  submissions, or if it is sending incorrect data, then you will likely see low,
  or no, attribution in uploaded conversions. Review our Help Center articles on
  [configuring Google Tag](https://support.google.com/google-ads/answer/11021502) and
  [configuring Google Tag Manager](https://support.google.com/google-ads/answer/11347292) for enhanced conversions
  for leads.

- If you're using enhanced conversions for leads *without* the Google tag on
  your webpage, then you **must** include the GCLID in your conversion imports
  by setting the [`ClickConversion.gclid`](https://developers.google.com/google-ads/api/reference/rpc/v26/ClickConversion#gclid) field on each
  conversion.

- Check that you're properly specifying **consent** in your uploads. You can do
  this by either setting the default consent settings for your account (in the
  Google Ads UI, click **Tools** \> **Data Manager** \> **Consent settings** ) or by
  setting the [`ClickConversion.consent`](https://developers.google.com/google-ads/api/reference/rpc/v26/ClickConversion#consent) field on
  each uploaded conversion.

### Problems with campaign performance

If you don't have any technical issues uploading your conversions and you are
comfortable with the metrics that are presented, but don't see the expected
campaign performance improvements, or "lift", after implementing enhanced
conversions for leads, reach out to [Google Ads Product Support](https://support.google.com/google-ads/gethelp)
for help.

## Problems with Enhanced Conversions for Web

This section focuses on addressing common issues encountered while importing
enhanced conversions for web.

### Common errors

The following guidance helps you diagnose and fix common errors with enhanced
conversions for web.

| Error ||
|---|---|
| [`CONVERSION_NOT_FOUND`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAdjustmentUploadErrorEnum.ConversionAdjustmentUploadError#conversion_not_found) | A conversion for the supplied conversion action and conversion identifier pair or `order_id` couldn't be found. Verify the conversion is a Google Ads conversion for the [Google Ads conversion customer](https://developers.google.com/google-ads/api/docs/conversions/getting-started#conversion_tracking_setup) specified in the request's `customer_id`. In addition, verify that the conversion was not for a click where `gbraid `or `wbraid` was populated instead of [`gclid`](https://support.google.com/google-ads/answer/9744275). Google Ads does not support enhanced conversions for web for these conversions. |
| [`CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAdjustmentUploadErrorEnum.ConversionAdjustmentUploadError#customer_not_accepted_customer_data_terms) | The customer data terms and conditions have not been accepted for the `customer_id` of the request. Find instructions for this in the [prerequisites](https://developers.google.com/google-ads/api/docs/conversions/upload-online#prerequisites) guide. |
| [`CONVERSION_ALREADY_ENHANCED`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAdjustmentUploadErrorEnum.ConversionAdjustmentUploadError#conversion_already_enhanced) | This conversion has already received an adjustment with the given `order_id` and `conversion_action`. Make sure to provide a unique `order_id` for each conversion. |
| [`CONVERSION_ACTION_NOT_ELIGIBLE_FOR_ENHANCEMENT`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAdjustmentUploadErrorEnum.ConversionAdjustmentUploadError#conversion_action_not_eligible_for_enhancement) | The `conversion_action` supplied is not eligible for enhanced conversions for web. In the Google Ads UI, make sure you check the **Turn on enhanced conversions** box on the conversion action referenced in your request. Find instructions for this in the [Help Center](https://support.google.com/google-ads/answer/13261987#setup_enhanced_conversions). |

## General conversion management issues

Keep in mind the following common issues:

- Attempting to set any enum field to `UNKNOWN` will result in a
  `RequestError.INVALID_ENUM_VALUE` error. This is a common problem when
  specifying `consent` when the advertiser may not know if consent was given.
  If the status of `consent` is unknown, it should be set to `DENIED`.

- When creating a conversion action for [App conversions](https://developers.google.com/google-ads/api/docs/conversions/categories#app-conversions) or
  [Firebase and third-party app analytics](https://developers.google.com/google-ads/api/docs/conversions/categories#firebase-third-party-app-analytics), you can only
  mutate the `app_id` field on create; once the conversion action has been
  created, this field cannot be changed.

- When creating a conversion action, you can only set the
  [`ConversionAction.attribution_model_settings.attribution_model`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAction.AttributionModelSettings#attribution_model)
  field to either [`GOOGLE_ADS_LAST_CLICK`](https://developers.google.com/google-ads/api/reference/rpc/v26/AttributionModelEnum.AttributionModel#google_ads_last_click) or
  [`GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN`](https://developers.google.com/google-ads/api/reference/rpc/v26/AttributionModelEnum.AttributionModel#google_search_attribution_data_driven). Any other option will
  result in a
  [`CANNOT_SET_RULE_BASED_ATTRIBUTION_MODELS`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionActionErrorEnum.ConversionActionError#cannot_set_rule_based_attribution_models) error. Our
  [blog post](https://ads-developers.googleblog.com/2023/04/first-click-linear-time-decay-and.html) announcing the deprecation of other attribution
  models has more details.

- The allowed range for the `click_through_lookback_window_days` field is
  `1` to `60` days for conversion actions with type `AD_CALL` and
  `WEBSITE_CALL`. For most other conversion actions, the allowed range is `1` to
  `90` days.

- The allowed range for the `view_through_lookback_window_days` field is
  `1` to `30` days for most conversion actions. This field must be *unset* for
  conversion actions of type `AD_CALL` and `WEBSITE_CALL`.

- Setting or updating the `include_in_conversions_metric` field on a conversion
  action will result in a `FieldError.IMMUTABLE_FIELD` error. Instead, set the
  `primary_for_goal` field, as described in the
  [conversion goals guide](https://developers.google.com/google-ads/api/docs/conversions/goals/overview).

- When creating a conversion action of type `WEBSITE_CALL` or `AD_CALL`, the
  [`value_settings.always_use_default_value`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionAction.ValueSettings#always_use_default_value) must be
  set to `true`. Specifying a value of `false` will result in an
  `INVALID_VALUE` error.

### Common errors

The following guidance helps you diagnose and fix common errors with offline
conversion imports.

| Error ||
|---|---|
| [`INVALID_CONVERSION_ACTION_TYPE`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#invalid_conversion_action_type) | The specified conversion action has a [type](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionActionTypeEnum.ConversionActionType) that is not valid for uploading click conversions. Make sure the `ConversionAction` specified in your upload request has type `UPLOAD_CLICKS`. |
| [`NO_CONVERSION_ACTION_FOUND`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#no_conversion_action_found) | The specified conversion action is either not enabled or cannot be found within the uploading `customer_id`. [Retrieve information about your conversion setup](https://developers.google.com/google-ads/api/docs/conversions/getting-started#conversion_tracking_setup) to make sure the conversion action in your upload is enabled and is owned by the `customer_id` of the upload request. |
| [`TOO_RECENT_CONVERSION_ACTION`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#too_recent_conversion_action) | The conversion action is newly created. Wait at least 6 hours after the action is created before retrying the failed conversions. |
| [`INVALID_CUSTOMER_FOR_CLICK`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#invalid_customer_for_click) | The `customer_id` of the request is not the same customer ID that was the [Google Ads API conversion account](https://developers.google.com/google-ads/api/docs/conversions/getting-started) at the time of the click. Update the `customer_id` of the request to the correct customer. |
| [`EVENT_NOT_FOUND`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#event_not_found) | Google Ads cannot find the combination of click ID and `customer_id`. Review the [requirements for `customer_id`](https://developers.google.com/google-ads/api/docs/conversions/upload-offline#construct-the-request) and confirm you are uploading using the correct Google Ads account. |
| [`DUPLICATE_CLICK_CONVERSION_IN_REQUEST`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#duplicate_click_conversion_in_request) | Multiple conversions in the request have the same combination of click ID, `conversion_date_time`, and `conversion_action`. Remove duplicate conversions from your request. |
| [`CLICK_CONVERSION_ALREADY_EXISTS`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#click_conversion_already_exists) | A conversion with the same combination of click ID, `conversion_date_time`, and `conversion_action` was previously uploaded. Ignore this error if you were retrying the upload and this conversion previously succeeded. If you want to add another conversion in addition to the previously uploaded conversion, adjust the `conversion_date_time` of the `ClickConversion` to avoid duplicating the previously uploaded conversion. |
| [`EXPIRED_EVENT`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#expired_event) | The imported click occurred before the timeframe specified in the `click_through_lookback_window_days` field. A change to the `click_through_lookback_window_days` [only impacts clicks recorded after the change](https://support.google.com/google-ads/answer/3123169), so changing the lookback window wouldn't resolve this error for the particular click. If appropriate, change the `conversion_action` to another action with a longer lookback window. |
| [`CONVERSION_PRECEDES_EVENT`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#conversion_precedes_event) | The `conversion_date_time` is before the date and time of the click. Update the `conversion_date_time` to a later value. |
| [`VALUE_MUST_BE_UNSET`](https://developers.google.com/google-ads/api/reference/rpc/v26/FieldErrorEnum.FieldError#value_must_be_unset) | The `ClickConversion` has a value set for either `gbraid` or `wbraid` (without a `gclid`) and has a value for `custom_variables` or `cart_data`, which Google Ads does not support with `gbraid` or `wbraid`. Unset the conflicting field. > [!NOTE] > **Note:** If a conversion sets both `gbraid` and `wbraid` and also fails another field validation check on the same conversion, the API can return [`GBRAID_WBRAID_BOTH_SET`](https://developers.google.com/google-ads/api/reference/rpc/v26/ConversionUploadErrorEnum.ConversionUploadError#gbraid_wbraid_both_set). Fix the other validation issue on the conversion. You do not need to remove click identifiers. |