Skip to content
MIGRATION

Migrate from Google Cloud / GTM Server to DataNostro

Self-hosting sGTM on GCP App Engine or Cloud Run? Switch to managed DataNostro and cut ~60 % off your monthly bill.

8 min Read Intermediate Updated 30.4.2026

Hosting sGTM on Google Cloud Run or App Engine? This guide walks you through migrating to DataNostro step by step. Done in an afternoon, zero data loss, full rollback plan.

TL;DR: lower TTL → create DataNostro tenant → import Container Config → parallel deploy → preview test → flip CNAME → 24 h monitoring → decommission GCP. 5–7 hours of actual work spread over 2 days.

Why move from GCP to DataNostro

  • Cost: Google Cloud Run for a typical sGTM workload (5M req/month) runs ~$110 USD/mo (vCPU + RAM + egress + Cloud Logging + ops overhead). DataNostro PRO plan 990 CZK/mo (~$42) — everything included, no egress shock.
  • Predictable invoice: Fixed CZK amount, ISDOC for Czech accounting, no monthly surprise from traffic spikes. GCP bills variably in USD without ISDOC.
  • EU-only data residency: Hetzner Falkenstein (Germany). No US-parent puzzle for corporate clients who need a DPA without US transfers. Google Cloud has EU regions but the parent is US.
  • Updates + monitoring included: When Google releases a new GTM Server image, we deploy it. You don't manage Node versions, IAM roles, Cloud Logging filters.
  • Native CZ integrations: Sklik retargeting + conversion, Heureka satisfaction tracking, Heureka XML feed proxy — native, no custom code.
  • Czech support: We respond during EU business hours, not via a $500/mo Google Premium Support contract.

When DataNostro is NOT for you

Being honest — there are cases where GCP makes more sense:

  • Multi-region failover — Cloud Run can auto-failover across regions. DataNostro runs in one EU location. Non-issue for 99% of EU shops, but global SaaS audiences may need it.
  • Custom autoscaling rules — we autoscale automatically; you can't say "hold 50 instances over Black Friday". Enterprise dedicated tier supports it on request.
  • BigQuery streaming export — GCP does direct BigQuery export with one click. We do REST API + daily CSV dump, custom integration on request.
  • VPC peering / Cloud Armor / IAP — enterprise security features we replace with Hetzner firewall + nginx rate-limiting + Cloudflare. Sufficient for most setups, may be insufficient for corporate compliance.

Pre-flight checklist (24–48 h ahead)

1. Lower DNS TTL to 5 minutes

Insurance for DNS cutover. Set TTL for your sGTM subdomain (e.g. sst.yourcompany.com) to 300 s at least 24h before cutover.

2. Inventory your GCP setup

Note your Project ID, Cloud Run service name, any static IP, Cloud Logging sinks, Cloud Build triggers — anything you'll need to decommission later.

3. Export Container Config from GCP

Cloud Run console → your sGTM service → Variables & Secrets → copy CONTAINER_CONFIG env var (Base64 string starting with aWQ9R1RNLVhYWFhYWFgm...).

Or via gcloud:

gcloud run services describe sgtm-service \
  --region=europe-west1 \
  --format='value(spec.template.spec.containers[0].env[?name=="CONTAINER_CONFIG"].value)'

Migration — 5 steps

Step 1: Create DataNostro account

Sign up at datanostro.com/signup. 14-day trial, no card required. Promo code GCP-MIGRATION-20 = 20% off for 3 months.

Step 2: Open Import sGTM in dashboard

Dashboard → Import sGTM → switch source to "Google Cloud". Paste Container Config Base64 + your current tracking domain. Click "Load preview". Confirm.

Step 3: Parallel deploy

Dashboard → Containers → "Deploy" the newly-created container. DataNostro provisions on our subdomain. SSL via Let's Encrypt automatically, ~2 min. GCP Cloud Run stays running — zero impact on live traffic.

Step 4: DNS cutover

Flip your tracking subdomain CNAME from GCP target to our subdomain. Propagation 5–15 min with pre-lowered TTL.

Rollback: if anything breaks, flip CNAME back. Same 5–15 min.

Step 5: Post-cutover validation

Test DNS resolve (dig), HTTPS endpoint (curl -I), GA4 DebugView, Meta Test Events, DataNostro Activity stream.

Decommission GCP (whenever ready)

Keep Cloud Run running 24–48 h as safety net. Then:

gcloud run services delete sgtm-service --region=europe-west1 --quiet
gcloud compute addresses delete sgtm-static-ip --region=europe-west1

Plus: delete Cloud Build triggers, logging sinks, dedicated service accounts. Monitor Cloud Billing for a few days to confirm the line items drop.

What's next

Did this article help you?
✓ Thank you for the feedback