How to Detect if a Website Uses Google Cloud (API Guide 2026)

June 9, 2026 · 11 min read

Google Cloud Platform powers a huge slice of modern infrastructure, from indie Cloud Run deployments to multi-region App Engine apps and global HTTPS load balancers fronting enterprise traffic. But unlike a CMS or a JavaScript framework, GCP rarely advertises itself in the HTML — there’s no “Powered by Google Cloud” badge in the footer. Detection has to lean on infrastructure signals: DNS records, TLS certificate issuers, and HTTP response patterns.

Whether you’re building a prospect list of sites already on GCP, auditing a vendor’s hosting footprint, or mapping a competitor’s migration from AWS to Google Cloud, the techniques below give you reliable identification — manually for a handful of domains, and at scale through the DetectZeStack API.

Why Detect Google Cloud Hosting on a Website

Knowing a site runs on Google Cloud is a strong technographic signal. It tells you something about how the team builds (containers and managed services are easier on GCP than bare VMs), what their budget shape looks like (Cloud Run and App Engine scale to zero, while load-balanced multi-region App Engine deployments don’t), and what adjacent products they likely use (BigQuery, Pub/Sub, Firestore, Cloud DNS).

For sales teams, that maps directly to qualification: if you sell a product that integrates with Cloud Run, BigQuery, or Workload Identity Federation, knowing the prospect already runs GCP shortens the demo. For security and compliance teams, confirming a vendor’s actual hosting provider is part of routine vendor due diligence — data residency claims need to be checkable from the outside. For competitive intelligence, watching a competitor’s DNS records flip from *.cloudfront.net to *.run.app is a much earlier signal of a migration than waiting for them to announce it.

And for migration audits, comparing the “before” and “after” technology footprint of a portfolio — especially during an M&A integration — is faster when the detection is automated. See M&A due diligence with tech detection for the full workflow.

Signals That Reveal Google Cloud Usage

Google Cloud leaves fingerprints at three layers: DNS records (CNAMEs and authoritative nameservers), TLS certificates (the issuer organization), and HTTP responses (server headers and proxy hints). Each layer is independent, and a site can show signals in one layer without the others — which is why combining them produces the highest-confidence detection.

DNS and Nameserver Patterns

DNS is the most reliable layer because CNAME records are public, always available, and cannot be hidden without changing providers. When a team deploys to Cloud Run or App Engine, they create a CNAME pointing their custom domain at the Google Cloud endpoint. The CNAME target is a giveaway:

$ dig api.example.com CNAME +short
ghs.googlehosted.com.

$ dig app.example.com CNAME +short
example-app-uc.a.run.app.

DetectZeStack matches the following Google Cloud DNS suffixes during every scan:

SuffixGoogle Cloud ProductCategory
*.run.appGoogle Cloud RunPaaS, Serverless
*.appspot.comGoogle App EnginePaaS
*.cloudfunctions.netGoogle Cloud FunctionsServerless
*.storage.googleapis.comGoogle Cloud StorageCloud hosting
*.ghs.googlehosted.comGoogle Hosted ServicesCloud, Hosting

The ghs.googlehosted.com target deserves a separate note: it’s the historical entry point for any domain pointed at a Google-managed surface, including App Engine custom domains, Google Sites, and Workspace-hosted pages. Seeing it does not always mean a custom application is running on GCP — sometimes it means the domain points to a Sites or Workspace page. The follow-up signal is usually the TLS certificate.

Authoritative nameservers tell a different story. If dig NS returns nameservers ending in .google.com or .googledomains.com, the domain’s DNS is hosted on Google Cloud DNS:

$ dig example.com NS +short
ns-cloud-a1.googledomains.com.
ns-cloud-a2.googledomains.com.
ns-cloud-a3.googledomains.com.
ns-cloud-a4.googledomains.com.

Cloud DNS as the authoritative provider is independent from the question of where the actual web application runs — a site can use Cloud DNS while hosting on AWS, or vice versa — but combined with other signals, it’s a useful confirming data point. For the broader DNS-detection methodology, see DNS-based technology detection.

TLS Certificate Issuer and SAN Clues

When a site terminates HTTPS on Google Cloud Load Balancing, Cloud Run, App Engine, or a managed certificate via Certificate Manager, the TLS certificate is issued by Google Trust Services. You can read the issuer with openssl:

$ echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -issuer -subject
issuer=C=US, O=Google Trust Services, CN=WE1
subject=CN=example.com

DetectZeStack inspects the issuer organization during every scan. When it contains “Google Trust Services,” the API reports Google Cloud in the technologies array with a category of Cloud hosting. The confidence on a TLS-only signal is intentionally lower than a DNS match, because Google Trust Services certificates can also appear on non-GCP edges in rare configurations — but in practice, the combination of a Google Trust Services certificate and a custom domain serving live traffic is a strong indicator of Google Cloud as the TLS termination point.

