# Rival-Intel Methodology

**Updated:** 2026-10-01
**Coverage:** 29 Sacramento lobbying firms · 1,190 unique client relationships · 77 clients represented by 2+ firms
**Basis:** California Secretary of State, Cal-Access Lobbying Activity, 2025–2026 Legislative Session (observed 2026-10-01)

## Sources

- **Firm pages:** `https://cal-access.sos.ca.gov/Lobbying/Firms/Detail.aspx?id={ID}&session=2025&view=general` — client rosters and registration status per firm. Deep links are stored in `data/lobbyists.json`.
- **Firm directory:** `https://cal-access.sos.ca.gov/Lobbying/Firms/list.aspx?session=2025&letter={A-Z}`
- **Filings:** Form 625 quarterly activity reports, viewable under Financial Activity / Filing History on each Cal-Access page — the route to verify any roster detail here.
- **FPPC enforcement:** `https://www.fppc.ca.gov/enforcement.html` — no enforcement flags were present in this pull.

## What registration data shows

- Which firms are registered for the current session, and their status (Active / Withdrawn / Terminated).
- **Client rosters:** the employer relationships each firm reported. This is the backbone of the rival-firm file — every client name in it came from a Cal-Access firm page.
- **Overlap:** 77 clients appear on more than one firm's roster. Sharing a client is a normal, common arrangement (different firms for different issue areas or bill sets) — it is *not* evidence of a conflict or of poaching.

## What registration data does NOT show

- **Strategies** — filings list clients, not tactics, targets, or positions.
- **Fees and economics** — who charges what, retainer vs project, who is profitable.
- **Bill-level activity** — which bills a firm actually lobbied. For that, read Form 625 quarterly filings and leginfo position letters.
- **Personnel** — internal staffing, who left, who was hired, who works which accounts.
- **Win/loss** — no filing tells you who won a fight.

## How the derived fields were built

- **issue_space:** tagged from each firm's client roster (e.g., a roster heavy on hospital systems → `healthcare`). These are *derived*, not self-reported — firms may work issues their rosters don't reveal, and a tag describes where their clients sit, not what the firm does best.
- **shared_clients:** computed by cross-referencing all 29 rosters for identical client names.
- **overlap_with:** firms sharing at least one issue-space tag — a "same-water" indicator, not a rivalry ranking.

## The taste rule

This page is **public-record business intel, never personal dirt**:

- Clients and issue spaces are public records. Salaries, personal lives, health, family, and personnel gossip are not — and do not appear here.
- No claim about an individual appears unless it is in a filing or otherwise publicly verifiable. Name-matching an individual registrant to a firm is *not* done here — 19 individual lobbyist registrations were observed without client rosters (17 active, 1 withdrawn, 1 terminated as of the pull) and are reported only as aggregate counts.
- "Churn" on the watchlist is labeled exactly as what it is: **a roster delta between data refreshes**, which can mean a real hire/loss, a filing correction, or a stale snapshot. Verify on Cal-Access before acting or repeating it.

## Known gaps (nothing hidden)

1. **Lobbyist headcount per firm** — not in the pull. Firm pages list clients, not staff.
2. **notable_moves** — no verified hire/loss data; field is present but null by design.
3. **Solo lobbyists** — the 19 individual registrations have no client rosters in this data.
4. **Freshness** — a point-in-time pull. Registrations change; refresh before relying on a roster in a pitch or a conflict check.

## Refreshing

Re-run the Cal-Access firm pull for the 29 firm IDs, rebuild `data/rival-firms.json`, and redeploy. Watchlist users keep their own snapshots in their browsers; a new `updated` date triggers the roster-delta comparison on the Rivals page.
