Bulk SSL Certificate Checker — Expiry, Issuer & TLS Audit avatar

Bulk SSL Certificate Checker — Expiry, Issuer & TLS Audit

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Bulk SSL Certificate Checker — Expiry, Issuer & TLS Audit

Bulk SSL Certificate Checker — Expiry, Issuer & TLS Audit

Check SSL/TLS certificates for thousands of domains at once — expiry date, issuer, SANs, days remaining, TLS versions supported and chain validation. No API key. Export to CSV or JSON. Ideal for security audits, certificate monitoring and compliance.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bulk SSL Certificate Checker 🔐 — Expiry, Issuer & TLS Audit

Check SSL/TLS certificates for thousands of domains in a single run. This bulk SSL checker connects to every domain on port 443, grabs the full certificate chain, and returns a detailed row with expiry date, issuer, SANs, days remaining, TLS version, key algorithm, chain validation and more — all from a simple list of domains. No API key, no external service, no rate limits — pure TLS handshake inspection.

Paste a list of domains and the actor resolves them in parallel, producing thousands of rows you can filter, sort and export to CSV, Excel or JSON. Find expired certs, flag expiring-soon certs, audit TLS versions, and identify self-signed and weak-key certificates at scale.

Looking for an SSL certificate checker, a bulk TLS audit tool, a certificate expiry monitor, or a free SSL checker API without a key? This actor does it all in one parallel run.


✨ Key features

  • 🔐 Bulk SSL inspection — check certificates for thousands of domains in a single run, in parallel.
  • 📅 Expiry trackingvalidTo, daysRemaining, expired and expiringSoon (<30 days) fields for every domain.
  • 🏢 Full issuer info — issuer organization (O), common name (CN), and whether the cert is self-signed.
  • 🧩 SAN extraction — every Subject Alternative Name (DNS) is extracted and listed, with a count.
  • 🔑 Key details — signature algorithm, public key algorithm (RSA / EC), and key size in bits.
  • 🔗 Chain validation — TLS authorized status (chain validity), chain length, and authorization error message.
  • 📡 TLS version probing — the negotiated TLS version plus a scan of which TLS versions the server accepts (TLSv1, 1.1, 1.2, 1.3).
  • High concurrency — configurable parallel connections (default 10, up to 100).
  • 🛡️ No API key — pure TLS socket inspection using Node.js tls module; no external SaaS calls.
  • 🧹 Robust input parsing — schemes, paths, ports and trailing dots stripped automatically; duplicates removed.

💡 Use cases

  • Certificate expiry monitoring — run weekly on your domain portfolio and flag anything expiring within 30 days before outages happen.
  • Security & compliance audits — inventory TLS versions across infrastructure; flag self-signed, weak-key (RSA <2048), and deprecated-TLS hosts for remediation.
  • M&A / due diligence — assess the SSL/TLS posture of an acquisition target's public-facing assets at scale.
  • Competitor & vendor analysis — check which CA your competitors use, when their certs expire, and how they manage their SAN coverage.
  • DevSecOps & CI/CD — schedule recurring runs as a canary and diff datasets to detect unexpected certificate changes.
  • Bug bounty & recon — map SAN lists to discover additional domains and subdomains behind a single certificate.

📦 What you get

Each row in the dataset is one domain's certificate summary:

FieldDescription
domainThe queried domain (normalized)
validWhether the TLS connection was authorized by the system trust store
subjectCNCommon Name on the certificate
issuerOrgIssuer organization (e.g. "Let's Encrypt", "DigiCert Inc")
issuerCNIssuer common name
validFromCertificate not-before date (ISO 8601)
validToCertificate not-after / expiry date (ISO 8601)
daysRemainingNumber of days until expiry — negative if already expired
expiredtrue if the certificate has expired
expiringSoontrue if the certificate expires within 30 days
selfSignedtrue if the certificate appears self-signed (chain length 1, issuer = subject)
signatureAlgorithme.g. sha256WithRSAEncryption
publicKeyAlgorithmRSA or EC (P-256) etc.
keySizePublic key size in bits
sansComma-separated list of DNS SANs on the certificate
sansCountNumber of SAN entries
tlsVersionTLS version negotiated during the connection (e.g. TLSv1.3)
tlsVersionsSupportedComma-separated list of TLS versions the server accepted (probed individually)
chainLengthNumber of certificates in the trust chain
chainValidtrue/false — whether the full chain passes system trust validation
wildcardtrue if any SAN is a wildcard (*.example.com)
errorError message if connection or handshake failed
checkedAtISO 8601 timestamp of when the scan was run

