Google Ads — manual setup

Google Ads is the most setup-heavy of the four destinations. The credentials are OAuth-only (no manual token paste path), but the per-conversion-action mapping needs a fair bit of clicking around in the Google Ads dashboard.

Google Ads requires Basic Access on your developer token before server-side uploads work. The first time you connect, your token is in Test Account mode — server uploads succeed only against test accounts, not production. Apply for Basic Access at Google Ads → Tools → API Center (1-3 days, sometimes longer). While waiting, AdsPing falls back to the browser-side gtag tag which works immediately. See the Basic Access section below for the application content.

Before you start

  • You need a Google Ads account with at least one conversion action. If you're just creating everything for the first time, set up the conversion action FIRST (Tools → Conversions → + New conversion action) — AdsPing can't create it for you, just forward to it.
  • Your Google account needs Admin or Standard access on the Google Ads account. Read-only or email-only access is insufficient. Check at Tools → Access and security in Google Ads.
  • Manager (MCC) accounts: if your account is an MCC, AdsPing connects to the MCC and lets you pick which sub- account to forward conversions to. The conversion actions themselves still live on the sub-account.
Why OAuth only: Google Ads's API requires refresh tokens that get rotated server-side. There's no equivalent of Meta's long-lived "system user token" — every server-side caller has to either go through OAuth or use a service account with a tightly-scoped JSON key (which Google Ads only supports on enterprise plans). For 99% of users, OAuth is the only path.

Create a conversion action (full wizard)

If you don't already have the conversion action you want AdsPing to fire (Lead, Purchase, PhoneCall, etc.), create it first inside Google Ads. AdsPing forwards events to existing actions — it can't create them via API. The walkthrough below uses a phone-call conversion as the example, which is the trickiest type to get right; the same steps apply to website conversions (just simpler — fewer screens).

Phone-call conversions have multiple sub-types and they are NOT all the same. The one you want for AdsPing is the one that uses a gtag event snippet on your website — not Google's call-forwarding numbers. AdsPing fires the snippet's event from pb.js when a visitor clicks a tel: link. Call-forwarding conversions are tracked by Google directly and can't be integrated with AdsPing.

Step 1 — Pick data sources

Open ads.google.com ToolsConversions + New conversion action. The first screen asks which data sources you want to track. Tick the boxes for what applies to your site:

  • Conversions on the website — purchases, leads, sign-ups, add-to-cart. Required for any standard ecommerce or lead-gen flow.
  • Conversions obtained from phone calls — only if you want to track phone clicks AND you have a phone number on the site.
  • Leave Transformations in practice (mobile app) and Offline conversions unchecked unless you specifically need them — they don't flow through AdsPing.
Google Ads conversion creation — data source selection screen with Website conversions and Phone call conversions ticked
Step 1 — Select the data sources from which conversions will be measured. Tick what applies; AdsPing only consumes the website + phone-call paths.

Click Save and continue.

Step 2 — Define the conversion action

The next screen asks for the conversion action's details. Typical settings for a phone-call action:

  • Goal: Lead → Potential customer obtained through phone call
  • Source: Website (clicks on a phone number on the site)
  • Value: "Use a single value" → enter a reasonable per-call value. For optimisation to work well, this should reflect the actual margin a call brings on average (e.g. 50 TRY for a service business where 1 in 4 calls converts and average ticket is 200 TRY).
  • Counting: One conversion per click (avoids double-counting the same caller).
  • Click-through window: 30 days is the default and works for most B2C funnels.

Step 3 — Grab the event snippet

After saving, Google shows a 3-step summary. Click Show the event snippet on the conversion row to reveal the gtag snippet:

Google Ads wizard step 3 — Summary screen with Show the event snippet link
Step 3 — The summary screen. Click 'Show the event snippet' for each conversion to reveal the gtag values.

The snippet looks like this:

Google Ads event snippet for a phone-call (Tıkla ve ara) conversion — gtag event with send_to, value, currency, event_callback
The snippet itself. The two values AdsPing needs are inside the send_to string.

The only two values AdsPing needs from this snippet are inside the send_to string. It's always formatted as AW-ConversionId/ConversionLabel. For the example above:

