FREE · NO ACCOUNT REQUIRED

Free subdomain finder — Certificate Transparency + DNS brute-force with live status, HTTP, and TLS cert for every host.

Enter an apex domain. In one call we pull passive Certificate Transparency logs (crt.sh), run an active DNS brute-force against a curated top-200 wordlist, dedupe across sources, and enrich every hit with a live DNS resolve, HTTP HEAD, and TLS certificate peek. Dangling CNAMEs to abandoned S3, Heroku, Vercel, GitHub Pages, Azure Blob, Cloudfront and other cloud fingerprints are flagged as takeover-risk. No signup for ad-hoc scans, no rate limit, same backend as our API and MCP servers.

01 · WEDGE FEATURES

What you get beyond a passive crt.sh lookup

Certificate Transparency alone misses long-tail hosts that never issued a public cert. DNS brute-force alone misses hosts on non-standard prefixes. This tool combines both, verifies liveness per host, and cross-checks each CNAME against the same takeover-risk fingerprints security researchers use — so the list you get is the list you can act on.

Certificate Transparency + DNS brute-force in one call (Dual-source)

Passive CT logs catch every host that ever issued a publicly-trusted cert (Let's Encrypt, DigiCert, Sectigo, Google Trust). Active DNS brute-force catches every host on a common infra prefix (api, staging, admin, mail, mx1, ns2). Same wallclock budget, no data left on the table.

Per-host liveness enrichment (DNS + HTTP + TLS)

Every hit is resolved (A record + CNAME), HEAD'd over HTTPS with HTTP fallback, and TLS-peeked for issuer + expiry — all in parallel, all bounded by a hard 3-second timeout. Dead hosts sort last; live hosts show status, cert, and IPs inline.

Takeover-risk fingerprint match (15 cloud providers)

Every CNAME is checked against Amazon S3 / CloudFront, Heroku, Azure Blob + Websites, GitHub Pages, Cloudflare Pages, Netlify, Vercel, ReadTheDocs, Zendesk, HelpScout, Tumblr and more. Dangling targets (CNAME resolves nowhere) get flagged critical — the exact pattern Detectify and Project Discovery use.

Cross-source de-dup with first-seen dates (CT timestamp)

Every host row shows which source(s) surfaced it and the earliest date we've seen it — the CT log's `min_entry_timestamp` when available. Useful for spotting freshly-provisioned staging tiers and old zombie hosts.

Cached apex re-scans across workspaces (6h shared TTL)

Passive CT output is workspace-agnostic — it's a property of the apex, not the tenant. We cache it in a shared CachedResult row for 6h so a second scan of the same apex from anywhere returns instantly and doesn't hammer crt.sh.

Available via API, MCP, and Prism AI (Automation-first)

Every field is a JSON API call. The Prism AI agent (/chat) can enumerate a domain on request. MCP servers see the same data. Wire subdomain discovery into your SIEM, brand-monitoring cron, or bug-bounty workflow.

02 · SIGNAL BUCKETS

How we find subdomains

Two independent discovery pipelines run in parallel — each catches hosts the other misses. A third passive-DNS source (SecurityTrails / VirusTotal) is reserved for business-tier customers.

  • Certificate Transparency (crt.sh) Every publicly-trusted certificate issued since 2018 is logged in append-only Certificate Transparency logs. We query crt.sh for every cert whose SAN (Subject Alternative Name) matches `%.<apex>`, split multi-line SAN blocks, drop wildcards + email addresses, and dedupe by hostname. Passive — the target never sees the query.
  • DNS brute-force (top-200 wordlist) Curated wordlist covering web tiers (www, m, mobile, wap), infra (vpn, ssh, jump, bastion, gateway, proxy), mail (mx1, mx2, smtp1, imap, exchange), ops (grafana, prometheus, kibana, sentry, jenkins, gitlab), storage (s3, files, downloads), SaaS (crm, erp, hr, billing), and dev tiers (staging, uat, qa, sandbox, dev1). Ordered by hit-rate — the top-40 alone catch about 80% of real-world hosts.
  • Wildcard DNS detection Zones that answer every `*.<apex>` query would false-positive every brute-force prefix. We filter `*.` entries out of the CT source and treat brute-force hits as noise when apex resolves to something that also answers `wjxvcpqz.<apex>` (random-string canary). Zero-noise results by default.
  • Passive DNS (BIZ tier) SecurityTrails and VirusTotal expose historical DNS records — hostnames that resolved in the past but may not resolve today. Reserved for business plans; the free tier stays on CT + brute-force to keep the scan cheap.
03 · LIVENESS

What we check per host

Discovery gives you a list of hostnames. Liveness enrichment tells you which ones are real, what they're serving, and whether the cert is healthy — all inside the same scan, bounded by hard timeouts so a single slow host doesn't stall the report.

  • DNS resolve (A + CNAME) Each hostname is resolved via Node's stdlib resolver. A records surface the current IPs; a CNAME points at a delegated target. When both fail, the host is marked dead and sorted to the bottom of the report.
  • HTTP HEAD (HTTPS with HTTP fallback) One HEAD request per host. HTTPS first; falls back to plain HTTP on connection error. Records the scheme, response status code, and Server header. 2xx = green, 3xx = blue, 4xx = amber, 5xx = red — same colour system across the whole platform.
  • TLS certificate peek Live TLS handshake with SNI = hostname. Extracts issuer organisation, common name, and notAfter. Certs expiring in under 15 days are flagged critical, under 30 days warning, under 60 days informational. Full issuer surfaces on hover.
  • Takeover-risk CNAME cross-check When a CNAME matches a known cloud-provider fingerprint (Amazon S3 / CloudFront, Heroku, Azure Blob / Websites, GitHub Pages, Cloudflare Pages, Netlify, Vercel, ReadTheDocs, Zendesk, HelpScout, Tumblr) AND the target has no A record, the host is flagged as `takeover-risk`. Same signal that Detectify's subdomain-takeover scanner uses.
  • Hard 3-second timeouts, bounded concurrency Every network call is race'd against a 3-second timeout. Fan-out concurrency capped at 12 hosts at a time so we're friendly to shared DNS resolvers and don't trigger crt.sh's rate-limiter. Median scan on a mature domain completes in under 10 seconds.
04 · TAKEOVER RISK

How subdomain takeover happens

Subdomain takeover is the single most common cloud-native attack that doesn't require a vulnerability — just abandoned infrastructure. A CNAME points at a cloud service you no longer own, and an attacker claims the target. Detectify's research shows takeover is used in real credential harvest, cookie theft, and CSP bypass every week.

  • Abandoned S3 buckets You had `assets.example.com` CNAME'd to `example-assets.s3.amazonaws.com`. The bucket was deleted six months ago. The CNAME never was. An attacker registers a new S3 bucket with the same name, uploads their own HTML, and now `assets.example.com` serves attacker content on your domain — including your session cookies if the parent domain scopes them broadly.
  • Dead Heroku apps `support.example.com` CNAME'd to `example-support.herokudns.com`. The Heroku app was archived. Anyone can spin up a new Heroku app with that name and inherit the CNAME. Same pattern applies to Azure Websites, Vercel, Netlify, GitHub Pages, and any platform that lets you name-claim by convention.
  • Zendesk / HelpScout / Tumblr / SaaS knock-offs Support portals, help centres, and marketing pages routed through SaaS platforms are frequent takeover targets. The customer cancels the plan, the CNAME lingers, the attacker re-provisions on the same platform under the same name. Data exfiltration + phishing landing pages routinely follow.
  • Fresh CNAMEs to `.cloudfront.net`, `.pages.dev`, `.vercel-dns.com` Whenever a marketing team stands up a new landing page and takes it down without cleaning DNS, the target CNAME becomes a takeover candidate. Our engine's fingerprint match covers 15 major cloud services — the same set OWASP subdomain-takeover-playbook and Project Discovery's takeover-templates catch.
  • Why apex-only monitoring doesn't catch this The apex has its own CNAME (if any) and its own cert. A dangling CNAME on `blog.example.com` has zero effect on `example.com`'s health signals. That's why per-subdomain monitoring is required — you cannot infer subdomain security posture from apex signals alone.
05 · API

Use it programmatically

Every field on this page is available as JSON. Useful for attack-surface audits, brand-monitoring cron jobs, bug-bounty automation, SOC playbooks, M&A due-diligence, and asset-inventory pipelines.

JavaScript (fetch)
const res = await fetch(
  'https://api.domainscan.in/v1/security/subdomains?domain=' +
  encodeURIComponent('github.com') + '&sync=true'
);
const {data: report} = await res.json();

console.log(report.counts);            // { total: 42, alive: 31, dead: 11 }
console.log(report.subdomains[0]);     // { host, ips, cname, http, tls, alive, takeoverRisk, sources, firstSeen }
console.log(report.sources.ct.count);  // 38
console.log(report.sources.brute.count); // 7

// Filter takeover-risk hosts for triage
const risky = report.subdomains.filter(s => s.takeoverRisk);
for (const r of risky) console.log(`⚠ ${r.host} → ${r.cname}`);

// Filter alive hosts with soon-to-expire certs
const soonExpiring = report.subdomains
  .filter(s => s.alive && s.tls?.notAfter)
  .filter(s => (new Date(s.tls.notAfter) - Date.now()) / 86400000 < 30);
curl
# Fast JSON response with default free-tier limits (25 hosts, CT + brute).
curl -s 'https://api.domainscan.in/v1/security/subdomains?domain=github.com&sync=true' | jq '.data.counts'

# Only takeover-risk hosts
curl -s 'https://api.domainscan.in/v1/security/subdomains?domain=github.com&sync=true' \
  | jq '.data.subdomains[] | select(.takeoverRisk == true) | {host, cname}'

# Streaming SSE (progressive results as each host is enriched)
curl -N 'https://api.domainscan.in/v1/security/subdomains?domain=github.com&sync=false'
Response schema (abridged)
{
  "apex": "github.com",
  "scannedAt": "2026-09-03T…",
  "sources": {
    "ct":      { "count": 38, "ms": 2102 },
    "brute":   { "count": 7,  "ms": 360, "checked": 200 },
    "passive": { "count": 0,  "skipped": true }
  },
  "counts": { "total": 42, "alive": 31, "dead": 11 },
  "subdomains": [
    {
      "host": "api.github.com",
      "sources": ["ct", "brute"],
      "firstSeen": "2018-11-04T…",
      "ips": ["140.82.121.5"],
      "cname": null,
      "http": { "scheme": "https", "status": 200, "server": "…" },
      "tls":  { "issuer": "DigiCert", "notAfter": "2026-11-30T…", "subjectCN": "*.github.com" },
      "alive": true,
      "takeoverRisk": false,
      "lastSeenAlive": "2026-09-03T…"
    }
  ],
  "tier": "free",
  "tierProfile": { "sources": ["ct", "brute"], "bruteLimit": 25, "limit": 25, "liveness": true },
  "elapsedMs": 5843,
  "cached": false
}
06 · QUESTIONS

Common questions

  • What is a subdomain? A subdomain is any hostname to the left of the registrable domain — `api.example.com`, `mail.example.com`, `admin.staging.example.com`. Each subdomain has its own DNS record, can point to a different server, can carry a different SSL certificate, and can be on a different IP-based blacklist than the apex. Auditing the apex alone can miss subdomain-scoped issues entirely.
  • How do you find subdomains? Two ways in parallel. Passive: Certificate Transparency logs (crt.sh) catch every host that ever issued a publicly-trusted certificate — Let's Encrypt, DigiCert, Sectigo, Google Trust. Active: DNS brute-force against a curated top-200 wordlist catches every host on a common infra prefix that never got a public cert. Results are deduped, cross-tagged with source, and enriched with liveness data.
  • Is Certificate Transparency legal / ethical to query? Yes. CT logs are public infrastructure mandated by browsers to keep the WebPKI honest. Google Chrome refuses to trust any cert not published to at least two logs. Querying crt.sh is the standard way to inspect that public data — no consent needed, no different from reading DNS. Every major bug-bounty program, security scanner, and asset-management tool uses CT.
  • What is subdomain takeover? A CNAME on your domain points at a cloud service (S3 bucket, Heroku app, Azure Blob, GitHub Pages) that you no longer own. Anyone who can register that same target on the cloud platform inherits your subdomain. Attackers use it for phishing landing pages that appear to come from your brand, credential harvesting on session-cookie-scoped subdomains, and CSP-bypass attacks against your main app.
  • How do you detect takeover risk? We match every CNAME against 15 cloud-provider fingerprints (Amazon S3 / CloudFront, Heroku, Azure Blob / Websites, GitHub Pages, Cloudflare Pages, Netlify, Vercel, ReadTheDocs, Zendesk, HelpScout, Tumblr). When the fingerprint matches AND the target hostname has no A record, we mark the subdomain `takeover-risk` — the exact signal Detectify's subdomain-takeover scanner and Project Discovery's `subdover` templates use.
  • Does the tool visit / render the URL? No. Each host gets a single HTTP HEAD (not GET) request and a TLS handshake. No JavaScript is executed, no browser is rendered, no page content is downloaded. Bandwidth footprint per host is a few KB at most.
  • Why do I see hosts marked `dead`? Dead = DNS resolved historically (surfaced by CT logs) but no longer resolves today, OR resolves to an IP that isn't answering HTTP or TLS. Dead hosts are useful signal — they often correspond to abandoned staging tiers, mothballed apps, and past infrastructure that may still be referenced in code, docs, or partner integrations.
  • How is this different from Sublist3r, Subfinder, or Amass? Sublist3r / Subfinder / Amass are excellent CLI tools. They focus on maximum discovery depth (many sources, huge wordlists) at the cost of runtime and setup. This tool is a hosted service tuned for interactive use — fast (median under 10s), liveness-enriched per host, takeover-risk flagged inline, cached at the CT layer, and available via API + MCP for automation. Use both — CLI for depth, this for speed + live triage.
  • Does this replace penetration testing? No. Subdomain enumeration is one signal in an attack-surface audit. A pentest also covers vulnerability scanning, authentication testing, business-logic flaws, and much more. This tool gives you the map — the pentest tests the buildings.
  • How often should I re-scan? Ad-hoc scans are useful for spot checks. Ongoing monitoring is more valuable — new subdomains appear whenever engineers spin up staging tiers, marketing teams launch landing pages, or SaaS integrations provision CNAMEs. The DomainScan platform re-scans every tracked apex daily and alerts on new subdomains via the `NEW_SUBDOMAIN` event.