How do I upload offline conversions to Google Ads now that the API blocks new users?

TofuAnswer by the Tofu team · checked

Black metal mailbox with a letter slot on a post beside a country road

Use Google's Data Manager. Since June 15, 2026, the Google Ads API rejects offline conversion uploads from anyone who wasn't already using it, with the error CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE. Marketers can connect HubSpot or Salesforce inside Google Ads with no code. Developers send the same data to the Data Manager API. Either way, send a GCLID or the lead's email or phone number (hashed, for the API) for each lead, then test before you go live. Google now calls the Data Manager API the primary API for offline conversions, so plan to move even if you still have access.

As of October 2026.

Before you start

  • Access to the right Google Ads account. For the API, data must go to the account that owns the conversion action, not a manager account above it.
  • An identifier for each lead. Either a GCLID saved in your CRM (this needs auto-tagging on), or the lead's email or phone number for enhanced conversions for leads.
  • For HubSpot: a HubSpot login. Import limits depend on your HubSpot plan.
  • For Salesforce: rights to enable the API, create custom fields and turn on field history tracking. The asynchronous API must be on, and sandbox environments aren't supported.
  • For the Data Manager API: a Google Cloud project with the Data Manager API enabled, OAuth with the scope https://www.googleapis.com/auth/datamanager, and the Google Account added as a user of the Google Ads account or a parent manager account. You don't need a developer token.

Step 1: Check whether you're still allowlisted

If your calls to ConversionUploadService.UploadClickConversions return CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE, you are not on the allowlist. None of Google's pages on this describes a way to request access. Google decided who keeps access by past activity, but its three pages give three different windows:

Google pageWho keeps Google Ads API access
Google Ads developer blog, May 15, 2026Developers who imported offline conversions between December 2025 and May 2026
Help article "Updates to your enhanced conversions settings"Developer tokens that sent a request between January 2026 and June 2026
Google Ads API deprecations pageDeveloper tokens with offline conversion uploads between December 17, 2025 and June 15, 2026

The windows overlap but don't match at the edges. If your last uploads fall inside one window and not another, ask Google Ads API support, which the developer blog names as the contact for questions. Access was tied to your developer token. On September 10, 2026, Google said it is sunsetting developer tokens and moving access levels to Google Cloud projects. The deprecations page says the offline conversion restriction still applies after that move. If you are allowlisted, you can keep using the Google Ads API while you build the Data Manager integration.

Step 2: Pick a route

RouteBest forWatch out for
HubSpot connector in Google AdsHubSpot usersConversions are chosen by Lifecycle Stage; import limits follow your HubSpot plan
Salesforce connector in Google AdsSalesforce usersOne connection per object (Lead, Opportunity or Order). The old Salesforce integration stopped being supported on May 31, 2025.
Data Manager APIData warehouses, custom pipelines, agenciesDeveloper work, a Google Cloud project and OAuth setup
Other Data Manager sources, or a partner such as ZapierData in BigQuery, Google Sheets, SFTP, Zoho CRM, ActiveCampaign and other sources on Google's listCheck Google's supported data sources table first; a partner like Zapier is a separate third-party service

Step 3: Turn on enhanced conversions if you'll send emails or phone numbers

Google's help says that starting in June 2026, enhanced conversions for web and for leads are one feature with a single on/off switch, and that since April 2026 Google Ads accepts data from tags, Data Manager and the API at the same time.

  1. In Google Ads, go to Settings in the Goals menu.
  2. Expand Customer data use.
  3. Check Turn on enhanced conversions.
  4. Select Agree and save, review the data terms, then select Agree and continue.

If you manage this through the API, version 26 (October 14, 2026) adds Customer.enablement_setting and Customer.effective_enablement_setting, which replace Customer.enhanced_conversions_for_leads_enabled.

Step 4a: Connect HubSpot

  1. In Google Ads, go to Summary in the Goals menu and choose + Create conversion action.
  2. Pick a category, select + Add conversion action, choose HubSpot, and click Next.
  3. Sign in to HubSpot, accept the customer data policy, and click Continue.
  4. Pick a conversion goal category and click Set up.
  5. Add conditions for which records count. For HubSpot, conditions must use the Lifecycle Stage field, unless joined to another condition with AND. A B2B team might use the stage that means "sales qualified."
  6. Click Continue, add optional filters, check the field mapping (required fields map on their own), and click Done, then Save and continue.

