How to read California workers'-comp data without drawing the wrong conclusion

California's contractor data hides traps that produce confidently wrong numbers - canceled policies, a half-populated coverage column and impossible dates. Each one, and the fix.

The two most common mistakes are counting canceled policies as live, and reading the license register's summary coverage column as complete. The summary expiry is populated on only about half of licenses; the state's dedicated workers'-comp records are authoritative — but they include canceled policies that must be excluded, and both sets contain dates outside any plausible range.

If you work with California's raw contractor data directly — or you are evaluating a vendor who claims to — these are the specific things that go wrong. Every one of them produces a number that looks reasonable and is not, which also makes them good questions to put to anyone selling you a list built on this data.

Which records are authoritative for policy expiry?

The state's dedicated workers'-comp records, not the license register's summary columns. The register carries summary workers'-comp fields, but on the 12 August 2026 data only 122,064 of 243,555 licenses had a summary expiry — about 50%. Reading only that column loses half the population silently.

The catch is that the reverse is also true in a smaller way: 1,670 active licenses carry a summary expiry with no live row in the dedicated records. So the correct rule is prefer the dedicated records and fall back to the summary column, rather than using either alone. Where both exist they agree 99.06% of the time.

Do you have to exclude canceled policies?

Yes, and this is the mistake with the largest effect. The workers'-comp records include historical rows, and a canceled policy still has an expiration date sitting in the data — count it and you will report expirations that cannot happen.

On the 12 August data: 249,225 raw policy rows reduce to 203,456 once canceled rows are dropped and each license is deduplicated to its latest live expiry. Skipping that step inflates every window count.

What does "Exempt" mean in the coverage type?

It means the licensee has certified they have no employees and therefore claims no workers'-comp obligation. It is not an error and it is not missing data — 113,333 of 232,052 active licenses (48.8%) legitimately carry it.

Where it becomes a trap is if you treat exempt licenses as prospects for a lapse campaign. They have no policy to lapse. The coverage-type breakdown on the current data:

Coverage typeActive licenses
Workers' Compensation Insurance113,765
Exempt113,333
Leasing firm / temp agency3,185
License does not have current W/C1,174
Out of state393
Self-insured202

Note that fourth row — "license does not have current W/C" — 1,174 active licenses openly flagged as uncovered.

Are the dates trustworthy?

Mostly, with one caveat you must handle. Every date parses cleanly once values are stripped of whitespace, but the data contains out-of-range values: 24,313 issue dates fall outside 1990–2100, including years like 2207. Bound your date parsing and null anything implausible rather than letting it skew a sort.

And strip before you parse. Values arrive with leading spaces, and an unstripped date parse silently yields zero valid dates rather than an error — a failure mode that looks like an empty dataset instead of a bug.

What about licenses that look active but are in trouble?

The data carries two status fields, and most analyses read only the first.

  • Primary status — clear for active licenses, plus suspension values: bond suspensions (6,182), workers'-comp suspensions (3,333), liability-insurance suspensions (599) and a long tail of judgment, citation and family-support suspensions.
  • Secondary status — populated on 6,352 licenses and easy to miss entirely. 3,374 of those show a workers'-comp suspension pending on licenses whose primary status is still clear: a suspension in motion against a contractor who is still operating normally.

If you only read the primary status, that second group is invisible to you.

How are classifications formatted?

Inconsistently, which breaks naive filtering. Classifications are pipe-separated and mix formats — C57 and C-6 styles both appear, sometimes with spaces: A| B| C10| C36. Normalize by stripping, upper-casing, inserting the hyphen and splitting on the pipe, or a filter for C-10 will miss every row written as C10. One license in the current data carries 21 classifications.

Is county usable as a filter?

Yes, with one gotcha: county names are title-cased (Los Angeles), and 95.0% of active licenses have one. An exact-match filter for LOS ANGELES returns nothing at all. Normalize case on input.

How current is the data?

Continuously updated, not weekly-batched. Per-record update timestamps show thousands of records changing within any given week, and the state publishes an "as of" date with each refresh. That is why a lapse list should come from a fresh pull rather than a cached copy — and why a digest built on a stale snapshot should be withheld rather than sent.


Sources: official CSLB licensing records (243,555 licenses) and workers'-comp records (249,225 policy rows) dated 12 August 2026; CSLB's published record-layout documentation for field semantics. All counts computed directly from those records.

See this in your own county

LapseWatch sends the California contractors in your territory whose workers'-comp policy or license is about to expire — with phone, address and current carrier.

← All posts