Example output

[
{
"domain": "github.com",
"valid": "true",
"subjectCN": "github.com",
"issuerOrg": "DigiCert Inc",
"issuerCN": "DigiCert TLS Hybrid ECC SHA384 2020 CA1",
"validFrom": "2024-03-12T00:00:00.000Z",
"validTo": "2025-03-14T23:59:59.000Z",
"daysRemaining": "264",
"expired": "false",
"expiringSoon": "false",
"selfSigned": "false",
"signatureAlgorithm": "ECDSA-SHA384",
"publicKeyAlgorithm": "EC (P-256)",
"keySize": "256",
"sans": "github.com, www.github.com, *.github.com",
"sansCount": "3",
"tlsVersion": "TLSv1.3",
"tlsVersionsSupported": "TLSv1.2, TLSv1.3",
"chainLength": "3",
"chainValid": "true",
"wildcard": "true",
"checkedAt": "2026-06-24T12:00:00.000Z"
}
]

🚀 How to use it

  1. Click Try for free / Start.
  2. Paste your domain list into Domains — one per line (example.com or https://example.com/path, both work).
  3. (Optional) Tune Max Concurrency for large lists and keep Proxy enabled.
  4. Click Save & Start, then export the dataset as JSON, CSV, Excel or via API.

⚙️ Input

FieldTypeDescriptionDefault
domainsarray (required)Domains to check SSL certificates for. Schemes and paths are stripped automatically.
maxConcurrencyintegerParallel TLS connections. Higher is faster but may overwhelm small servers.10 (max 100)
proxyConfigurationobjectProxy used for the initial TCP connection.Apify Proxy (datacenter)

Example input

{
"domains": ["google.com", "github.com", "stackoverflow.com", "expired.badssl.com"],
"maxConcurrency": 10,
"proxyConfiguration": { "useApifyProxy": true }
}

🔍 How it works

For every domain, the actor opens a raw TCP socket to port 443, upgrades it to a TLS connection via Node.js tls.connect(), and captures the full peer certificate chain without downloading any HTTP content. The TLS handshake retrieves:

  • The leaf certificate (subject, issuer, validity window, SANs, key material)
  • The intermediate and root certificates (for chain length and trust validation)
  • The negotiated TLS version (tlsSocket.getProtocol())

After the initial handshake, the actor also probes each TLS version independently (TLSv1, 1.1, 1.2, 1.3) to report which versions the server actually accepts — this is a separate connection per version so it adds latency but produces comprehensive data.

No API key, no SSL Labs dependency, no rate limiting — everything happens client-side in the Apify runtime.

🧰 Tips & best practices

  • Provide bare domains (example.com) for cleanest results; subdomains work too.
  • The TLS version probe adds ~2–3 seconds per domain (3 extra connections); the field will be empty if the probes time out.
  • Servers that don't listen on port 443 (plain HTTP only) return valid: "false" with a connection error.
  • Filter by expiringSoon: "true" to catch certificates that need renewal within 30 days.
  • Filter by selfSigned: "true" and chainValid: "false" to flag configuration problems.
  • Export to CSV/Excel and sort by daysRemaining ascending to prioritize renewals.

❓ FAQ

How do I check SSL certificates for many domains at once?

Paste your full domain list into the Domains field and run the actor once. It connects to every domain over TLS, extracts the certificate details, and returns one row per domain.

Can I monitor certificate expiry in bulk?

Yes — every row includes validTo, daysRemaining, expired and expiringSoon (<30 days). Schedule a recurring run and filter by expiringSoon: "true" to see what needs renewal.

Is this a free SSL checker API without a key?

There's no API key to manage. The actor uses Node.js TLS sockets — no external SaaS, no SSL Labs rate limits. Just provide domains and run.

Which TLS versions does it check?

The actor probes TLSv1, TLSv1.1, TLSv1.2 and TLSv1.3 individually and reports which ones the server accepts. It also reports the TLS version negotiated during the primary handshake.

Can I export SSL certificate data to CSV or JSON?

Yes — download the dataset as CSV, JSON or Excel, or pull it through the REST API. Each domain is one row, perfect for spreadsheet filtering.

What happens with a domain that has no SSL (HTTP-only)?

The connection to port 443 fails, and the row is logged with valid: "false" and the error message in the error field. The run never crashes.

📝 Changelog

2026-06-24

  • Initial release — bulk SSL/TLS certificate inspection (expiry, issuer, SANs, TLS versions, chain validation), no API key, CSV/JSON export.