Why TLS detection matters: the TLS handshake happens before any HTTP request, so the certificate is observable even on sites that block scrapers, return CAPTCHAs, or rate-limit unauthenticated requests. Combined with DNS, it gives you a workable detection path for even the most locked-down origins. See DNS + TLS detection vs browser extensions for why this matters at scale.

HTTP Response Headers

HTTP headers are the least reliable Google Cloud signal because they are easy to strip or override at the application layer, but two patterns occasionally surface:

You can grep for them with curl -I:

$ curl -sI https://example.com | grep -iE "server|via"
Server: Google Frontend
Via: 1.1 google

In practice these headers are absent on most well-configured production sites because the application reverse-proxy (Nginx, a CDN, or a service mesh) strips them. Treat them as a corroborating signal when present, not a primary one. The DNS and TLS layers do the heavy lifting.

Manual Detection vs API-Based Detection

For one or two domains, running dig, openssl, and curl by hand is fine. The whole flow takes about a minute per domain and produces an unambiguous answer. For a hundred or a thousand domains — a prospect list, a portfolio audit, a continuous monitoring sweep — manual checks fall apart fast. You need an API that combines all three layers in one call, returns structured JSON, and handles the edge cases (CNAME chains, multi-region anycast, partial scans on blocked origins) without per-domain glue code.

That’s what the DetectZeStack /analyze endpoint does: it resolves the CNAME chain, fetches the page, inspects the TLS certificate, and matches the combined signals against a signature set covering 7,500+ technologies including every Google Cloud product listed above. One HTTP request in, structured JSON out.

Detect Google Cloud with the DetectZeStack API

The fastest way to see the API in action is the public /demo endpoint. It requires no API key, is rate-limited to 20 requests per hour per IP, and returns the same JSON shape as the authenticated /analyze endpoint.

Live curl Example Against /analyze

Run this against any domain you suspect is on Google Cloud:

$ curl -s "https://detectzestack.com/demo?url=cloud.google.com" | jq '.'
{
  "url": "https://cloud.google.com",
  "domain": "cloud.google.com",
  "technologies": [
    {
      "name": "Google Cloud",
      "categories": ["Cloud hosting"],
      "confidence": 70,
      "description": "Google Cloud Platform — TLS terminated by Google Trust Services.",
      "website": "https://cloud.google.com",
      "icon": "Google Cloud.svg",
      "source": "tls",
      "version": "",
      "cpe": ""
    },
    {
      "name": "HSTS",
      "categories": ["Security"],
      "confidence": 100,
      "source": "header"
    }
  ],
  "categories": {
    "Cloud hosting": ["Google Cloud"],
    "Security": ["HSTS"]
  },
  "meta": {
    "status_code": 200,
    "tech_count": 12,
    "scan_depth": "full"
  },
  "cached": false,
  "response_ms": 612
}

For production usage with higher rate limits and per-plan quotas, use the authenticated endpoint through RapidAPI:

$ curl -s "https://detectzestack.p.rapidapi.com/analyze?url=example-app.run.app" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: detectzestack.p.rapidapi.com" | jq '.technologies[] | select(.name | startswith("Google"))'
{
  "name": "Google Cloud Run",
  "categories": ["PaaS", "Serverless"],
  "confidence": 80,
  "source": "dns"
}
{
  "name": "Google Cloud",
  "categories": ["Cloud hosting"],
  "confidence": 70,
  "source": "tls"
}

Parsing the Response for GCP Products

Every detected technology appears as its own entry in the technologies array. The two fields that matter for filtering are name and source. The source field tells you which detection layer fired:

For a single boolean “is this site on GCP?” check, look for any technology entry whose name starts with Google and whose categories include PaaS, Serverless, or Cloud hosting. The full JSON response also includes a top-level categories object that groups technologies by function — useful when you want to count by category without iterating the array yourself.

The full response shape, including all top-level fields like cached, response_ms, and the meta block with status_code, tech_count, and scan_depth, is documented in detect any website’s tech stack with a single API call.

Batch Scanning a List of Domains for GCP Usage

For prospect lists, market sweeps, or audit projects, the /analyze/batch endpoint accepts up to 10 URLs per request. The response is keyed by URL so you can join it directly back onto your input list:

$ curl -s -X POST "https://detectzestack.p.rapidapi.com/analyze/batch" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: detectzestack.p.rapidapi.com" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["spotify.com", "snapchat.com", "shopify.com"]}' | jq '.'

For larger lists, loop the batch endpoint with a small concurrency pool. The free RapidAPI tier covers 100 requests per month, the $9 Basic plan gives 1,000, and the $29 Pro plan gives 10,000 — enough to scan a sizable prospect database in one pass. The worker-pool pattern, with backoff and CSV export, is covered in detail in batch-scanning 1,000 websites for tech stack.

A minimal Python script that filters a domain list down to only Google Cloud customers:

