FAQ

Common migration errors and how to fix them

The failures below account for most broken uploads after the June 15, 2026 migration — whether you hit them as API error responses or as rejected rows in a file import.

"My Google Ads API upload suddenly fails" — UploadClickConversions blocked

Cause: As of June 15, 2026, offline conversion imports through the Google Ads API are blocked for most developer tokens. Fix: Move the upload to the Data Manager API's events:ingest endpoint — the migration guide covers the steps, and the converter produces a valid payload from your existing CSV.

Invalid timestamp / malformed event_timestamp

Cause: Sending the legacy Google Ads format (2026-06-20 15:07:01+00:00 with a space) instead of RFC 3339 (2026-06-20T15:07:01Z), or omitting the timezone offset entirely. Fix: Use the timestamp cheatsheet. Every timestamp needs the T separator and an explicit offset or Z.

Unknown or invalid product_destination_id

Cause: Putting the conversion action name (the legacy CSV's Conversion Name) where the API expects the numeric conversion action ID, or using an ID from the wrong account. Fix: In Google Ads open Goals › Conversions, click the conversion action, and copy the numeric ctId from the URL. Use one request per conversion action.

No click identifier / event not attributed

Cause: Rows with an empty gclid — often an upstream CRM export problem — or click IDs pasted into the wrong nested field. In the Data Manager API, click IDs belong inside ad_identifiers. Fix: Every event needs at least one of gclid, gbraid, or wbraid inside ad_identifiers. The converter flags rows with no click identifier before you upload.

Conversion value looks 1,000,000× too large

Cause: Old Google Ads API habits — many money fields there used micros. Fix: conversion_value in the Data Manager API is the plain currency amount: 5.23, not 5230000.

Conversions accepted but missing from reports

Cause: Usually one of: the conversion is dated outside the ~90-day click lookback window; a duplicate transaction_id was deduplicated; or a timezone error shifted the conversion into a different reporting day. Fix: Check the warnings the converter raises for old and future-dated rows, and remember Data Manager API processing is asynchronous — use the returned request_id to retrieve diagnostics.

"Where did partial failure go?"

Cause: The Google Ads API's partial_failure mode doesn't exist in the Data Manager API, and there is no synchronous per-row result. Fix: Validate before sending (validate_only: true), and treat the request_id in the response as your handle for diagnostics.

Enhanced conversions for leads: hashing errors

Cause: Unhashed or wrongly-normalized email/phone values in user_data.user_identifiers. Identifiers must be SHA-256 hashed and hex- or Base64-encoded, with the encoding declared in the request. Fix: Follow the normalization rules in Google's documentation exactly (lowercase, trim, E.164 phone numbers) before hashing. This tool currently converts click-based conversions only.