The GTM Server-Side container image is the same Docker image regardless of hosting platform: gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable. Migrating between platforms means redeploying the same container with the same environment variables and updating DNS records.
The right platform depends on three factors: existing cloud infrastructure, operational capacity, and traffic volume.
The Four Paths
Cloud Run (Default)
The native GTM hosting environment. Google’s automatic provisioning drops your container here, and for organizations on GCP, it’s the obvious starting point.
Cloud Run handles scaling, HTTPS, and container orchestration automatically. The GTM integration is native — Google maintains both the container image and the hosting documentation, so they stay in sync.
The catch: automatic provisioning creates a configuration that isn’t production-ready. Three specific changes are needed before you go live — see GTM Server-Side Cloud Run Deployment for the full treatment.
Best for: Organizations already on GCP, or organizations without a strong existing cloud platform preference.
AWS ECS Fargate
The right choice when your organization runs primarily on AWS and doesn’t want to maintain a separate GCP account for a tagging container.
The GTM image deploys on Fargate without modification. The infrastructure around it — VPC, Application Load Balancer, NAT Gateway — is more complex than Cloud Run’s defaults, and the infrastructure cost often exceeds Cloud Run’s total cost for small deployments. At scale with Savings Plans, the economics can favor AWS.
See GTM Server-Side Hosting on AWS for architecture and cost breakdown.
Best for: AWS-primary organizations processing high enough volume that Savings Plans discounts apply, or those with existing AWS infrastructure that absorbs the VPC/ALB/NAT costs.
Azure App Service
The smoothest setup experience among the three major cloud providers, according to GTM community practitioners. If your organization runs on Azure, App Service gets you to production with less infrastructure friction than Fargate requires.
Two App Service instances (tagging server + preview server) with Docker container configuration and Azure managed SSL. The S1 Standard tier at ~$69/month per instance is competitive with Cloud Run at comparable traffic.
See GTM Server-Side Hosting on Azure for deployment steps and tier guidance.
Best for: Azure-primary organizations that want a straightforward path to production without building GCP or extensive AWS infrastructure.
Managed Providers (Stape, Addingwell, TAGGRS)
Fully managed hosting where you configure GTM and point DNS — the provider handles everything else. No container orchestration, no cost optimization, no monitoring to build.
Stape’s Pro plan at $20/month is often cheaper than self-hosted Cloud Run for small-to-medium sites, and includes features (Cookie Keeper for Safari ITP, Custom Loader for ad blocker resistance, global CDN) that would require separate engineering effort to replicate.
See GTM Server-Side Managed Hosting Providers for a full provider comparison including Stape, Addingwell, TAGGRS, and Cloudflare Zaraz.
Best for: Teams without dedicated DevOps or cloud infrastructure expertise, organizations that need compliance certifications (SOC2, HIPAA, ISO 27001) without self-managing them, or anyone who wants to focus on tag configuration rather than container orchestration.
Decision Matrix
| Factor | Cloud Run | AWS Fargate | Azure App Service | Managed (Stape) |
|---|---|---|---|---|
| Setup complexity | Medium | High | Low-Medium | Very low |
| Monthly cost (medium traffic) | $90-$270 | $100-$300+ | $70-$200 | $20-$100 |
| Infrastructure control | Full | Full | Full | None |
| Multi-region | Load balancer required | Complex | Region pairs | Included |
| Monitoring | Build yourself | Build yourself | Build yourself | Included |
| GTM integration | Native | Manual | Manual | Native |
| EU data residency | Configure per-region | Configure per-region | Configure per-region | Provider-dependent |
Quick Decision Rules
Already on GCP? Cloud Run. Native integration, extensive documentation, simplest production path from automatic provisioning.
Already on AWS with significant infrastructure? ECS Fargate at scale. For smaller implementations, the NAT Gateway and ALB costs often make Cloud Run or a managed provider more economical despite AWS’s lower compute rates.
Already on Azure? App Service. Fastest path to production in the Azure ecosystem.
No cloud infrastructure expertise or dedicated DevOps? Start with Stape. The $20/month Pro plan covers most small-to-medium sites, and the included features would take weeks to build on your own.
Need EU data residency with compliance certifications? Stape (ISO 27001, SOC2, HIPAA) or TAGGRS (ISO 27001) cover this out of the box. Self-hosting achieves the same result but requires you to manage compliance documentation and IAM configuration yourself.
Cost at a Glance
Real-world data provides a sanity check on the estimates above. Measurelab has published cost data from production deployments:
- ~£30/month for a site processing ~7K events/month (Cloud Run)
£402/month ($500) for a site processing 200M events/month (Cloud Run)
The free tier on Cloud Run handles test and development traffic (under ~1K daily requests) at $0. Stape’s free tier handles up to 10K requests/month.
For a typical small business site running 10K-100K daily requests, the realistic range is $20-135/month depending on provider choice and configuration.
The Logging Cost Trap
Worth flagging regardless of which self-hosted path you choose: Cloud Run’s default request-level logging costs $0.50/GiB ingested. For a tagging server processing meaningful traffic, this generates $100-220/month in logging costs alone — sometimes more than compute.
If you self-host on Cloud Run, disabling request-level logging is the single highest-leverage cost change. See GTM Server-Side Hosting Costs: Self-Hosted vs Managed for the full breakdown.
Managed providers don’t expose this cost — it’s absorbed into their pricing and they handle it internally.