Webclat / GTM Practice

Can I fire a Google Ads conversion without the JS snippet - via image pixel or server-to-server call?

Quick answer

Yes - Google Ads supports an image-pixel fallback for environments that cannot run JavaScript, and more robustly, server-side conversion tracking via the Google Ads API or by routing through a server-side GTM container, which is the recommended path when conversions need to survive ad blockers or a checkout flow with no client-side script access.

Why this happens

This comes up when a checkout or conversion flow genuinely cannot run client-side JS, or when you specifically want conversion data to be resilient to client-side blocking. Google Ads offers more than one path here, and picking the wrong one for your constraints is the actual problem: an image pixel is the simplest but least reliable option; server-side, via a GTM server container or the Ads API directly, is more work but production-grade.

Fix it

  1. For the simplest case, use the noscript image pixel Google Ads provides alongside the standard tag - it fires a basic conversion hit but cannot carry enhanced conversion data or a transaction ID for deduplication.
  2. For a checkout system with backend order confirmation but no reliable client-side execution, route the conversion through a server-side GTM container instead - have your backend call the container's endpoint with the order data as soon as the order is confirmed, and let its Google Ads Conversion Tracking tag forward it.
  3. For the most direct server-to-server path, use the Google Ads API's conversion upload endpoints to send offline or enhanced conversions directly from your backend, keyed to a click identifier (GCLID) captured earlier in the session.
  4. Whichever path you choose, make sure a GCLID is captured and stored somewhere your conversion-sending code can access it later, since a conversion upload with no GCLID and no other matching signal cannot be attributed to the original ad click.
  5. Do not run both an image pixel and a full JS or server-side conversion for the same event without a shared transaction_id dedup key - Google Ads treats each successfully received signal as a separate hit unless tied together.

How to verify it worked

For the image pixel, check the Network tab for the request to the pagead/conversion endpoint returning 200 on a real or test confirmation page load. For server-side paths, check your server GTM container's own Preview mode or logs for the incoming request from your backend, then check Google Ads' conversion diagnostics after 24 hours for the conversion action showing recent, non-zero activity.

Still stuck after working through this?

Send us what you are seeing in Preview and the Network tab. We trace GTM containers for a living and can usually tell you what is actually happening in one look.

Ask a GTM Engineer