docs
Open the app →

Sending conversions to Google Ads

The two ways to report a conversion to Google Ads — a pixel from the browser and an upload from our server — what each one needs, field by field, and the one combination that doubles your reported sales.

Google's bidding optimises on the conversions Google knows about. A lead that arrives by WhatsApp two days later, or a sale on an affiliate network three pages after the click, is one it never sees — so it bids as though those campaigns earned nothing.

There are two ways to tell it, and this page is mostly about keeping them apart:

  • The pixel. Fires from the visitor's browser, the moment the goal happens.
  • The upload. Posted from our server, matched on the gclid — the id Google puts on the click.

They are not two settings you turn on for safety. Point both at the same conversion action and Google counts every sale twice.

one conversion, two ways to tell GoogleThe conversiona lead form, aWhatsApp tap, anapproved salein the browser, at onceThe pixelfrom the visitor’s browserConversion action AThe uploadfrom our serverConversion action Bfrom our server, seconds laterTwo different actions. Point both at one and Google counts the sale twice.
One conversion, two ways to report it. The pixel speaks from the visitor’s browser the moment it happens; the upload speaks from our server, matched on the gclid. Each needs its own conversion action, because Google has no way of telling that the two are the same sale.

#Which one you need

What you are measuring Use Why
A sale on an affiliate network The upload There is no page of yours to put a pixel on.
A WhatsApp or phone tap Either The pixel is less setup; the upload survives a refused cookie.
A lead form on your own site Either Same.
A sale that can be refused or refunded The upload Only the upload knows the status later.
A shop checkout The pixel, usually The value is on the page already.
Traffic where many visitors block scripts The upload A blocked pixel reports nothing and says nothing.

If you want both running, they have to report to two different conversion actions, and only one of them should be marked primary. See the double-count trap.


#Part 1 — the pixel

#What actually happens

on the page, in about a secondThe visitor actstaps WhatsApp, or submitsThe UTMCAP tagrecords the goal for thisclickA pixel is attachedto that goal, with an IDand a labelgtag.js is loadedby the tag, only nowConversion sentAW-… and that labelGoogle Adscounts it, hours laterthenwhat you never installgtag.js in your page sourceNothing is added to your HTML. The tag fetches it when it is needed.
Nothing Google-shaped sits in your page until a conversion actually happens. The tag records the goal, then fetches gtag.js and hands it the conversion — which is why a page with no Google tag on it can still report one.

Step by step, with the detail that matters:

  1. The visitor does something you defined as a goal — submits the form, taps WhatsApp, taps the phone number, reaches a thank-you page.
  2. The UTMCAP tag records the goal against that visitor's click. This part happens whether a pixel exists or not, and it is what your own reports use.
  3. The tag looks at which pixels are attached to that goal. A pixel is attached to one goal, so a site with three goals and three pixels fires exactly one of them.
  4. The tag loads Google's gtag.js — then, not before. It queues the conversion first and sends it the instant the script arrives, so a slow script does not lose the conversion.
  5. Google counts it against the conversion action the label belongs to, and shows it in reporting some hours later. Not immediately.

#There is no Google tag on your page

This surprises people, so it is worth saying plainly. You do not add gtag.js to your HTML. You do not add Google Tag Manager. The only script on your page is the UTMCAP tag, and it fetches Google's script on demand, once, the first time a Google pixel actually fires.

Three things follow from that:

  • A visitor who never converts never loads anything of Google's. Fewer requests on every page, and one less third-party script on the ones that do nothing.
  • The pixel cannot fire before the goal is recorded. The order is fixed, so there is no case where Google has a conversion and your own reports do not.
  • A refused advertising cookie means no pixel at all. If your site gates the tag behind consent, the tag never runs and neither does the pixel. That is correct behaviour and it is also lost data — which is the argument for the upload.

#Setting it up in Google Ads

You need a conversion action that expects a call from your own page rather than from a Google tag.

  1. Go to Goals → Conversions → Summary and create a new conversion action.
  2. Choose Website as the source.
  3. When Google offers to scan your site or install its tag, take the option that lets you add the action manually instead.
  4. Fill in the name, the goal category, and a value (see Value below).
  5. Save it, then open it again and look at its data source. It should read Manual event.

That last check is the one that matters. An action set up to be fired by the Google tag automatically will never receive anything from UTMCAP — it will sit at zero conversions and report no error.

Then open the action's tag setup. Google shows you a send_to value that looks like this:

AW-123456789/AbC-D_efGhIjKlMn

#The two fields are one string, split at the slash

one string in Google AdsAW-123456789/AbC-D_efGhIjKlMntwo fields in UTMCAPAW-123456789Conversion IDAbC-D_efGhIjKlMnConversion labelPaste the whole string into the ID box and it fires nothing, with no error.
Google shows the two halves joined by a slash. UTMCAP asks for them separately, so the whole string pasted into the first box is the commonest mistake here — and it fires nothing and reports no error.
Part Goes in Shape
Before the slash Conversion ID AW- then 8–12 digits
After the slash Conversion label Letters, digits, dashes and underscores

