Quick answer: Use server-side Google Tag Manager for conversions that happen on your website or app in real time. Use an offline conversion import for outcomes recorded later in a CRM, point-of-sale system, or backend. A SaaS team often needs both: GA4 events travel through sGTM, while qualified leads and closed deals return to Google Ads from the CRM.
Google Ads server-side tagging moves the Google Ads Conversion Tracking tag from the page into a GTM server container. The server container receives an event, applies your trigger and consent state, then sends the permitted conversion data to Google Ads.
Offline conversion tracking follows a separate route. It sends a business result that became known after the original visit, such as a sales-qualified lead, signed contract, in-store purchase, approved application, or first deposit. The conversion usually comes from a CRM or backend rather than a page event.
Neither route turns consent off. A server endpoint changes where data is processed. It does not create permission to identify or measure someone who opted out.
Server-Side Tagging vs. Offline Conversions
Choose the path based on where the final business event exists.
| Method | Event source | Delivery path | Best fit | Main dependency |
|---|---|---|---|---|
| Browser Google Ads tag | Website | Browser to Google Ads | Immediate page conversions | The browser must load and send the tag |
| Google Ads server-side GTM tag | Website or app event | Google tag or GA4 to sGTM to Google Ads | Purchases, sign-ups, and other real-time events | The server container needs a valid incoming event and trigger |
| Offline import or enhanced conversions for leads | CRM, POS, or backend | Data Manager, connector, or server integration to Google Ads | Qualified leads, closed deals, in-store sales, approved applications | The source system must retain usable match data |
Server-side GTM can also receive a direct server-to-server event. That still does not make every backend event an offline conversion import. The event must reach the Google Ads conversion action through a supported tag or import method with the fields that method expects.
GA4 Data Import is another separate feature. It enriches Google Analytics reports. It does not replace a Google Ads offline conversion import from your CRM.
GA4, GTM, and CRM Architecture for Offline Conversions
A practical SaaS implementation has two event routes:
- A visitor clicks a Google ad. Auto-tagging adds a click identifier such as
gclid,gbraid, orwbraidwhen the campaign and device support it. - The website records the consent state and saves permitted attribution fields with an immutable lead or account ID.
- Website conversions such as
sign_uptravel through the Google tag or GA4 to the server-side GTM container. - The Google Ads Conversion Tracking tag in sGTM fires for the matching event and conversion action.
- The CRM owns later lifecycle events such as
qualified_lead,sales_accepted_lead, andclosed_won. - Each selected CRM stage is sent to its own Google Ads conversion action through Data Manager, a supported connector, or the Hardal Google Ads Offline Conversions destination.
Define ownership before shipping the pipeline:
| Owner | Decision |
|---|---|
| Marketing operations | Conversion actions, primary and secondary goals, values, and bidding use |
| Revenue operations | CRM stage definitions and the timestamp that marks each stage |
| Analytics engineering | Click ID capture, event mapping, delivery, retries, and deduplication |
| Privacy or legal | Consent text, data retention, and permitted user-provided fields |
The teams should share one event contract. For example, closed_won needs one definition, one timestamp source, one currency rule, and one stable ID across the CRM, warehouse, Hardal, and Google Ads.
How to Set Up Google Ads Server-Side Conversion Tracking
This setup covers real-time website events. Google documents the full flow in its server-side Google Ads conversion guide.
1. Deploy a GTM Server Container
Create a Server container in Google Tag Manager and deploy its tagging server. Use a first-party HTTPS endpoint such as https://metrics.example.com for production traffic.
Hardal can host the runtime. The Hardal sGTM setup guide covers the container configuration, tagging URL, preview URL, and manual provisioning flow.
2. Route the Google Tag to sGTM
In the web container, add server_container_url to the Google tag and set it to your first-party tagging URL. Create GA4 event tags for the conversions you want to process, such as purchase or sign_up.
Open Preview mode for both containers. Confirm that the request reaches the server endpoint and that the GA4 client claims it. If no client claims the request, the downstream Google Ads tag has no event to process.
3. Add the Server Conversion Linker
Create a Conversion Linker tag in the server container and fire it on all relevant page events. Google lists this tag as a prerequisite for the server-side Google Ads Conversion Tracking tag.
Keep the consent state attached to the event. The server container should enforce the choice collected on the website, not replace it with a new default.
4. Create the Google Ads Conversion Tracking Tag
For each website conversion action:
- Open Tags > New in the server container.
- Select Google Ads Conversion Tracking.
- Enter the Conversion ID and Conversion Label from Google Ads.
- Trigger the tag on the matching GA4 event name.
- Restrict the trigger to events claimed by the GA4 client when other clients use the same container.
- Map the transaction ID, value, and currency from the incoming event.
The Conversion ID and Conversion Label belong to the real-time tag. An offline import uses a conversion action and conversion timestamp instead. A Google Ads developer token authenticates a custom API integration. It is not a conversion field to add to each GTM event.
5. Configure Enhanced Conversions
If your consent and data policy allow it, pass user-provided data such as email or phone through the Google tag. The server-side Google Ads tag can send the available user data with the conversion. Google's sGTM setup documents the user_data variable flow.
Use the exact field mapping and normalization rules in Google's current documentation. Do not send raw customer fields in an arbitrary event parameter and assume Google will match them.
6. Validate Before Removing the Browser Tag
Trigger one known test conversion and check:
- The GA4 client claims the incoming request.
- The expected Google Ads tag fires once.
- The Conversion ID and Label match the intended action.
- Transaction ID, value, and currency contain the expected values.
- Consent and user-provided data follow the test user's choice.
- No equivalent browser tag sends the same conversion action.
After the server route works, remove the duplicate web Google Ads conversion tag. Keep the web Google tag or GA4 event transport that sends events to the server container.
How to Send CRM Offline Conversions to Google Ads
Google recommends enhanced conversions for leads for new lead-based offline measurement. It combines imported CRM outcomes with click IDs and permitted first-party user data.
1. Create Offline Conversion Actions
Create one action for each stage that changes campaign decisions. A B2B SaaS funnel might use:
- Qualified lead: The lead meets the agreed fit and intent criteria.
- Sales-accepted lead: Sales confirms that the lead deserves active follow-up.
- Closed won: The contract is signed and the opportunity has a final value.
Do not mark every shallow stage as a primary goal. Primary conversions feed bidding. Keep observation-only stages secondary until their definitions and import quality are stable.
2. Capture Match Data at Acquisition
Turn on Google Ads auto-tagging. On the landing page, retain the available gclid, gbraid, or wbraid and associate it with the lead or order. Preserve the value through redirects, form submissions, account creation, and CRM handoff.
For enhanced conversions for leads, collect the permitted email, phone, or address fields that will also exist when the CRM stage changes. Store the consent state with the record. Sending data from a server does not remove Google's customer data requirements.
3. Store Attribution with an Immutable Record ID
Add dedicated CRM fields for:
- Lead, account, application, or order ID
- GCLID, GBRAID, and WBRAID
- Landing timestamp and source
- Consent state and capture timestamp
- Normalized user fields required by the selected import method
- Each conversion stage and the time it occurred
Do not use an email address as the deduplication key. Emails can change, merge, or appear on several records. Use the source system's immutable event or record ID.
4. Choose the Import Method
Use one maintained route:
- Google Ads Data Manager with a direct data source
- A supported CRM or partner connector
- The Hardal Google Ads Offline Conversions integration
- A custom integration built against Google's current Data Manager or conversion upload documentation
Google changed its offline upload paths in 2026. Check the current offline conversion import FAQ before building or maintaining a custom API uploader.
5. Map the Offline Conversion Fields
| Field group | Send |
|---|---|
| Conversion | Conversion action, original conversion time with timezone |
| Click matching | GCLID, GBRAID, or WBRAID when available |
| User matching | Permitted and correctly processed email, phone, or address data |
| Value | Conversion value and ISO currency code when the action has a value |
| Deduplication | Stable order or transaction ID |
| Governance | Consent fields required by the selected method |
Send the time when the CRM outcome happened, not the time your batch job ran. Keep the same transaction ID when retrying a failed event. If a lead later becomes a different conversion, send the new action with its own event ID and timestamp.
Google's enhanced conversions for leads checklist covers current match keys, conversion actions, timestamps, and diagnostics.
Google Ads Conversions in a Pixel-Less Flow
A backend can report a conversion without firing a browser pixel at the moment the conversion occurs. Attribution still needs a link to the earlier ad interaction.
Consider a finance app:
- A person clicks a Google ad and starts an application.
- The application record stores the available click ID, permitted user-provided data, consent state, and a stable
application_id. - Underwriting approves the application two days later in the backend.
- The backend sends an
approved_applicationorconverted_leadaction with the original approval time andapplication_id. - A funded account can become a separate conversion action with its own timestamp and value.
No browser pixel needs to fire when underwriting changes the status. If the acquisition system never captured a click ID or permitted user identifier, the later server event may not match to the ad.
Server-side tagging can reduce delivery failures caused by browser script blocking because the event is processed through your endpoint. It cannot reconstruct an identifier that was never collected, and it should not route data after the user denied the required consent.
How to Test Offline Conversion Tracking
Test the website and CRM routes separately.
For the sGTM route:
- Use Preview mode in the web and server containers.
- Trigger one conversion with a known transaction ID.
- Confirm the GA4 client claims the request and the Google Ads tag fires once.
- Check the event name, action, value, currency, and consent state.
For the CRM route:
- Create a test lead with a known click ID or test match data.
- Move it to one offline stage.
- Inspect the connector or upload response, including row-level errors.
- Confirm that retries retain the same transaction ID and conversion time.
- Review Google Ads offline data diagnostics after processing.
Compare CRM records with Google Ads by conversion time. Upload time answers when the pipeline ran, not when the customer converted.
Common Google Ads Server-Side Tracking Errors
- Mixing online and offline fields: The sGTM tag uses a Conversion ID and Label. CRM imports use a conversion action, timestamp, match keys, and import credentials.
- Losing click IDs before the CRM: Redirects, cross-domain forms, and middleware can drop the query parameter before the lead record is created.
- Using the upload time: This shifts attribution and can put a conversion before its click or outside the accepted window.
- Retrying with a new ID: A new order ID can turn one business event into several conversions.
- Firing the same action twice: Browser and server tags can both report the same purchase unless one path is removed or the IDs deduplicate correctly.
- Sending every CRM stage as primary: Smart Bidding then optimizes for whichever stage is easiest to generate, not necessarily the stage closest to revenue.
- Treating sGTM as a consent bypass: The server must receive and enforce the user's recorded consent state.
- Expecting GA4 Data Import to update Google Ads: Use a Google Ads offline import or enhanced conversions for leads for CRM outcomes.
Hardal can host the sGTM runtime and route first-party conversion events to Google Ads. Follow the Hardal Google Ads server-side guide for real-time events. For CRM or backend outcomes, connect the Google Ads Offline Conversions destination.
References
- Google: Set up Google Ads conversions with server-side Tag Manager
- Google: Configure enhanced conversions for leads
- Google: Set up offline conversions using GCLID
- Google: Enhanced conversions for leads implementation checklist
- Google: Offline conversion import FAQ
- Hardal: Google Ads server-side setup