'send_to': 'AW-17521972457/ufKLCP6P-6ocEOmpkKNB'
              └─────┬─────┘ └────────┬────────┘
                  ID                LABEL
  • Conversion ID = AW-17521972457 (account-level — same prefix for every action on this Google Ads account)
  • Conversion Label = ufKLCP6P-6ocEOmpkKNB (action-specific — different for every conversion action)

Note:Don't copy the value, currency, or event_callback from this snippet — AdsPing fills those in from each event's own data (e.g. the value comes from pbq('track', 'Purchase', { value: 199.90, currency: 'TRY' })).

Step 4 — Verify the action appears under Goals

Once the wizard finishes, the new action shows up under Goals with a status badge. A brand-new action usually says "Intervention is needed" for the first 24-48 hours — that's Google waiting for the first conversion data to come in. It clears automatically once events start flowing.

Google Ads Goals overview — Potential customer obtained through phone call action listed with 5 primary conversion processes
The action is now live in Google Ads. Note the 'Intervention is needed' status — this just means no events have been recorded yet; it clears once AdsPing starts forwarding.

Step 5 — Wire the action into AdsPing

With Conversion ID and Conversion Label in hand, open the pixel in AdsPing → Destinations → Google Ads card → + Add action (or Manage Edit on an existing pipeline) and fill in:

  • Name: something descriptive — e.g. "Phone click — Acme"
  • Conversion Action ID: from the URL of the action's detail page (see Step 2 below for how to find it)
  • gtag Conversion Label: the label string from the snippet (e.g. ufKLCP6P-6ocEOmpkKNB)
  • Event name filter: the pb.js event name that should fire this conversion — PhoneCall for phone clicks, Purchase for ecommerce, etc.
What pb.js does automatically: when a visitor clicks a <a href="tel:..."> link on the merchant's site, pb.js fires pbq('track', 'PhoneCall')without the merchant writing any code. The pipeline routes it to the matching Google Ads action via the label you configured. No manual onclick handler needed.
1

Connect Google Ads (OAuth)

Pixel detail → Google Ads card → Connect Google Ads. One consent screen grants AdsPing read access to GA4 properties + GTM containers + Google Ads customers.

adsping.io/dashboard/pixels/abc-1234/settings

Google Ads

Server-side conversion forwarding via Google Ads API

Connect your Google account. We'll list your accessible Google Ads customers + GA4 properties + GTM containers in one OAuth round-trip. Subsequent destinations (GA4, GTM) reuse the same OAuth credentials.

+ Connect Google Ads
1Start OAuth

You'll be redirected to Google's consent screen. Three scopes are requested:

  • https://www.googleapis.com/auth/adwords — Google Ads API access (uploadClickConversions, listAccessibleCustomers, googleAds:search).
  • https://www.googleapis.com/auth/analytics.readonly — GA4 property listing.
  • https://www.googleapis.com/auth/tagmanager.readonly — GTM container listing.

Accept all three. After consent, Google redirects back to AdsPing and the Google Ads card flips to "Set up first conversion action".

Screenshot pending

Google OAuth consent screen showing AdsPing requesting access

Capture Google's standard OAuth consent screen showing the three scopes AdsPing requests. Helps users feel confident about what permissions they're granting.

Real screenshot — to be added

Note:The scope list looks broad ("view your Google Ads campaigns" etc.) because Google's scope vocabulary doesn't have a fine-grained "upload conversions only" option. AdsPing only ever calls uploadClickConversions + read-only methods — never modifies campaigns, budgets, or targeting.

2

Find your Conversion Action ID

Unlike Meta and TikTok where you copy a single Pixel ID, Google Ads requires you to map each conversion action separately. The action ID is a numeric value hidden in the URL — Google's UI doesn't surface it directly.

Open ads.google.com → top nav ToolsConversions. Click the conversion action you want to wire up (or create one — recommended Goal: "Submit lead form" for lead-gen, "Purchase" for ecommerce, Source: Website).

ads.google.com/aw/conversions

Conversions

All conversion actions on this account

