crt.sh rate limit — what we actually know

crt.sh has no published rate limit, but anyone who has tried to script against it has hit one. Here is the consensus from years of community testing, and a few ways to keep your recon pipeline working.

The numbers, as best we can tell

Why the limit exists

crt.sh queries a single PostgreSQL instance against several billion rows. Concurrent expensive queries from one client can starve the entire service for everyone else. Sectigo provides crt.sh as a free public good — the rate limit exists to keep the service available, not to monetize it.

How to keep your pipeline working

1. Cache aggressively

CT data only grows. Once you have a domain's certificate history, only new entries matter. Use ETag/conditional requests against your own cache, not against crt.sh.

2. Prefer wildcard queries over per-subdomain loops

One query for %.example.com costs less than 200 queries for individual subdomains, even though wildcards have higher per-query cost.

3. Use a service with published quotas

CT Radar offers 100 searches/day on the free tier with explicit 429 + Retry-After headers when you exceed it. Pro tier lifts to 10K/day. Censys, Cert Spotter, and others have similar published quotas.

4. Self-host a CT mirror

If your volume justifies it, consume CT logs directly using certspotter (open source) and index them yourself. This is what crt.sh, Censys, and CT Radar all do internally — there is no shortcut.

Hit the crt.sh limit? Try CT Radar

100 searches per day on the free tier. Documented quotas. Real 429 responses. No mystery.

Search now →