Docs Guides

Connect Google Ads

Developer token, OAuth client, refresh token, conversion actions and Customer Match.

Connecting Google Ads lets RetaFunnel upload your leads, booked calls and purchases as offline conversions (matched to the click through the gclid that Google adds to your landing URLs) and keep Customer Match lists in sync for segments of identified people. Google's setup is more technical than Meta's: you need a developer token, an OAuth client in Google Cloud and a refresh token. Every step is below, click by click. Budget half an hour, plus Google's approval time for the developer token.

What you need#

  • A Google Ads account that is running ads, with admin access.
  • A Google Ads manager account (MCC). The developer token lives there. If you do not have one, create it for free at ads.google.com/home/tools/manager-accounts and link your ad account to it (Manager account → Accounts → + → Link existing account, then accept the invitation in the ad account).
  • A Google account that can sign in to the manager account (the refresh token is tied to it).
  • A Google Cloud project (free): console.cloud.google.com.

Four values are collected along the way: the developer token, the OAuth client id, the OAuth client secret and the refresh token, plus your customer id.

Step 1: the developer token#

  1. Sign in to the manager account at ads.google.com.
  2. Admin (gear icon, called Tools and settings in older interfaces) → API Center.
  3. Fill in the form (company name, website, contact email, how you will use the API: "upload offline conversions and Customer Match lists for my own accounts") and accept the terms. A developer token appears, a 22-character string like AbCdEfGhIjKlMnOpQrStUv. Copy it.
  4. The token starts at the Test account access level, which only works with Google's test accounts. Click Apply for Basic access on the same page and submit the short form. Basic access is enough for RetaFunnel. Google usually answers within a few business days by email. You can finish the other steps while you wait; uploads simply fail with DEVELOPER_TOKEN_NOT_APPROVED until then.

Step 2: the OAuth client in Google Cloud#

An OAuth client is what lets RetaFunnel act on your behalf without knowing your Google password.

  1. console.cloud.google.com → project selector at the top → New project → name RetaFunnel → Create, and select it.
  2. APIs & Services → Library → search Google Ads API → Enable.
  3. APIs & Services → OAuth consent screen (Google now calls it Google Auth platform → Branding). Choose External, app name RetaFunnel, your email as support and developer contact, Save. No scopes need to be added here.
  4. Still in the consent screen settings, under Audience (or Test users) add your own Google account as a test user, then click Publish app so the app is In production. This matters: while the app is in Testing, refresh tokens expire after 7 days and your connection would break weekly.
  5. APIs & Services → Credentials → Create credentials → OAuth client ID.
  6. Application type: Web application. Name RetaFunnel playground. Under Authorised redirect URIs click Add URI and paste exactly https://developers.google.com/oauthplayground. Create.
  7. Copy the Client ID (ends in .apps.googleusercontent.com) and the Client secret (GOCSPX-…).

Why "Web application" and not "Desktop app": the refresh token is obtained with Google's OAuth Playground in the next step, and the Playground needs that redirect address. A Desktop client only works with a command-line helper, which RetaFunnel does not require.