The Conversion ID is the same for every action in your account. The Conversion label is what makes one action different from another — so three goals reporting separately means one ID and three labels.

Pasting the whole string into the Conversion ID box is the usual mistake. It looks right, fires nothing, and reports no error anywhere. UTMCAP refuses it on save for exactly that reason, so if the box turns red, check for a slash.

#Setting it up in UTMCAP

Open Tag Manager, pick the site, go to the Pixels tab, and press Pixel.

Field What to choose
What to fire A network pixel
When The goal, as "Lead form fires" — or Every page view
Network Google Ads
Tell it this happened conversion — Google has only this one
Conversion ID AW-123456789
Conversion label AbC-D_efGhIjKlMn

Then press Publish to my site. Nothing fires until you do, and the pages pick the change up within five minutes — so a test straight after saving tests the old version.

#What the browser sends

This is the whole of it:

gtag('event', 'conversion', {
  send_to: 'AW-123456789/AbC-D_efGhIjKlMn',
  value: 2500,
  currency: 'INR'
});

Nothing else. No visitor details, no page content, no click id.

That last absence is the important one. There is no field in Google's browser conversion that an uploaded conversion could be matched against, so Google cannot tell that a pixel and an upload are the same sale. (Meta is different — UTMCAP sends Meta an eventID precisely so it can deduplicate the browser event against the server one. Google has no equivalent to send.)

#Where the value comes from

Three sources, in this order. The first one that has a number wins:

  1. The goal call itself, if your site passes one: utmcap.goal('purchase', { value: 2500, currency: 'INR' }).
  2. Values from the page — a CSS selector you configure on the site, pointing at the element holding the total. The tag reads it and strips the currency symbol and the commas, so ₹2,500.00 arrives as 2500.
  3. Nothing. The pixel is sent with no value.

Currency defaults to USD when a value is found but no currency is.

A number read off a page is a number a visitor with developer tools can change, so page values are used for the pixel only. What UTMCAP records as revenue comes from the goal call or the signed lane. See Goals on your own site.

#Value, and why it matters

A pixel with no value sends no amount. Google then falls back to the default value on the conversion action, so every conversion is worth the same — often ₹1 or $1, whatever was typed when the action was made. Smart Bidding then treats a junk enquiry and a ₹90,000 order as identical.

A primary action feeds bidding. Google's Primary action setting decides whether Smart Bidding optimises toward it. Three goals all marked primary with the same value tells Google that a phone tap and a completed lead form are worth the same thing. Give them different values, or mark the weaker ones secondary.

#A worked example

One site, three goals, three conversion actions. One ID, three labels:

Goal Conversion ID Conversion label Value In Google Ads
Lead form AW-123456789 Q5_lCIbz… 500 Primary
WhatsApp click AW-123456789 WQk3CInz… 150 Primary
Phone click AW-123456789 KBcuCIzz… 150 Secondary

Three pixels in UTMCAP, each attached to its own goal. Three conversion actions in Google Ads, each with its own label. The reporting then separates lead forms from taps, which is the point of doing it this way rather than firing one conversion for everything.


#Part 2 — the upload

The other direction entirely: no browser, no script, no cookie. Every conversion UTMCAP records for a Google click is posted to the Google Ads API and matched on the gclid.

out, when Google sends the clickAuto-taggingGoogle puts gclid on theURLExternal IDnames the parameter toreadThe clickstored with the gclid onitback, seconds or days laterThe conversiona goal, or a networkpostbackMatched by gclidto the click Google billedyou forUploadedto one conversion actionOnly the statuses you chose are sent. A refunded sale is never reported as revenue.
The same round trip as a postback, with Google at both ends. Nothing is asked of the page — the gclid arrives on the URL and the conversion goes back over an authenticated call, so it survives a blocked script or a refused cookie.

This is the one that keeps working for visitors who block scripts, refuse cookies, or tap a WhatsApp button and never come back to the page at all. It is also the only one that can take a sale back.

#What has to be in place

Four things, and the upload is silent if any one of them is missing.

Where What Why
Google Ads Auto-tagging on Puts gclid on the URL. Without it there is nothing to match a conversion to.
Google Ads A conversion action that accepts imports The upload targets it by id.
UTMCAP The traffic source is connected to Google Ads The upload uses the same login the cost sync uses.
UTMCAP The source's External ID names the parameter holding the gclid This is where UTMCAP reads it from.

The last one is the one people miss. A source can be connected, a conversion action chosen, and everything look configured — and nothing is ever sent, because no click carries a gclid UTMCAP can find.

To check: open the clicks log and look at the External ID column. If it is empty on your Google clicks, the upload has nothing to send and has been sending nothing.

#Setting up the upload

On the traffic source, open Integration:

Field What it does
Send conversions to Google Ads The switch. Off means nothing is sent.
Conversion action Which action they are counted under. The list fills with your account's import-from-clicks actions once a login is chosen and saved. "Create one for me" makes a suitable one, so you need not touch Google Ads at all.
Which conversions Approved only, or Approved and pending.
External ID The URL parameter holding the gclid — on the source's main settings, not here.

The Integration tab saves with its own small Save button. The teal Save changes at the bottom of the dialog says "Saved" and does not keep these fields.

#What gets sent, and when

Which conversions. Only the statuses you chose — approved unless you also asked for pending. A rejected conversion or a chargeback is never uploaded. This is the quiet advantage over a pixel: a lead that turns out to be junk is not reported to Google as a sale.

Which clicks. Only those carrying a gclid. Google refuses a click older than its own window, so a conversion that arrives months later is not accepted.

How quickly. Two paths, one result:

  • Instantly, as soon as a postback or a goal is recorded — after the response has gone, so the network never waits on Google;
  • Hourly, as a safety net, picking up anything the instant send missed, failed on, or never saw, such as conversions imported from a network's API.

Neither can send the same conversion twice. Each claims a conversion before sending it, and a claim only succeeds for one nobody has sent and nobody is sending.

What the upload carries. The gclid, the time, the value and currency, and an order id. The order id is what makes a retry safe — it matches an upload against other uploads, which is why it does nothing at all about a pixel.


#Never both at one conversion action

one sale, reported twiceOne saleor one leadThe pixelno id Google can matchThe uploadan order id of its ownOne conversion actioncounts both — two salesThe pixel sends no id the upload could match, so nothing joins them up.Smart Bidding then bids up on profit that is not there.
The failure this page exists to prevent. Both routes report the same sale, neither carries an id the other could be matched against, and Smart Bidding raises bids on a return that is half what it reads.

This is the mistake that costs money rather than data.

If a pixel and the upload point at the same conversion action, Google counts one sale twice:

  • once from the browser, when the visitor reaches your thank-you page;
  • once from the upload, a few seconds later, against the same click.

Nothing deduplicates them. Smart Bidding then sees twice the conversions, decides the campaign is twice as profitable as it is, and bids up accordingly. The figures look wonderful and the money goes.

The check, in UTMCAP: open the traffic source's Integration tab and read the Conversion action it names. Then open your pixels and check that none of their labels belongs to that same action. Different actions, and both can run.

Choose one per conversion action:

The upload The pixel
Survives ad blockers and consent refusals Yes No
Counts a lead that never returns to the page Yes No
Knows whether the sale was approved or refunded Yes No
Works with no code on the page Yes No
Needs a gclid on the click Yes No
Reports the instant the visitor converts Within seconds Immediately

For affiliate sales and for WhatsApp or phone leads, the upload is the right one and the pixel should be left out. If you want both — an in-browser signal for something else — point them at different conversion actions and mark one as secondary in Google Ads, so only one feeds bidding.


#Testing it, in order

Do these in order. Each one rules out everything above it.

  1. Wait five minutes after publishing. Pages cache the published tag for that long. Testing sooner tests the old version.
  2. Trigger the goal for real, in a browser where you have accepted cookies if your site asks.
  3. Check Live events in UTMCAP. The goal should appear, with a click id. If it does not, the problem is the goal, not Google — see Goals on your own site.
  4. For a pixel: open DevTools → Network and filter for google. You should see gtag/js?id=AW-… load and then a request to /collect or /pagead/…/conversion. If gtag.js loads and no conversion follows, the label is wrong.
  5. For the upload: check the clicks log for an External ID on that click. No External ID, no upload.
  6. Look in Google Ads a few hours later, not immediately. Google batches conversions into its own reporting.

The first real conversion is also the first test of the whole chain, so it is worth triggering one yourself rather than waiting to find out.

#When nothing arrives in Google Ads

#If you are using the pixel

  1. Did you press "Publish to my site"? An unpublished pixel does not exist on the page.
  2. Is the whole send_to string in the Conversion ID box? It must be split at the slash.
  3. Is the conversion action's data source "Manual event"? An action waiting for Google's own tag will never hear from UTMCAP.
  4. Did the goal fire at all? Check Live events first. A pixel attached to a goal that never fires looks identical to a broken pixel.
  5. Is the tag loading? If your site gates it behind consent and you clicked Reject, nothing runs — correctly.

#If you are using the upload

  1. Is the External ID set on the traffic source? Empty means no gclid, which means nothing is sent, silently.
  2. Is auto-tagging on in Google Ads? Without it the gclid never reaches your landing page.
  3. Do your clicks show an External ID? Check the clicks log. If the column is empty, the problem is upstream of UTMCAP.
  4. Is the conversion the right status? Only approved is sent unless you chose otherwise.
  5. Is the click too old? Google refuses conversions against clicks beyond its window.
  6. Is the conversion action one that accepts imports? A web conversion action will not take an upload.

#See also

Tracking tips by email

Practical tips on tracking, attribution and ad costs, from the people who build UTMCAP.

Unsubscribe any time. Privacy policy