Step 4b: Connect Salesforce

  1. In Google Ads, go to Summary in the Goals menu and choose + Create conversion action.
  2. Choose a conversion category, select + Create conversion, and choose Salesforce from the list of data sources.
  3. In the "Set up custom event" panel, select Next, then log in to Salesforce. If the login window doesn't appear, allow pop-ups for ads.google.com.
  4. Click Done, then Continue, and select the Salesforce object (Lead, Opportunity or Order). Each object needs its own connection, so add a second one if you want both Lead and Opportunity conversions.
  5. Add optional filters, map the Salesforce fields, click Continue, review the integration name and setup, and click Done.

If you use cross-account conversion tracking from a manager account, Google says to link Salesforce to the manager account.

Map every identifier you have. Google says the connection works with at least one of GCLID, email or phone, and recommends mapping as many as you can.

Step 4c: Or send conversions with the Data Manager API

  1. Set up access. Enable the Data Manager API in your Google Cloud project and authenticate with the datamanager scope. Apps that sign in with people's own Google accounts eventually need Google's OAuth verification; service accounts don't.
  2. Set the destination. operatingAccount is the Google Ads account that owns the conversion action (accountType GOOGLE_ADS, 10-digit customer ID). loginAccount is the account where your credentials are a user. productDestinationId is the numeric conversion action ID, not its resource name, and the conversion action must be of type UPLOAD_CLICKS.
  3. Build each event. Set eventTimestamp (RFC 3339 in JSON), eventSource (such as WEB), and at least one identifier: adIdentifiers.gclid, gbraid or wbraid, or userData with a normalized, SHA-256 hashed email or phone number. Add transactionId for deduplication, and conversionValue in currency units (5.23, not micros) with currency. You can set consent for adUserData and adPersonalization.
  4. Send it with events.ingest.

Know the differences from the Google Ads API. The Data Manager API fails a whole request if a required field is wrong, instead of accepting part of it. Re-sending an event with an existing transactionId for the same conversion action counts as an adjustment. It can't retract a conversion: you can restate the value, but the count stays the same.

Step 5: Capture the GCLID if you use it

Turn on auto-tagging. Add a hidden GCLID field to every lead form, store the value with the lead in a custom CRM field, and send it back with the conversion. Google's example script keeps the GCLID for 90 days.

Step 6: Test before you go live

  • API: send the request with validateOnly: true first. It checks for errors without saving data. Then check results with requestStatus.retrieve. Since July 2026, problems with optional fields come back as field_warnings while the rest of the request still goes through.
  • New conversion actions: wait 4 to 6 hours after creating one before you upload to it.
  • Connectors: after the first import, confirm that the conversion action shows conversions before you use it for bidding.

Common problems

ProblemWhy it happensFix
CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATUREYour token wasn't uploading offline conversions in Google's windowMove to a Data Manager connector or the Data Manager API
API rejects the destinationoperatingAccount points to a manager accountUse the account that owns the conversion action
Whole request failsOne required field is invalid (fast-fail)Fix the field; test with validateOnly: true
Conversion values look 1,000,000 times too highValues sent in microsSend currency units
You need to remove a conversionThe Data Manager API doesn't support retractionsRestate the value; the count stays
"Salesforce API isn't active"Salesforce's asynchronous API is offTurn it on in Salesforce
"HubSpot data import paused"You reached your HubSpot plan's import quota (Google's help describes it as a limit on how many lists you can import at a time)Upgrade your HubSpot plan, as Google's help suggests
Old Salesforce integration stopped importingGoogle ended support for it on May 31, 2025Reconnect Salesforce through Data Manager
Conversions don't match to clicksNo GCLID stored and no email or phone sentCapture the GCLID, or turn on enhanced conversions and send hashed email
Sources (15)

Ask Tofu next

Pick a question and Tofu Ads Agent answers it in chat.

Related answers