Step 3: the refresh token with the OAuth Playground#

  1. Open developers.google.com/oauthplayground.
  2. Click the gear icon at the top right → tick Use your own OAuth credentials → paste the Client ID and Client secret from Step 2 → close the panel.
  3. In Step 1 on the left, in the box "Input your own scopes", paste https://www.googleapis.com/auth/adwords and click Authorize APIs.
  4. Sign in with the Google account that has access to your Google Ads (manager) account. If Google warns that the app is not verified, click Continue (it is your own app). Allow the access.
  5. You are back in the Playground at Step 2. Click Exchange authorization code for tokens.
  6. Copy the Refresh token (a string starting with 1//). This is the value RetaFunnel needs; the access token next to it is temporary and not needed.

Step 4: your customer id#

  1. Sign in to the ad account (not the manager) at ads.google.com. The customer id is at the top right of the page in the form 123-456-7890.
  2. RetaFunnel wants the 10 digits; dashes are ignored when you paste.
  3. If the ad account is reached through a manager account (most agencies), note the manager account's id too: RetaFunnel asks for it as Login customer id.

Step 5: paste into RetaFunnel#

  1. RetaFunnel → Integrations → card Google Ads.
  2. Fill Developer token, OAuth client id, OAuth client secret, Refresh token (all four are required the first time), Customer id, and Login customer id if you use a manager account.
  3. Click Save. The badge turns connected. The values are encrypted and never shown again.

Step 6: create the conversion actions and map them#

Google only accepts an uploaded conversion into a conversion action that exists and is of the "import" type. Create three:

  1. Google Ads (the ad account) → Goals → Conversions → Summary → + New conversion action.
  2. Choose Import → Other data sources or CRMs → Track conversions from clicks → Continue.
  3. Fill the form:
    • Goal and action optimisation: Submit lead form for the lead action, Book appointment for booked calls, Purchase for purchases.
    • Conversion name: RetaFunnel Lead, then RetaFunnel Booked Call, then RetaFunnel Purchase.
    • Value: for the purchase action choose Use different values for each conversion (RetaFunnel sends the real amount); for the other two pick a fixed value or "Don't use a value".
    • Count: One for leads and bookings, Every for purchases.
    • Click-through conversion window: 90 days (the longest Google allows) so late sales still count.
  4. Save and continue, then Done. Repeat for the other two actions.
  5. Get each action's id: open the conversion action; the address bar contains ctId=123456789, and the Settings section lists the id as well.
  6. RetaFunnel → Integrations → Google Ads → section Conversion actions: paste the id of each action into Lead, Booked call and Purchase. Fill all three at the same time (saving replaces the whole mapping). Click Save.

Leads, bookings and purchases without a mapped action are simply skipped for Google; RetaFunnel's own reports are unaffected.

Step 7: check that it works#

  1. Make sure your ads use the URL parameters from RetaFunnel's Ads page → Ad URL templates (Google tab). They add campaign_id, adset_id, ad_id and keep the gclid, so each visit can be tied to a click. Auto-tagging must be on in Google Ads (Admin → Account settings → Auto-tagging); it is on by default.
  2. Wait for a real lead from a Google click, or create a test one: visit your page from a Google ad in a private window, submit the form with a real test email, then on Leads open the person and click Mark sale. Within 15 minutes the Audiences page shows a Google sync-log entry of kind click_conversions with count 1.
  3. In Google Ads the conversion appears under Goals → Conversions within a few hours (Google reports imported conversions with a delay; it is normal to see them the next day).

Customer Match (audiences of identified people)#

Segments whose target is person (they are made of people with an email or phone) can be synced to Google as Customer Match user lists:

  1. Segments → open the segment → switch on Google Ads in the sync panel. (For segments targeting anonymous visitors the switch explains that Google has no equivalent of Meta's Seg_ events: Customer Match works only on identified people.)
  2. On the first sync RetaFunnel creates a user list named [RetaFunnel] <segment name> in your account and adds the hashed emails and phones; later syncs add new members and remove people who left the segment.
  3. Use the list in Google Ads under Tools → Shared library → Audience manager, in a campaign's audience targeting or as an exclusion. Google needs a list of at least 1,000 matched people before it serves ads with it; smaller lists show "Too small".

Eligibility. Google only allows Customer Match for accounts with a good policy history that have accepted the Customer Match policy; many brand-new accounts are not eligible yet. If your account is not eligible the upload is refused with an error like CUSTOMER_MATCH_USER_LIST_NOT_ALLOWED or NOT_ELIGIBLE…, visible in Audiences → Sync log. Nothing in RetaFunnel can change that; contact Google Ads support or wait until the account qualifies. Offline conversions (Step 6) work regardless.

What is uploaded and when#

What When Data sent
Click conversion for a lead A form with email or phone is submitted on a page reached from a Google click gclid, conversion time, the mapped conversion action
Click conversion for a booked call Calendly booking or a booked_call outcome from CRM or CSV same, plus an order id
Click conversion for a purchase with value Stripe payment, CRM webhook, CSV import or a sale marked by hand same, plus value and currency
Customer Match add / remove An identified person enters or leaves a person segment with Google sync on SHA-256 hashes of the normalised email and phone
Campaign, ad group and ad names and daily spend Every 6 hours, for the ids seen in your traffic in the last 90 days read only; shown on the Ads page

A scheduled job runs every 15 minutes: it recomputes synced segments, updates the user lists, and uploads the conversions of the last three hours that have not been uploaded yet. Only sessions that carried a gclid can produce a Google conversion; visits from other sources are ignored for Google. Test sessions never reach Google.

Common problems#

What you see Why Fix
DEVELOPER_TOKEN_NOT_APPROVED The developer token is still at Test account level Apply for Basic access in API Center and wait for the approval email
invalid_grant · Token has been expired or revoked The refresh token was issued while the OAuth app was in Testing (7-day expiry), or you changed the Google account password / removed the app's access Publish the app (Step 2.4), redo Step 3 and paste the new refresh token
USER_PERMISSION_DENIED · CUSTOMER_NOT_ENABLED The signed-in Google account cannot access this customer id, or the manager account id is missing Check the customer id; set Login customer id to the manager account id; make sure the Google account used in Step 3 has access
CONVERSION_ACTION_NOT_FOUND · conversions count 0 while leads exist The ids in Conversion actions are wrong, belong to another account, or the action is not an Import from clicks action Re-open the action in Google Ads, copy ctId= again, paste all three ids, Save
Conversions uploaded but Google shows none Google reports imported conversions with delay, and only for clicks younger than the click-through window Wait up to 24 hours; make sure the conversion window is 90 days
TOO_RECENT_CONVERSION_ACTION / CLICK_NOT_FOUND Google needs about 6 hours after a click before it accepts a conversion for it, and the click must belong to this account Normal for very fresh leads; they are retried on later runs
CUSTOMER_MATCH_USER_LIST_NOT_ALLOWED The account is not eligible for Customer Match See Eligibility above
No Google rows on the Ads page Ads do not carry the URL parameters, or auto-tagging is off Paste the Google URL template into the campaign's tracking template; enable auto-tagging

Technical reference for developers: Integrations.

Last updated