How to Send Offline Conversions Through Server Side GTM
One pipeline, every ad platform, no per tool integrations. Here is how offline events fit into a server container.

This post covers how offline conversions fit into a server side Google Tag Manager container, so one pipeline feeds every ad platform instead of building a separate integration per tool.
If you already run a server container for your website tracking, adding offline events to it is a much smaller job than starting from scratch.
When this fits
You already have a server side container, or you are about to build one.
You send conversions to three or more platforms.
You want consent, redaction and deduplication handled in one place.
It fits badly if you feed exactly one platform and have no container yet. In that case a scheduled sheet is far less work for the same result.
What you will build
Your CRM posts an event to your server container when a deal reaches a stage. The container enriches it, then fans it out to Google Ads, Meta, Microsoft Ads and anything else, each in that platform’s own format.
Add a fifth platform later and it is a new tag, not a new project: feeding every ad platform from one container.
How it works
Capture click IDs on your site and store them on the CRM record.
When a deal reaches a tracked stage, your CRM or automation tool posts a JSON payload to your container endpoint.
A client in the container receives it and turns it into an event.
Destination tags map that event to each platform’s fields.
Let’s implement it
Step 1: give the container a way in
Your server container needs an endpoint that accepts your offline payload. Most setups use a dedicated path with a shared secret in a header, so random traffic cannot inject fake conversions.
Do add that secret. A public endpoint that writes conversions into your ad accounts is not something to leave open.
Step 2: define one event shape
Design a single internal payload and stick to it:
A unique conversion ID for deduplication
Stage name and timestamp
Value and currency
Every click ID you captured
Hashed email and phone
Send everything once. Each destination tag picks what it needs. Adding a platform then means adding a tag rather than changing what your CRM sends.
Step 3: add destination tags
The Google Ads offline conversion tag takes a click ID, a conversion action, a time and a value. The Meta tag takes hashed identifiers and an action source. Map your internal fields to each.
Step 4: redact what should not travel
The container is the right place to strip anything that should not reach a given vendor, and to enforce consistent hashing so one platform never receives a raw email by mistake: stripping sensitive data before it leaves your server.
Step 5: monitor it
Server side failures are silent. An expired token will drop every conversion for weeks while returning success to your CRM.
Set up logging and an alert on error rates before you rely on this: monitoring a server side container.
The honest trade off
This is more setup than a spreadsheet and more setup than Make. What you get is one place where consent, hashing, redaction and deduplication are handled consistently for every platform.
If you are running one platform, that consistency is worth nothing. At four platforms it is worth a great deal.
Before you finish
Post a test payload and watch it in the container’s preview mode.
Confirm each destination received the right fields.
Confirm the shared secret rejects a request without it.
Send the same conversion ID twice and confirm it is not double counted.
Confirm monitoring alerts fire by deliberately breaking one tag.
FAQ
Do I need a server container just for offline conversions?
No. If this is your only use case, use a simpler method. The container earns its keep when it is also handling your web tracking.
Managed hosting or self hosted?
Depends on whether anyone will own the infrastructure in a year: Stape versus self hosted.
Does this bypass the 90 day window?
No. That is a Google Ads rule and no delivery method changes it.
What if I have no CRM to trigger from?
No CRM at all, and you want the simplest possible version? I wrote a full walkthrough of that for Stape using nothing but a spreadsheet: Google Ads offline conversion tracking without a CRM. Click to read it here.
Need this built properly?
Server side pays off on the fourth platform, not the first. I set up and repair tracking for ecommerce stores and lead generation businesses, so the numbers in your ad accounts match the money in your bank account.
Have a look at what I do, or book a call and we can go through your setup together.



