import requests
import csv

API_URL = "https://detectzestack.p.rapidapi.com/analyze"
HEADERS = {
    "X-RapidAPI-Key": "YOUR_KEY",
    "X-RapidAPI-Host": "detectzestack.p.rapidapi.com",
}

GCP_NAMES = {
    "Google Cloud", "Google Cloud Run", "Google App Engine",
    "Google Cloud Functions", "Google Cloud Storage",
    "Google Hosted Services", "Google Cloud DNS",
}

domains = ["spotify.com", "snapchat.com", "shopify.com", "twitch.tv"]

with open("gcp_audit.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["domain", "gcp_products", "max_confidence"])
    for domain in domains:
        r = requests.get(API_URL, headers=HEADERS, params={"url": domain})
        data = r.json()
        gcp = [t for t in data.get("technologies", []) if t["name"] in GCP_NAMES]
        if gcp:
            names = ", ".join(t["name"] for t in gcp)
            conf = max(t["confidence"] for t in gcp)
            w.writerow([domain, names, conf])
            print(f"{domain}: {names} ({conf}%)")
        else:
            print(f"{domain}: no Google Cloud detected")

This script is the building block for a full lead-enrichment pipeline. The companion guide — lead enrichment pipeline with tech detection — shows how to feed the output into a CRM or warehouse.

Common Pitfalls (Cloudflare Proxy, Multi-CDN, Anycast)

Three patterns regularly trip up naive detection. Knowing them up front saves debugging.

Cloudflare or another CDN in front of GCP. If the origin sits behind Cloudflare, the DNS layer will show Cloudflare, not Google Cloud. The TLS certificate observed at the edge will be Cloudflare’s, not Google Trust Services’. From the outside, the site looks like a Cloudflare property, and the origin’s actual provider is hidden by design. This is the correct behavior of a CDN, not a bug in detection. The only reliable signal in this configuration is leaked HTTP headers from the origin (rare) or knowledge of the company’s public infrastructure. For the broader CDN/origin separation question, see how to detect the CDN and hosting provider of any website.

Multi-CDN and split routing. Some teams run multi-CDN setups where different regions or subdomains resolve to different providers. A single /analyze call sees only one resolution of the target hostname; a different resolver or geographic location might see a different CNAME chain. For sites that exhibit this pattern, scan a few representative subdomains (www, api, static, cdn) rather than relying on the apex result alone.

Anycast and shared IP space. Google Cloud Load Balancing uses anycast IPs that don’t resolve cleanly back to a single product. The DNS CNAME chain is still definitive (the customer’s domain CNAMEs to a Google-managed endpoint), but reverse-IP lookups will not reliably identify GCP. Avoid building detection logic on PTR records or IP-range tables for Google Cloud — rely on the DNS suffix patterns and TLS issuer instead.

Use Cases: Sales Prospecting, Competitive Intel, Migration Audits

Once detection is reliable, the same machinery powers several distinct workflows:

Sales prospecting. A vendor selling a BigQuery integration, a Cloud Run-targeted observability tool, or a Firestore-compatible database can build a prospect list of sites already on GCP in a few hundred API calls. The qualification step is built into the data: a site that runs *.run.app needs no convincing that Cloud Run exists. See find companies using Stripe for the equivalent prospecting workflow targeted at payments.

Competitive intelligence. Monitoring a competitor’s infrastructure footprint over time — via the tech change tracking API — lets you spot migrations as they happen. A competitor moving from *.cloudfront.net to *.run.app is almost always a deliberate platform shift worth understanding.

Migration and compliance audits. When a regulated organization claims data residency on Google Cloud in a specific region, the outside-observable signals (CNAME target, TLS issuer) can corroborate or contradict that claim. Combined with AWS hosting detection, a portfolio-level audit can confirm where each vendor actually serves traffic from — a much faster check than relying on questionnaires.

Get Started Free on RapidAPI

The fastest way to confirm the response shape against your own targets is the /demo endpoint — no signup, 20 requests per hour, returns the full JSON. When you’re ready to scale, the free RapidAPI tier covers 100 requests per month with no credit card.

Get Your Free API Key

100 requests per month, no credit card required. Detect Google Cloud, AWS, Azure, and 7,500+ other technologies in a single API call.

Get Your Free API Key

Conclusion

Google Cloud leaves identifiable fingerprints at three layers: DNS CNAME suffixes (the most reliable), TLS certificates issued by Google Trust Services, and occasional HTTP response headers. For one-off checks, dig and openssl are enough. For prospect lists, portfolio audits, or continuous monitoring, the DetectZeStack /analyze endpoint combines all three layers into a single request and returns structured JSON that drops directly into a CSV, a database, or a CRM. The detection itself is the easy part — what you do with the resulting technographic data is where the value compounds.

Related Reading

Get API updates and tech detection tips

Join the mailing list. No spam, unsubscribe anytime.