Skip to content
Control Plane Labs

Certificate Transparency Lookup

Every certificate ever logged for a domain, with a subdomain discovery view that dedupes SANs into a copyable hostname list and a CSV export.

Privacy: The domain you type goes to /api/ct-lookup on this site, which queries CertIndex's index of the public Certificate Transparency logs. The edge function sees the domain and your IP address for rate limiting, and CertIndex sees the domain and the edge function's address. Nothing else about the query is sent or stored. Note that the data itself is public: anyone can run the same search.

Enter a domain to list every certificate published for it in the public Certificate Transparency logs, including ones that have already expired.

Queries go to /api/ct-lookup, limited to 30 an hour, which reads the public Certificate Transparency logs through CertIndex. Only the domain you type is sent.

What it does

Type a domain and get back the certificates that have been published for it in the public Certificate Transparency logs: common name, issuer, the validity window with days remaining or days since expiry, the subject alternative names on each one, and a link to the log entry where available. Expired certificates are included by default, because the interesting question is usually historical.

The second view is the one most people come for. It takes every name from every certificate in the result — common names and SANs alike — folds them into a deduplicated list sorted by domain suffix so siblings group together, and gives you a single button to copy the lot. Wildcards are kept and labelled rather than silently expanded. There is a CSV export for the certificate table when you need the issuance dates in a spreadsheet.

How it works

The query runs at /api/ct-lookup, an edge function that forwards the domain to CertIndex and applies a limit of thirty lookups an hour. The tool never talks to a log directly; it reads an index built over them, which is the difference between a search that returns in a second and one that would require downloading a log’s entire Merkle tree.

The underlying data comes from the ecosystem defined in RFC 6962. A certificate authority submits each certificate to append-only logs before issuing it, and receives signed certificate timestamps that get embedded in the certificate itself. Chrome will not trust a publicly issued certificate that lacks them. The consequence is that essentially every certificate from a public CA since 2018 is in the logs, and because the logs are append-only, nothing is ever removed. A hostname that appeared in a certificate in 2019 is still there.

That property is what makes the tool useful and also what limits it. The logs record issuance, not reality.

What the logs cannot tell you

Three gaps are worth holding in your head before you act on a result.

A name in the list may not resolve. Certificates outlive the hosts they were issued for, and a staging environment torn down two years ago leaves a permanent record. Resolve each name before treating it as live — the DNS lookup tool next door is the quickest way to do that in bulk.

A host may exist and be entirely absent. Wildcards are the main reason: a certificate for *.example.com covers every subdomain without naming any of them, so an organisation that standardised on wildcards has almost nothing to enumerate. Private certificate authorities are the other reason. An internal PKI or a service mesh issuing its own certificates never touches the public logs, which is exactly why those things exist.

Duplicate-looking entries are usually not duplicates. Automated renewal produces a fresh certificate every month or two, and most CAs log a pre-certificate alongside the final one, so a single name under ACME can accumulate dozens of entries a year. Sort by issuance date and read the pattern rather than the count.

When to reach for it

The defensive use is the one to make routine. Search your own domains on a schedule and read the issuer column: a certificate for your name from a CA you do not use is either shadow IT or something worse, and CT is the only place it will show up without your involvement. Adding a CAA record — see RFC 8659 — turns that detection into prevention for the next attempt.

It is also the fastest inventory you can build during an incident or a migration. Before you decommission a load balancer, the hostname list tells you which names were ever pointed at it. Before an audit, the certificate table tells you which issuers you actually depend on, which is frequently not the list in the runbook.

Frequently asked questions

Is a hostname in this list guaranteed to exist?+
No. A certificate proves a name was requested and validated at issuance, not that it resolves now or ever served traffic. Staging hosts that were decommissioned years ago stay in the logs permanently, because CT logs are append-only. Resolve each name before you act on it.
Some subdomains I know about are missing.+
Two common reasons. A wildcard certificate for *.example.com covers internal.example.com without ever naming it, so the host is invisible in CT. And a host behind a private CA — an internal service mesh, a corporate PKI — was never logged at all, because only publicly trusted issuance goes to the public logs.
Why do I see several near-identical certificates issued days apart?+
That is normal renewal, usually automated. ACME clients renew well before expiry, so a 90-day certificate produces a new log entry every month or two. Pre-certificates also appear alongside the final certificate for the same name, which roughly doubles the entries you see for some issuers.
Can I use this to find someone else's infrastructure?+
The data is public by design and the same search runs against crt.sh or any log's own API, so treating it as secret is the wrong model. The defensive use is the one worth building a habit around: run it against your own domains periodically, and treat an unfamiliar name or an unexpected issuer as something to explain rather than ignore.
How current is the index?+
Logs accept a certificate and commit to publishing it within a maximum merge delay, which is typically 24 hours, and any index built on top of them adds its own polling interval. A certificate issued in the last few minutes may not be here yet. If you are verifying that a renewal happened, check the live certificate rather than the log.

→ Read the full guide:How this tool actually works

Data from Certificate Transparency logs via CertIndex.