What Angi cannot copy: live license status on every page
By Jason, Founder · Published · 4 min read · Wave 196
Summary
Wave 196 shipped LicenseCard, a universal embed that renders the contractor's live CSLB status inline on every LA spoke page. The card queries the registry rail the same way /for-pros and /tools/contractor-check do. It is one Angi-proof feature: they structurally cannot ship the same card because their supply pool fails too often to survive public exposure.
Article body
LicenseCard is a small React component. It takes a license number as a prop, calls the same regulator rail we use on /for-pros and /tools/contractor-check, and renders a card with the board's live answer: business name, classification, expiration date, and a verification mode (live, cached, or degraded). That is all it does.
It is also the feature that, more than any other single shipment, makes it impossible for Angi, Thumbtack, or HomeAdvisor to copy AskBaily without re-engineering their underlying business model. This post is why.
What the card shows
On an LA spoke page — for example /kitchen-remodeling-los-angeles — the card renders next to the price range, above the service-area coverage map. Specifically it shows: "Licensed by California Contractors State License Board, CSLB #1105249 (Classification B — General Building). Status: Active. Expires 2027-06-30. Verified at 2026-04-23 11:42 PDT. [Board record]". The "Board record" link goes directly to the CSLB's own license-detail page for that number. The homeowner can cross-check our card against the regulator's site in one click.
If the contractor's status is anything other than active, the card says so. If the board is unreachable at the moment the page renders, the card falls back to cached status with a timestamp and a "we couldn't reach CSLB right now" banner. In no case does the card claim verified when verified is not available.
Why this is the Angi-proof feature
Angi can implement LicenseCard tomorrow. The engineering is not hard. What they cannot do is pair it with their existing supply model.
Here is the math. Across a large marketplace's contractor pool, on any given month, 4 to 9 percent of contractors have a flag at their issuing board — lapsed bond, lapsed worker-comp, clerical discrepancy, disciplinary action pending, or license in grace-period renewal. On a pool of 100,000 active-listed contractors, that is 4,000 to 9,000 contractors who, if queried live, would return something other than an "Active" badge.
Angi's per-lead revenue depends on a contractor being eligible to receive leads. If LicenseCard goes live on their profile pages and 4 to 9 percent of pro profiles start showing a non-green badge, two things happen. First, a material number of contractors stop paying for leads and churn to marketplaces that do not do live verification. Second, every homeowner who sees a non-green badge and still gets routed a lead to that pro is evidence of Angi's model breaking its own promise to the homeowner. Angi's choice is: show the truth and lose supply, or hide the truth and lose trust. They have already chosen to hide the truth. They cannot un-choose that retrospectively.
Why AskBaily can
AskBaily's supply pool is small and pre-qualified. Every contractor passed the /for-pros license check on the way in (see Wave 181 deep dive for how). The license rail re-queries on a background refresh so flags are caught fast. If a contractor's license lapses, we alert the contractor directly, we freeze new-scope dispatch to them, and we notify the homeowner on any open project. The LicenseCard surfaces that same state on the public page.
The cost of running LicenseCard on every spoke is one additional regulator-rail call per render, cached aggressively (15 minutes for live mode, 24 hours for cached mode). On 5,344 spokes, the rail is hit approximately 10,000 times per day. The boards we support handle that volume comfortably; the California CSLB API is the most forgiving, and we are well under any rate limit.
The universal embed pattern
LicenseCard is implemented as a universal embed because we want it everywhere, not just the LA pages. Wave 196 placed it on every LA spoke. The same component is planned for every neighborhood hub, every /compare page, every /vs competitor teardown, and every contractor's own /for-pros/{contractor-slug} detail page (Wave 218, pending). The contract is stable: accept a license number and jurisdiction; render the live card. No state-specific forks.
The component composes above the footer on pages where the footer is the primary call-to-action, and inline near the primary CTA on pages where the CTA is higher. It never replaces the CTA; it augments the homeowner's trust context before they click.
What this enables for our reviews and commitments pages
Wave 175 shipped the public /reviews page. Wave 176 shipped /roadmap. Wave 178 shipped /commitments. LicenseCard completes the transparency cluster by making the verification claim actionable on every page, not just the hub. A homeowner who starts on a spoke page, scrolls past the LicenseCard, clicks through to /reviews, and then to /commitments now has three independent evidence trails, all citable, all traceable to primary-source records.
The unreasonable-effectiveness check
Every couple of months I ask whether LicenseCard is worth the infrastructure cost. The answer so far is always yes, because the same rail runs /for-pros, /tools/contractor-check, and the fleet's License-Lapse-Watcher agent. We paid to build the rail once. The card is near-free to ship because it rides the rail.
What is not free is the accountability the card creates. Every LA spoke, right now, publishes a verifiable claim. If the regulator ever publicly contradicts us, the contradiction is reachable in one click from the page. That is the asymmetry between a platform that publishes evidence and a platform that publishes marketing. It is the asymmetry the blog is here to make legible.
Sources & references
Commit attestation
- acda207280a8763d9bfb5c9a23196d74038489fc
- Waves
- 196
- Author
- jason
Commit SHAs are from the AskBaily private repository. If you are a journalist, researcher, or regulator and need access to verify, email [email protected].
Frequently asked
- Does every LA spoke page embed the LicenseCard?
- Yes. Wave 196 placed it on all 5,344 LA spoke pages. Extension to neighborhood hubs, /compare pages, and /vs teardowns is staged in subsequent waves.
- How often does the card refresh?
- 15-minute cache on live mode, 24-hour cache on degraded mode. Each render either hits the board or surfaces cached status with an explicit timestamp.
- Why can't Angi just ship the same card?
- They can engineer it. They cannot afford the revenue impact of showing a non-green badge on the 4-9 percent of their supply with a current board flag.