What Does sGTM Solve, and When Is It Needed?
Server-Side Google Tag Manager (sGTM) moves tag management from the browser to the server side, giving site owners control over the data collection process. Safari’s ITP (Intelligent Tracking Prevention) and fingerprinting protections, together with the Consent Mode v2 requirement for EEA traffic, have weakened client-side tracking as a standalone approach. I cover the details of these changes and a comparison of different tracking approaches in the related post. sGTM is not necessary for every site; the threshold discussion is below, under “The Migration Threshold”.
This guide covers how to set up sGTM, available infrastructure options, and tag configuration for platforms like GA4, Google Ads, and Meta CAPI (Conversions API).
User browser
-> Client-side GTM (web container)
-> sGTM (server container)
-> GA4, Google Ads, Meta CAPI, TikTok, Klaviyo...
Request Flow and Architecture
Before picking where to run sGTM, understand how a single request moves through it. The model is straightforward on paper and subtle in practice: clients evaluate in priority order, the first one to claim a request transforms it into one or more events, and those events flow through triggers and tags just like in a web container3.
Browser / App / Backend
| (measurement request: GA4 /collect, MP, custom webhook)
v
Tagging Server (Cloud Run, Stape, Docker)
| 1. Clients ranked by priority, first match claims the request
| 2. Claiming client transforms the request into events
| 3. Triggers match events, fire tags
| 4. Tags forward payload to vendors (GA4, Ads, Meta CAPI, BigQuery)
v
Vendor endpoints
Three things this diagram makes explicit:
- Clients are adapters, not endpoints. A client reads the incoming HTTP request (any shape) and produces GTM events. Custom clients let you handle non-standard payloads like Shopify webhooks, CRM (Customer Relationship Management) events, or native app SDKs (Software Development Kits).
- Priority matters. When two clients can both claim a request, the higher-priority one wins. Overlapping clients (stock GA4 plus a custom GA4 variant) can cause misrouting that is hard to notice.
- One request can become many events. A GA4 batch payload produces N events; each event flows through triggers independently. Tag firing is per-event, not per-request.
A new server container ships with only the Google Analytics (GA4) client pre-installed; the Measurement Protocol client is added separately via Clients > New4. A client turns the incoming request into events, and a tag sends the event to the vendor. So Meta CAPI or TikTok Events API needs the relevant tag template, not a new client; a custom client is only written to handle a non-standard request format (a webhook, a CRM event).
Infrastructure Options
sGTM runs as a Docker container. Where it runs directly impacts cost, maintenance overhead, and 1st-party cookie capabilities.
Google Cloud Run (Default)
Google’s recommended approach5.
Setup steps:
- Create a new Server type container in GTM
- Select Automatic to connect your GCP project and choose a payment method
- Once the container is created, you receive the tagging server URL (Uniform Resource Locator)
- In the Google tag in your web container, enter this URL as the
server_container_urlparameter4
Features:
- Automatic scaling (Google recommends at least 2 instances for production; each instance should have at most 1 vCPU, as extra vCPUs are not used and affect autoscaling negatively56)
- Usage-based billing (request + CPU/memory)
- GCP ecosystem integration (BigQuery, Logging)
- Docker image:
gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable
Note: Cloud Run bills can increase unpredictably with traffic spikes. Cost monitoring and alert mechanisms should be set up.
Stape (Managed Hosting)
If you don’t want to manage your own infrastructure, managed hosting solutions like Stape greatly reduce setup and maintenance overhead7.
Setup steps:
- Create a Stape account
- Connect your sGTM container and configure DNS (Domain Name System)
- Starts working within minutes
Features:
- Fixed monthly pricing; plans are per site, and script loads (gtm.js, gtag.js) and preview requests also count toward the request quota8
- Automatic sGTM image updates
- Own CDN (Content Delivery Network): Routes sGTM traffic through the IP your site uses; according to Stape, this lets you set cookies that Safari does not shorten9
- Log and monitoring system (including anomaly notifications)
- Chrome extension for easy debugging
Docker Self-Hosted (Local Dev and Production)
Google publishes sGTM as an official Docker image (gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable) that runs anywhere Docker does, including localhost. This is the fastest way to iterate on client templates, test consent flows, or reproduce production bugs without touching GCP.
Simo Ahava published a docker-compose stack in December 2025 that boots a full tagging server plus preview server locally10:
# In a repo with docker-compose.yml and a populated .env file
docker-compose up -d
# Tagging server: https://localhost:8888
# Preview server: https://localhost:8889
The .env file needs two values:
CONTAINER_CONFIG, copied from GTM Admin, Container SettingsGA4_PROPERTY, your GA4 Measurement ID (e.g.,G-ABC123XYZ)
On macOS, Docker Desktop requires a paid license for companies above a certain
size. Colima is a free, open-source
alternative that uses Lima under the hood, exposes the standard Docker CLI,
and installs with brew install colima docker docker-compose. Because the
official sGTM image is published only as linux/amd64, Apple Silicon Macs
need emulation; in Colima, colima start --vm-type=vz --vz-rosetta enables it
on macOS 13 and later.
When localhost Docker is useful:
- Iterating on custom client templates without pushing previews
- Debugging webhooks from services that can’t reach a public staging URL
- Reproducing production bugs against a known-good container config
- Running integration tests in CI without spinning up Cloud Run
Known caveat: According to Simo, server_container_url strips the port from the host before the request is sent, so it cannot be used with the local stack (localhost:8888). The transport_url workaround keeps event dispatch working, but not all server-side features are available10.
For production self-hosting (Hetzner, bare-metal, any non-managed environment), the same image applies; DNS, TLS, autoscaling, log retention, and sGTM version upgrades stay with the team. Two containers minimum: one preview server and one or more tagging servers6. The preview server is not a backup for production; production redundancy requires more than one tagging server.
Other Alternatives
| Option | Compatible | Note |
|---|---|---|
| AWS ECS/Fargate | Yes | ECS Express Mode sets up the service, load balancer, and autoscaling automatically11. The API Gateway and Kinesis layer in AWS’s official guide is an analytics pipeline, not required for basic hosting12 |
| Azure Container Apps | Yes | The official image can run on Container Apps and App Service; ready-made setup scripts exist13 |
| Cloudflare Workers | No | sGTM is a Docker/Node.js application; Workers V8 isolate environment is incompatible. Can be used as a proxy |
| Cloudflare Containers | Undocumented | Can run linux/amd64 images, but instances stop when idle and may restart in a different location; there is no documented sGTM setup14 |
Cost Model Comparison
| Cloud Run | Stape | Docker Self-host | |
|---|---|---|---|
| Cost model | Usage-based (request+CPU) | Fixed monthly package | Server cost (fixed within capacity and traffic quota) |
| Scaling | Automatic, grows with traffic | Up to package limit | Manual |
| Setup difficulty | Medium | Low | High |
| Maintenance | Medium | Low (managed) | High |
| 1st-party cookies | Custom domain + IP alignment | Own CDN included | Manual configuration |
| sGTM updates | Manual redeploy | Automatic | Manual |
For a detailed comparison across maintenance capacity, data sovereignty, and traffic predictability axes, AWS and Azure options, plus agency multi-client architecture, see the sGTM Hosting Decision Matrix.
Custom Domain and 1st-Party Cookie Setup
Since Safari ITP 2.1 (2019), the lifetime of JavaScript-created cookies has been limited to 7 days. Server-set cookies (Set-Cookie header) are also capped at 7 days in two cases. The first is the IP check: the responding server’s IP is not in the same address family as the site’s IP, or their common prefix is shorter than half the address (16 bits for IPv4, 64 bits for IPv6)1516. The second is the CNAME check: the subdomain resolves via CNAME to a domain other than the site’s own17. A custom domain is therefore necessary but not sufficient on its own; details below, under “Safari ITP Doesn’t Fully Disappear”. For a detailed browser cookie behavior table, refer to the event tracking approaches post.
DNS Configuration
- Choose a subdomain for sGTM that has not been used before (e.g.,
ss.yourdomain.com) or a same-origin path (e.g.,yourdomain.com/metrics). Google’s custom domain guide covers both methods18. - The DNS record depends on the hosting: a load balancer or domain mapping on Cloud Run, a CNAME by default on Stape (A and AAAA if preferred)19, and A and AAAA records pointing to the server’s IP for self-host.
- For Safari, two conditions must hold together: the IP sGTM responds from must pass the IP check above, and the subdomain must not resolve via CNAME to a third-party domain. Ways to achieve this: a same-origin proxy, Stape’s Own CDN, or hosting on the same infrastructure as the site.
SSL Certificate
After DNS records are pointed, an SSL certificate must be created. Cloud Run provides automatic certificates. With Stape, this process is automatic. For self-host scenarios, Let’s Encrypt or an existing certificate must be configured.
Verification
Verify that the custom domain is working in GTM Preview mode. If the preview page opens without issues, DNS and SSL configuration is complete.
Tag Configuration
GA4
Google consolidated script serving in the Web Container Client. GA4 clients created after June 2025 have no gtag.js serving options; clients created earlier keep them so existing setups don’t break12. Creating a Web Container Client and setting server_container_url does not by itself change where the browser loads the script from; for that, the script URL has to point at sGTM.
Setup:
- In the server container, check that the GA4 client is active under the Clients section (it comes pre-installed4)
- Create a Web Container Client and allowlist the IDs for your loading path: Google tag IDs (
G-XXXXXX) for the gtag.js path, the web container ID (GTM-XXXXXXX) for the GTM path - Load the script through sGTM. There are two ways: point the gtag.js URL on the site at your sGTM domain (
https://ss.yourdomain.com/gtag/js?id=G-XXXXXX), or load the GTM web container through sGTM - If you chose the second way, enable “Automatically serve all dependent Google scripts”; Google scripts loaded by the web container then also come through sGTM. For hits to reach sGTM, the Google tags in the web container also need the
server_container_urlparameter1 - Create a GA4 tag under the Tags section
- Set the trigger to Client Name = GA4
In a direct gtag.js setup, the script URL points at sGTM, and the server_container_url parameter sends hits to sGTM4:
<script async src="https://ss.yourdomain.com/gtag/js?id=G-XXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-XXXXXX", {
server_container_url: "https://ss.yourdomain.com",
});
</script>
Google Ads
Remarketing
Create a Google Ads Remarketing tag in the server container and enter the Conversion ID from the Ads panel. Trigger: All Pages20.
Conversion Tracking
The relevant event (e.g., purchase) must be forwarded to the server container for conversion tracking. Create a GA4 Event tag for this event in client-side GTM, then configure the Google Ads Conversion Tracking tag in the server container21.
Enhanced Conversions
Enhanced Conversions hash customer data collected at the point of conversion (email, phone, name, address) with SHA-256 and match it against Google’s signed-in user database. This matching can improve the measurement of conversions where cookies are missing or the device changes22.
Server-side setup:
- Enable Enhanced Conversions in Google Ads from the settings of the relevant conversion
- Add a
user_dataobject to the GA4 tag in client-side GTM (email, phone, name, address) - Data flows to the sGTM container with the GA4 hit
- The Google Ads Conversion Tracking tag in sGTM reads
user_datafrom Event Data, hashes it, and sends it with the conversion
// Client-side dataLayer push example
dataLayer.push({
event: "purchase",
user_data: {
email: "customer@example.com",
phone_number: "+905001234567",
address: {
first_name: "Ali",
last_name: "Yılmaz",
country: "TR",
},
},
});
All PII (Personally Identifiable Information) data must be normalized before hashing: lowercase, whitespace trimming, E.164 format for phone numbers.
Meta Conversions API (CAPI)
Meta CAPI integration via sGTM sends conversion data server-to-server23.
Setup:
- In Meta Events Manager, use Partner Integrations > Google Tag Manager > “Set up with Google”
- Connect your GTM web and server containers
- Enter your tagging server URL and GA4 Measurement ID
- Meta automatically creates server-side tags
- Generate an access token from Events Manager > Settings > Conversions API
Alternatively, the Facebook Conversions API template from the GTM Community Template Gallery can be used.
Event Deduplication (Critical):
Browser Pixel and server CAPI events must send the same event_id and same event_name. Meta uses these two fields to match and deduplicate events. If deduplication is not properly configured, conversions will be double-counted and ad optimization is fed the wrong signal24.
Event Match Quality (EMQ):
Meta’s matching quality score on a 0-10 scale. According to TAGGRS, target minimum 6, ideally 8+. To optimize: send hashed email, phone, IP address, user agent, fbp cookie, fbc cookie, and external_id25.
Multi-Platform Distribution with Scout
While sGTM alone is sufficient for GA4, Google Ads, and Meta CAPI, management becomes complex when distributing data to multiple platforms like TikTok, Pinterest, and Klaviyo on e-commerce sites. At this point, Scout, developed under dnomia, takes events collected from sGTM or Zaraz, processes them in batches, enriches them with profile data, and distributes them to multiple destinations from a single point.
sGTM Container
-> Scout Collector (batch processing, enrichment, deduplication)
-> Meta CAPI, GA4 MP, Google Ads, Klaviyo, TikTok, Pinterest...
This approach provides a centralized distribution layer for e-commerce sites using multiple ad platforms, rather than creating individual sGTM tags.
Consent Mode v2 Server-Side Configuration
Since March 2024, Google has expected Consent Mode v2 signals for users in the EEA for measurement, ad personalization, and remarketing features26. In sGTM, consent signals are carried along with Google hits27.
How it works:
- The client-side CMP (Cookiebot, Usercentrics, etc.) sets all signals to
deniedon page load viagtag('consent', 'default', {...}) - The user interacts with the consent banner
- The CMP sends user preferences via
gtag('consent', 'update', {...}) - When events fire, consent status is added to the request payload in the
gcsandgcdparameters:gcscarries thead_storageandanalytics_storagestate, whilegcdcarries all four signals and how each signal was set28 - sGTM automatically receives these signals
Four consent signals:
| Signal | Controls |
|---|---|
ad_storage | Ad cookies (Google Ads, Floodlight) |
analytics_storage | Analytics cookies (GA4) |
ad_user_data | Sending user data to Google for ad purposes |
ad_personalization | Personalized advertising |
Google GA4 and Google Ads tags in sGTM natively understand consent signals. When consent is denied, Google can estimate part of the missing data through behavioral modeling, but this is not a guarantee that kicks in for every property.
Debugging
Preview Mode
The sGTM debug process follows a flow Seresa calls the “Two-Tab Dance”29:
- Click Preview in the server-side GTM container (debug tab opens)
- Enable Preview in the client-side GTM container as well
- Open your website in a third tab and perform actions
- Check incoming requests in the server-side preview tab
Common issues:
- Preview cookies blocked: Browser extensions, VPNs, or privacy settings may block preview cookies
- “No Client Claimed the Request”: No client template matched the incoming request format. Check client configuration
- Load balancer timeout: According to Google, the load balancer or CDN timeout must be longer than 20 seconds; a shorter timeout breaks preview mode6
- Unpublished changes: Outside Preview, the server container only runs the published version; an unpublished tag change never takes effect on real traffic
Debugging Non-Web Requests with X-Gtm-Server-Preview
Preview mode only catches requests the browser sends with the right cookies. For anything that cannot set cookies, webhooks from Shopify, Paddle, or your CRM, native mobile app events, server-to-server Measurement Protocol calls, the X-Gtm-Server-Preview HTTP header is the bridge30.
How to get the header value:
- Open sGTM Preview mode
- Top-right menu, Send requests manually
- Copy the
X-Gtm-Server-Previewvalue (a base64-encoded token shaped likeenv-XXX|...|...)
Using it from curl (common for debugging webhook payloads):
curl -X POST https://ss.yourdomain.com/mp/collect \
-H "X-Gtm-Server-Preview: ZW52LTI1NXx2RVNkYnBiSFdzTVRTZXB..." \
-H "Content-Type: application/json" \
-d '{"client_id":"test.1","events":[{"name":"purchase","params":{"value":49.9,"currency":"USD"}}]}'
From a backend fetch call (Node, integration tests):
await fetch(`${SGTM_URL}/events`, {
method: "POST",
headers: {
"X-Gtm-Server-Preview": process.env.SGTM_PREVIEW_HEADER,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
What to watch for:
- The token is session-scoped. Closing Preview, switching workspace, clearing cookies, or opening Preview in a different browser regenerates it.
- Never commit it to source or bake it into production clients. It is a dev-time debugging aid.
- For team-shared debug sessions, you may need to re-copy the token after someone else opens Preview.
- On mobile apps, inject the header only in debug builds. Shipping a preview-enabled binary to production will send real traffic into your debug tab.
This header is what makes sGTM debuggable end-to-end: not just the browser side, but every other system that feeds data into your tagging server.
Debug Tools
- Chrome Extension: “sGTM - add X-Gtm-Server-Preview Header” automatically adds the
X-Gtm-Server-Previewheader and_dbg=1parameter - Stape Debugger: User-friendly debug interface for non-technical users
- GTM Preview + console: Preview both client and server containers simultaneously to verify end-to-end data flow
The Limits of sGTM: A Reality Check
Plenty of content sells sGTM as the single infrastructure that solves everything. Bietolini’s 2026 comparison highlights three practical realities worth seeing before taking on the complexity and monthly bill16.
Ad-Blocker Bypass Doesn’t Work on Its Own
Even when server-side container traffic flows through a custom subdomain, ad-blocker lists pick up subdomain patterns, payload shape, and behavioral signals. DataUnlocker’s 2025 analysis, based on its own product data, shows that roughly 80% of widely used ad-blocker software still detects and blocks custom-domain sGTM traffic31. The real win is at the CAPI layer: Meta Conversions API, Google Ads Conversion API, and similar server-to-server integrations operate independently of blocker lists. My read is that reported conversion recovery numbers also come largely from that layer, not from moving sGTM to a subdomain.
Performance Claims Are Context-Dependent
Stape’s own-site benchmark shows a 39-point gap on mobile PageSpeed, 56 vs 9532. That is the best case: GA4, Facebook Pixel, HubSpot, Klaviyo and other heavy client-side tags all moved to the server side. Semetis’s controlled measurements with WebPageTest and PageSpeed Insights describe the outcome as “significant but not conclusive”: the gain depends on which tags are moved and how many there are33. On a site that only runs GA4, expect the difference to stay small, since GA4 is the only tag being moved.
Safari ITP Doesn’t Fully Disappear
Setting up a custom domain isn’t enough. Server-set cookies also drop to 7 days if the IP sGTM responds from fails the IP check described in the Custom Domain section above15. A default Cloud Run setup comes with its own IP range, so Safari cookies still cap at 7 days. According to Bietolini, proper IP alignment extends the window to 400 days; skipping that step means sGTM’s core Safari selling point doesn’t actually materialize1634. Bietolini’s suggestion: if Safari traffic in GA4 is below 15%, this gain alone isn’t a sufficient investment case.
The Migration Threshold
Combining the three constraints gives the practical threshold Bietolini suggests: sGTM complexity and cost make sense for sites spending above USD 5,000 a month on paid media where conversion-signal loss is a real budget line. Below that, a hybrid model that keeps client-side GTM and uses server-side only for conversion APIs (Meta CAPI, Google Ads Enhanced Conversions, TikTok Events API) is usually enough16. If the only goal is serving Google scripts first-party, Google tag gateway is an alternative that requires no server to manage35.
Data Sovereignty: Hosting Region Alone Is Not Enough
“We use an EU provider, so US laws don’t touch us” is a line you hear often during procurement. A server in the EU does not, on its own, settle which jurisdiction the company operating the infrastructure is subject to, or which sub-processors the data passes through. Hosting region, provider, and sub-processor chain have to be assessed together; the legal access risk also has to be addressed separately through the contracting legal entity, its jurisdiction, and the sub-processor chain.
Hosting the server in a given country also does not remove the data transfer to destinations such as Google and Meta; forwarding data to those platforms is sGTM’s job in the first place. From a KVKK perspective, data leaves Türkiye even when the server is in the EU; the decision matrix covers this side of the hosting choice separately.
Three Procurement Questions
When evaluating an sGTM provider, go beyond the KVKK/GDPR data processing agreement and ask:
- Who owns the legal entity operating the infrastructure? Not the registered office, but the shareholding and ultimate beneficial owner.
- In which jurisdictions is the hosting provider subject to disclosure orders?
- Is there a non-US deployment option, and can it be verified?
After Schrems II, a meaningful transfer impact assessment has to interrogate the full provider chain, not just the country of the server.
Conclusion
sGTM has become part of many measurement setups in 2026. In this new era where browser restrictions have weakened client-side tracking, the server-side approach is a strong option for data quality, privacy control, and platform integrations. Before committing, set the threshold correctly: by Bietolini’s threshold, for sites spending under USD 5,000 a month on paid media with Safari traffic below 15%, the maintenance burden of sGTM often costs more than a hybrid CAPI setup.
Infrastructure choice depends on your context:
- Full control and GCP experience: Cloud Run
- Quick setup and predictable costs: Stape
- Own server infrastructure: Docker self-host
- Server country defined in the contract: self-host in that country (the provider, the sub-processor chain, and the transfer to destinations are assessed separately)
Whichever path you choose, custom domain with IP alignment (for 1st-party cookies and Safari), Consent Mode v2 integration, event deduplication (especially for Meta CAPI), and due diligence on the provider chain are four critical steps that are expensive to skip.
If you hit a wall applying this to your own setup, or your situation raises a question this post does not cover, get in touch.
Get in TouchFootnotes
- How To Load Google Scripts From A Server Container. Simo Ahava ↩ ↩2 ↩3
- How sGTM loads Google JavaScript libraries ↩ ↩2
- An Introduction to Server-Side Tagging. Google for Developers ↩
- Send data to server-side Tag Manager. Google Tag Manager ↩ ↩2 ↩3 ↩4
- Cloud Run Setup Guide. Google Tag Manager ↩ ↩2
- Manual Setup Guide. Google Tag Manager ↩ ↩2 ↩3
- Stape sGTM Hosting Documentation ↩
- Pricing and plans. Stape ↩
- Own CDN. Stape ↩ ↩2
- Run Server-side Google Tag Manager On Localhost. Simo Ahava ↩ ↩2
- Amazon ECS Express Mode. AWS Documentation ↩
- Using Google Tag Manager for Server-Side Analytics on AWS ↩
- sGTM Deployment on Azure Container Apps. Selnekovic ↩
- Lifecycle of a Container. Cloudflare Containers Docs ↩
- Private Browsing 2.0. WebKit ↩ ↩2
- Server-side vs Client-side GTM: 2026 Reality Check. Paolo Bietolini ↩ ↩2 ↩3 ↩4
- Tracking Prevention in WebKit. WebKit ↩ ↩2
- Custom domain configuration. Google Tag Manager ↩
- Custom domain setup. Stape ↩
- Google Ads Remarketing. Google Tag Manager ↩
- Google Ads Conversions. Google Tag Manager ↩
- About Enhanced Conversions. Google Ads Help ↩
- Meta CAPI with Server-Side GTM ↩
- Event Deduplication for Meta Conversions ↩
- Event Match Quality Score ↩
- Updates to consent mode for traffic in European Economic Area (EEA). Google Ads Help ↩
- Implement Consent Mode with Server-Side Tag Manager ↩
- Consent Mode V2 For Google Tags. Simo Ahava ↩
- The Two-Tab Debugging Dance ↩
- Preview Requests In Server-side Google Tag Manager. Simo Ahava ↩
- Stop Thinking Server-Side GTM Protects You From Ad Blockers. DataUnlocker ↩
- Improving Website Page Speed With Server-Side Tracking. Stape ↩
- Does Server-Side Tagging Positively Impact Page Speed? Semetis ↩
- Safari ITP and Server-Side Tagging. Stape ↩
- Google Tag Gateway vs Server-Side GTM: Which One Do You Need? Paolo Bietolini ↩
- 01 Google consolidated script serving in the Web Container client: GA4 clients created after June 2025 have no gtag.js serving options; older GA4 clients keep them so existing setups don't break
- 02 Managed hosting solutions like Stape significantly reduce setup and maintenance overhead compared to Cloud Run
- 03 If event deduplication (event_id + event_name) is not properly configured in Meta CAPI integration, conversions will be double-counted
- 04 Enhanced Conversions send hashed customer data (email, phone) server-side, which can improve match rates and the measurement of conversions that happen across devices
- 05 A custom domain alone does not get past Safari ITP: for server-set cookies to stay outside the 7-day cap, the IP sGTM responds from has to be aligned with the site's IP (IP alignment), and the CNAME must not resolve to a third-party domain
- 06 Consent Mode v2 signals are carried on Google hits in the gcs and gcd parameters; server-side tags can fire based on consent status
- 07 sGTM does not bypass ad-blockers on its own: according to DataUnlocker's analysis, based on its own product data, roughly 80% of widely used ad-blocker software still detects custom-domain sGTM traffic. The real gain sits in Meta and Google's server-to-server Conversion API layer
- 08 Hosting region alone does not deliver data sovereignty: region, provider, and sub-processor chain have to be assessed together. Hosting the server in a given country does not remove the data transfer to destinations such as Google and Meta
+ Is sGTM free?
The sGTM software is free, but infrastructure is required to run it. Google Cloud Run bills based on usage. Managed hosting solutions like Stape offer fixed monthly pricing.
+ Should I choose Cloud Run or Stape?
Cloud Run offers full control and GCP ecosystem integration; with automatic provisioning the initial setup takes a few steps, but custom domain, scaling, and updates stay with the team. Stape completes setup in minutes, provides automatic updates, and its Own CDN feature simplifies 1st-party cookie management. Technical team capacity and the need for predictable costs are the deciding factors.
+ What is the difference between sGTM and Zaraz?
sGTM runs the GTM container server-side, offering full data control, CAPI integrations, and complex trigger logic. Zaraz runs on the Cloudflare edge with zero JS overhead and easy setup, but integration variety and trigger flexibility are limited.
+ Is a custom domain required?
Not technically required, but strongly recommended for Safari. Safari also caps server-set cookies at 7 days when the response that sets them comes from a third-party IP, or when the subdomain resolves via CNAME to a third-party domain. So a custom domain is necessary but not sufficient on its own; you also need an IP alignment method such as a same-origin proxy or Stape's Own CDN.
+ Can Meta CAPI be set up without sGTM?
Yes, it can be set up via Meta's own CAPI Gateway solution or direct API integration. However, sGTM reduces management overhead by distributing data to multiple platforms (Meta, Google, TikTok) from a single container.
+ How long does sGTM setup take?
Basic setup with Stape can be completed in about 30 minutes. With Cloud Run, a few hours depending on GCP experience. Full setup including custom domain, CAPI integrations, and Consent Mode configuration can take 1-2 days.
+ Does sGTM bypass ad-blockers?
Not by itself. DataUnlocker's 2025 analysis, based on its own product data, shows that roughly 80% of widely used ad-blocker software still detects and blocks custom-domain sGTM traffic. Ad-blockers now inspect request patterns, payload structure, and behavioral signals. The real gain comes from server-to-server integrations like Meta Conversions API and Google Ads Conversion API.
+ Is an EU-headquartered sGTM provider enough for GDPR compliance?
Not on its own. Hosting region, provider, and sub-processor chain have to be assessed together; the provider's country of incorporation or the region the server sits in is only part of that assessment. Hosting the server in a given country also does not stop sGTM from transferring data to destinations such as Google and Meta. From a KVKK perspective, data leaves Türkiye even when the server is in the EU.
+ Is sGTM necessary for every site?
No. The practical threshold Bietolini suggests is sites spending above USD 5,000 a month on paid media where conversion-signal loss is a real budget line. If Safari traffic is below 15%, the IP-alignment benefit alone is not sufficient justification. Below that threshold, a hybrid model that keeps client-side GTM and uses server-side only for conversion APIs is usually enough.