Google Ads
Follow our setup guide to push offline conversions and audiences to Google Ads with QUANTI:
Overview
The Google Ads Reverse connector pushes data from your data warehouse into Google Ads. It supports four push types:
OCI — Standard (revenue) — upload offline click conversions with gross revenue to feed tROAS Smart Bidding
OCI — Margin-based Smart Bidding — same as above but with margin instead of revenue, to optimize on profitability
Enhanced Conversions for Leads (ECL) — close the B2B / lead-gen attribution loop by sending lead conversions enriched with hashed PII
Conversion Adjustments — retroactively modify a conversion already uploaded (value restatement, full retraction, or PII enhancement)
Customer Match — sync a user audience (CRM list) to Google Ads for targeting, exclusion, or as a seed for Performance Max
Multiple push types can be activated on a single connector. Each is configured independently in the Mapping tab after creation.
Prerequisites
A Google account with admin access to the target Google Ads account(s)
A Google Ads MCC (Manager Account) — required for API access, even for a single account. The MCC must have API access enabled.
For OCI and ECL: a conversion action configured in Google Ads with the correct type (
import from clicksfor OCI,enhanced conversions for leadsfor ECL)For ECL specifically: the Enhanced Conversions for Leads terms must be accepted in the Google Ads UI (Admin → Conversions → Settings)
For Conversion Adjustments: the target account must be allowlisted for the Conversion Upload Service (grandfathered accounts only — new accounts use Data Manager)
Setup Instructions
Authorize your Google account
Click Continue with Google and sign in with the Google account that has access to your MCC and customer accounts.
QUANTI: requests the following scopes: adwords (Google Ads API access) and datamanager (Data Manager API access for OCI, ECL, and Customer Match). Both scopes are required — if you previously connected your Google account without the datamanager scope, you must re-authorize.
Select your MCC (login account)
Select the MCC (Manager Account) to use for API calls. This is the account QUANTI: will authenticate as when calling the Google Ads API. It must have manager access to the customer accounts selected in the next step.
The MCC Customer ID is a 10-digit number visible in the Google Ads interface (top-right corner). Do not include hyphens.
Select your customer accounts
Select one or more Google Ads customer accounts (the leaf accounts where conversions and audiences will land). These are the accounts containing your conversion actions and user lists.
If you manage multiple brands or clients, you can target multiple accounts in a single connector — the conversion_action field in your source table determines which account each row goes to.
Choose your push types
Select the push templates to activate. Each template corresponds to a distinct push type:
OCI — Standard (revenue) — offline click conversions with revenue value
OCI — Margin-based Smart Bidding — offline click conversions with margin value
Enhanced Conversions for Leads — lead conversions with hashed PII
Conversion Adjustments — corrections to previously uploaded conversions
Customer Match — audience synchronization from your CRM
You can activate multiple templates. Source table and field mapping for each are configured in the Mapping tab after creation.
Name your connector
Give the connector a unique name within your QUANTI: project, then click Create. Source queries and field mappings are configured in the Mapping tab.
Push Types
OCI — Standard (revenue)
Uploads offline click conversions attributed to a Google Ads click. Use this template when your Smart Bidding strategy optimizes on gross revenue (tROAS on revenue).
The conversion must have been preceded by a Google Ads click — the GCLID is the join key between the click and the offline event.
Fields:
gclid
STRING
✅
Google Click Identifier captured at the time of the click (typically stored in your CRM or landing page). Must be the GCLID from the original click that led to the conversion — not a later click.
conversion_action
STRING
✅
Full resource name of the Google Ads conversion action: customers/{customer_id}/conversionActions/{conversion_action_id}. Find it in Google Ads → Goals → Conversions → click the action → the ID is in the URL, or use the Google Ads API to list conversion actions.
conversion_time
TIMESTAMP
✅
UTC timestamp of the offline conversion event (order confirmed, payment received…). Format: RFC3339 (2024-11-15T14:32:00Z). Must be within the conversion action's attribution window (up to 90 days).
conversion_value
FLOAT
✅
Gross revenue of the conversion in the currency specified. Used directly by Smart Bidding to optimize tROAS.
currency
STRING
✅
ISO 4217 currency code (EUR, USD, GBP…). Must match the currency accepted by the conversion action.
order_id
STRING
✅
Unique order or transaction identifier. Used as the idempotence key — if the same order_id is uploaded twice, Google deduplicates. Also used to reference the conversion in Conversion Adjustments.
consent_ad_user_data
STRING
—
DMA consent signal for sending this user's data to Google. Map the consent column from your tag or CMP. Accepted values: granted, denied (also true/false, 1/0). If left unmapped, no consent signal is sent — EEA conversions may be rejected or unutilized.
consent_ad_personalization
STRING
—
DMA consent signal for using this user's data for ad personalization. Same accepted values as consent_ad_user_data. Required for remarketing and Customer Match in the EEA.
OCI — Margin-based Smart Bidding
Identical to OCI Standard in structure, but the conversion_value field carries the margin rather than the gross revenue. Use this template to teach Smart Bidding to optimize on profitability rather than turnover.
Fields: identical to OCI Standard. The only semantic difference is in conversion_value:
gclid
STRING
✅
Google Click Identifier captured at click time.
conversion_action
STRING
✅
Resource name of the conversion action (customers/{customer_id}/conversionActions/{id}). Should be a dedicated margin conversion action — do not mix with the revenue action.
conversion_time
TIMESTAMP
✅
UTC timestamp of the conversion event (RFC3339).
conversion_value
FLOAT
✅
Margin of the order (revenue minus cost of goods). This is the value Smart Bidding will optimize on — ensure it reflects the actual margin, not revenue.
currency
STRING
✅
ISO 4217 currency code.
order_id
STRING
✅
Unique order identifier. Used as idempotence key and reference for future Adjustments.
consent_ad_user_data
STRING
—
DMA consent — same values as OCI Standard.
consent_ad_personalization
STRING
—
DMA consent — same values as OCI Standard.
Enhanced Conversions for Leads (ECL)
Sends lead conversion events enriched with hashed PII (email, phone, name, address) to Google Ads. ECL closes the B2B attribution loop: when a lead clicks a Google Ad, submits a form, and later converts in your CRM, ECL matches the CRM event back to the original click using the lead's identity — even without a GCLID.
QUANTI: automatically normalizes and hashes all PII fields with SHA-256 before sending:
Email: lowercased, all whitespace removed, and for
gmail.com/googlemail.comaddresses the dots in the local part and any+suffixare stripped (Google normalization spec)Phone: normalized to E.164 format, then hashed
First/last name: lowercased and trimmed — accents are preserved (Google's spec does not require removing them and removing them would reduce match rate on French or accented names)
Country code and postal code: sent as-is, not hashed
Fields:
order_id
STRING
✅
Internal lead identifier (form submission ID, CRM lead ID…). Used as idempotence key and reference for future Conversion Adjustments.
conversion_action
STRING
✅
Resource name of the Enhanced Conversions for Leads conversion action (customers/{customer_id}/conversionActions/{id}). The action must be of type ECL — a standard import action will not accept PII.
conversion_time
TIMESTAMP
✅
UTC timestamp of the lead event (form submission, MQL qualification, opportunity won…). RFC3339 format.
gclid
STRING
—
Google Click Identifier captured at form submission. Optional — Google can match the event using PII alone, but providing the GCLID significantly improves match rate when available.
conversion_value
FLOAT
—
Lead value — typically a predicted LTV, deal size, or stage-weighted opportunity value.
currency
STRING
—
ISO 4217 currency code. Required if conversion_value is provided.
email
STRING
—
Lead email address in its raw form — QUANTI: handles normalization and SHA-256 hashing before upload. Provide at least one of email or phone for matching.
phone_number
STRING
—
Lead phone number (any format accepted — QUANTI: normalizes to E.164 using France as default region). Hashed before upload.
first_name
STRING
—
Lead first name (raw — QUANTI: lowercases and hashes).
last_name
STRING
—
Lead last name (raw — QUANTI: lowercases and hashes).
country_code
STRING
—
ISO 3166-1 alpha-2 country code (FR, US…). Sent in clear — used for address-based matching.
postal_code
STRING
—
Postal code. Sent in clear — used for address-based matching.
consent_ad_user_data
STRING
—
DMA consent signal. Accepted values: granted, denied (also true/false, 1/0). Required for EEA leads.
consent_ad_personalization
STRING
—
DMA consent signal for personalization. Same values.
Before activating ECL, you must accept the Enhanced Conversions for Leads terms in the Google Ads UI: Goals → Conversions → Settings → Enhanced conversions for leads → Turn on. Without this, uploads will fail with DESTINATION_ACCOUNT_ENHANCED_CONVERSIONS_TERMS_NOT_SIGNED.
Conversion Adjustments
Retroactively corrects a conversion already uploaded via OCI or ECL. Lookback window: 90 days.
Three adjustment types are supported:
RESTATEMENT
Update the conversion value (margin revised, partial refund, order updated). Requires adjusted_value.
RETRACTION
Remove the conversion entirely (full refund, order cancelled). No value needed.
ENHANCEMENT
Add PII to a previously uploaded click conversion (ECL flow — not applicable to most use cases).
Fields:
order_id
STRING
✅
Order identifier — must match exactly the order_id sent in the original OCI upload. Used by Google to look up the conversion to adjust.
conversion_action
STRING
✅
Resource name of the conversion action (customers/{customer_id}/conversionActions/{id}). Must match the one used in the original upload.
adjustment_type
STRING
✅
RESTATEMENT, RETRACTION, or ENHANCEMENT. RESTATE_VALUE is accepted as an alias for RESTATEMENT.
adjustment_date_time
TIMESTAMP
✅
UTC timestamp of the adjustment event (refund date, cancellation date…). Must be after the original conversion time and within 90 days. Format: RFC3339 (2024-11-20T10:00:00Z).
adjusted_value
FLOAT
—
New conversion value after adjustment. Required for RESTATEMENT — the row is rejected without it. Not used for RETRACTION.
currency
STRING
—
ISO 4217 currency code. Required for RESTATEMENT if the original conversion had a currency.
Conversion Adjustments use the Google Ads API (not the Data Manager API). They are only available to accounts that were allowlisted for ConversionUploadService before June 15, 2026. New accounts cannot use Adjustments — contact QUANTI: support if you need this for a new account.
Customer Match
Syncs a user audience from your data warehouse to a Google Ads user list. Use it for:
Retargeting or exclusion lists (CRM customers, churned users, existing buyers)
Lookalike / Performance Max seeds
Observation audiences for Smart Bidding insights
QUANTI: automatically creates the user list in Google Ads (named Quanti Reverse — {prebuild_id}) and keeps it in sync. PII is hashed with SHA-256 before upload — provide at least one identifier (email or phone) per row for a usable match rate.
Sync modes:
mirror (default)
Full sync — members added in the source are added to the list; members removed from the source are removed from the list
add_only
Additive — new members are added, existing members are never removed
remove_only
Removal only — members present in the source are removed from the list
Fields:
user_id
STRING
✅
Internal user identifier — used as deduplication key when syncing the audience. Does not need to match any Google identifier.
email
STRING
—
Email address in raw form — QUANTI: normalizes (lowercase, whitespace removal, Gmail dot/plus stripping) then hashes with SHA-256. Provide at least email or phone for a useful match rate.
phone_number
STRING
—
Phone number (any format) — QUANTI: normalizes to E.164 (default region: FR) then hashes with SHA-256.
first_name
STRING
—
First name — QUANTI: lowercases, trims, keeps accents, then hashes with SHA-256.
last_name
STRING
—
Last name — QUANTI: lowercases, trims, keeps accents, then hashes with SHA-256.
country_code
STRING
—
ISO 3166-1 alpha-2 country code (FR, US…). Sent in clear — used for address-based matching alongside postal code.
postal_code
STRING
—
Postal code. Sent in clear — used for address-based matching.
consent_ad_user_data
STRING
—
DMA consent signal. Accepted values: granted, denied (also true/false, 1/0). Required for EEA audiences — members without consent granted may be excluded by Google.
consent_ad_personalization
STRING
—
DMA consent signal for personalization. Same values. Required for remarketing in the EEA.
Consent & DMA (European users)
For users in the European Economic Area (EEA), Google requires a consent signal alongside each conversion event or audience member. QUANTI: carries this signal per row via two optional fields available on all push types (except Conversion Adjustments):
consent_ad_user_data
granted, true, 1, yes / denied, false, 0, no
Consent to send this user's data to Google
consent_ad_personalization
same
Consent to use this data for personalized ads
If a value is absent or unrecognized, the field is omitted from the payload — QUANTI: never infers consent.
The natural source for these columns is your QUANTI: Tag Analytics connector (ad_user_data / ad_personalization columns from Consent Mode v2), or your CMP export if you collect consent server-side.
Scheduling
Frequency
Daily (default, at 3 AM)
Lookback window
7 days (default) — rows from the past N days are re-processed on each run
Troubleshooting
Last updated