Four things cause it. Check them in this order — it's roughly how often each turns out to be the culprit.
1. A coverage lapsed on its own line
The most common, and the least obvious. A certificate holds several policies with different dates. Workers' compensation can end in March while general liability runs to December, and the certificate still looks current at a glance.
Open the certificate and read the expiry on each coverage rather than the one at the top.
2. A limit is below your minimum
The coverage exists and is in date, but at $500,000 where you require $1,000,000. The contractor is Non-Compliant for a policy they genuinely hold.
Check Settings → Compliance against what the certificate says. Sometimes the minimum is stale rather than the certificate.
3. A required coverage isn't there at all
You require Auto Liability; their certificate has none. Either they need to add it, or you're requiring something you don't actually need from this kind of contractor — see Set required coverages and limits.
4. A license expired
Licenses aren't documents, and the rules differ. One expired license makes a contractor Non-Compliant on its own, where documents only fail when the whole set has lapsed. A contractor with immaculate insurance and a license that expired last month is Non-Compliant, correctly.
What is not the reason
Note
Nor is expiring soon. A certificate with three weeks left is valid, and the contractor stays Compliant until the day it lapses. Upcoming deadlines show in the Action Queue and in alert emails, not in the badge.
Still doesn't add up?
Check what was actually extracted from the certificate against the PDF itself — a limit misread by a factor of ten, or a date read as 2025 instead of 2026, produces exactly this. Review and correct a parsed COI.