Lead — Acme Inc Form

Category: Lead · Counting: One · Status: Active

Recording
2Click the row

Purchase — Acme Inc Order

Category: Purchase · Counting: Every · Status: Active

Once you click into the action detail, look at the URL:

ads.google.com/aw/conversions/customers/3884688380/detail?ctId=987654321

↑ Look at the URL bar above

https://ads.google.com/aw/conversions/customers/3884688380/detail?ctId=987654321
  • 3884688380 = your Customer ID. AdsPing pre-fills this from OAuth — you don't need to copy it.
  • 987654321 = your Conversion Action ID. The number after ctId=. This is the value to copy into AdsPing.

Lead — Acme Inc Form

ID: 987654321 · Created 2 weeks ago

SettingsTag setupDiagnostics

Category

Lead

Counting

One

Conversion window

90 days

Screenshot pending

Google Ads conversion action detail page with URL highlighted

Capture the address bar AND the page header so users can match what they see. The ctId in the URL is the key value — annotate or arrow it.

Real screenshot — to be added

Note:Customer ID can be displayed in two formats: 3884688380 (10 digits, no dashes) or 388-468-8380 (with dashes). AdsPing accepts both. Conversion Action ID is always plain digits.

3

Set up first conversion action in AdsPing

Pixel detail → Google Ads card → Set up first conversion action. The customer ID and OAuth tokens are pre-filled from the consent step — you only fill the action-specific values.

adsping.io/dashboard/pixels/abc-1234/settings

Set up Google Ads conversion

Map your first conversion action — subsequent actions reuse the customer

3884688380 (Acme Inc)

Auto-detected from OAuth — pick the right one if you have multiple

987654321
3Paste action ID

From the URL ctId= (step 2 above)

Lead (form submit)

Which AdsPing event triggers this conversion to fire

AW-12345678

Optional but recommended — see step 4 for where to find this

AbCDe1FgHIjKlMnoPq

Per-action 22-char label (also from step 4)

+ Add actionCancel

On Save, AdsPing creates a pipeline tied to this conversion action. The pipeline filters by event name — only Lead events from pb.js will trigger this Google Ads upload. Other events (Purchase, ViewContent, …) won't go to Google Ads unless you add another pipeline mapping them.

Note:The "Maps to pb.js event" picker offers common standard names. For custom events not on the list, type the name directly (e.g. WhatsAppClick). AdsPing accepts any string — must just match what your pb.js code or auto-tracker fires.

4

Find gtag fallback values (recommended)

While Basic Access is pending, browser-side gtag is the only way to fire Google Ads conversions. Both AdsPing's server upload and the gtag tag can coexist — Google deduplicates by gclid.

Same Conversion Action detail page → switch to the Tag setup tab → pick "Install the tag yourself". Google shows a full snippet — the two values you need are inside it.

ads.google.com/aw/conversions/customers/.../detail?ctId=987654321

Lead — Acme Inc Form

SettingsTag setupDiagnostics

Install the tag yourself

Install the conversion event snippet on your site

<!-- Event snippet for Lead - Acme Inc Form conversion page -->
<script>
  gtag('event', 'conversion', {
      'send_to': 'AW-12345678/AbCDe1FgHIjKlMnoPq',
      'value': 1.0,
      'currency': 'USD'
  });
</script>

gtag Conversion ID

AW-12345678

Shared across all conversion actions in this Google Ads account. Will be the same when you add other actions.

gtag Conversion Label

AbCDe1FgHIjKlMnoPq

Different for every action. Identifies which conversion this fire counts as.

Paste both values into the AdsPing dialog (step 3 — gtag fields). Save. From then on, pb.js will:

  1. Load googletagmanager.com/gtag/js?id=AW-12345678 on visitors' sessions.
  2. When a matching pb.js event fires (e.g. Lead), also fire gtag('event', 'conversion', {send_to: 'AW-12345678/AbCDe1FgHIjKlMnoPq' }) from the browser.
  3. Simultaneously try the server-side upload via Conversions API. If Basic Access is still pending, the API rejects with TEST_ACCOUNT — that's expected; the gtag fire already counted the conversion.
Why both? Once Basic Access is approved, you don't need to remove the gtag fields. Google deduplicates a server-side and browser-side conversion attached to the same gclid + within ~24 hours. AdsPing's pipeline handles both legs automatically.
5

Add more conversion actions

Each conversion action = one pipeline. Lead-gen sites typically have 2-4 (Lead, AppointmentRequest, WhatsAppClick), ecommerce typically has 3-5 (ViewContent, AddToCart, InitiateCheckout, Purchase).

Pixel detail → Google Ads card → + Add action. The dialog opens with the customer ID + OAuth tokens + gtag Conversion ID pre-filled from the first pipeline — you only fill in the new Conversion Action ID, the new pb.js event, and the new gtag Conversion Label.

adsping.io/dashboard/pixels/abc-1234/settings

Google Ads — 3 actions configured

One pipeline per Google Ads conversion action

Google Ads — Leadpb.js event: Lead
Edit
Google Ads — AppointmentRequestpb.js event: AppointmentRequest
Edit
Google Ads — WhatsAppClickpb.js event: WhatsAppClick
Edit
+ Add action
4Reuses customer + tokens

Note:For agencies running multi-brand setups: the Customer ID in the add-action dialog is editable. If you connect a parent MCC account via OAuth, you can map different actions on the same pixel to different sub-accounts. Common pattern: one AdsPing pixel per merchant domain, with Google Ads pipelines pointing at the merchant's own Google Ads sub-account under your MCC.

Basic Access — when, why, how

Google's Conversions API requires your developer token to graduate from Test Account mode (default) to Basic Access. Until graduated, server uploads return UNAUTHENTICATED: token does not have valid permissions for production accounts for any non-test customer.

How to apply

  1. Google Ads → Tools → API Center.
  2. Click Apply for Basic Access.
  3. Fill the form:
    • Tool name: AdsPing (or your white-label name).
    • Tool URL: https://adsping.io.
    • Customer use case: Server-side conversion forwarding for advertisers using AdsPing pixel tracking. We upload click conversions on behalf of the advertiser via the Conversions API after pb.js captures the event in the browser.
    • Read or read+write: Read+write (we call uploadClickConversions).
    • API methods used: customers:listAccessibleCustomers, googleAds:search, customers:uploadClickConversions.
  4. Submit. Google reviews 1-3 business days, sometimes longer.

While waiting

gtag fallback (step 4) covers conversions during this period. Match rate is lower than server-side but adequate. Set up gtag values for every conversion action so nothing is dropped.

After approval

Server-side uploads start working immediately — no AdsPing config change needed. The gtag fallback continues to fire alongside; Google deduplicates the two via gclid. If you want pure server-side after approval, clear the gtag Conversion ID + Label on each pipeline.

Common issues

UNAUTHENTICATED: …token does not have valid permissions…

Basic Access is still pending or your developer token was revoked. Apply (or re-apply) at the API Center. While waiting, gtag fallback keeps conversions flowing.

INVALID_ARGUMENT: gclid is required

Server uploads need either a Google click ID (gclid), an iOS app click ID (gbraid), or an Android one (wbraid). pb.js captures all three from URL params and stores in a first-party cookie. Visitors arriving without a Google ad click won't have any of these — that's expected; AdsPing skips the upload silently for those events. Only Google ad clickers count toward Google attribution anyway.

DUPLICATE_CONVERSION_IN_REQUEST

Two pipelines on the same pixel both forward the same event to the same conversion action. Edit one of them — change either the pb.js event filter or the Conversion Action ID so they don't collide.

DEVELOPER_TOKEN_NOT_APPROVED or unexpected behavior across customers

Basic Access on a developer token works only for accounts you directly manage. If your token is approved but you're trying to upload conversions for a customer that hasn't linked your manager account, Google rejects. Either: (a) the customer links your MCC, or (b) the customer applies for Basic Access on their own developer token and shares it with you.

Next

  • Google Ads concepts — multi-action design + match rate tradeoffs.
  • Diagnostics — Google Ads doesn't have Test Events; here's the next- best verification path.