Skip to main content

Command Palette

Search for a command to run...

How We Counted 693 Live PMHNP Openings in California (and Why Volume ≠ Fit)

A builder’s breakdown of our CA pipeline: multi-source ingestion, dedupe, geo resolution, and what “highest-volume state” means in real data.

Updated
5 min read

California shows 693 PMHNP openings in our index. The interesting part isn’t the number—it’s how you get a trustworthy count from messy job feeds, and what the distribution says about metros, settings, and competition.

California State Spotlight: 693 openings, highest volume—here’s what the data is really saying

California is the highest-volume PMHNP market in our dataset right now: 693 verified openings. If you’re building a job aggregator, that number isn’t a headline—it’s a stress test.

“693” only matters if it’s current, deduplicated, and geographically correct. Job boards repost. Health systems syndicate. Staffing firms clone. Locations get written as “Bay Area” or “Remote (CA)” or “Various Locations.” Salary ranges show up as hourly, annually, or not at all.

This post is a technical look at how we surface California’s volume on PMHNP Hiring (Next.js + TypeScript + Supabase), and why volume doesn’t automatically mean fit.

If you want to browse what’s live right now, this is the production view: https://pmhnphiring.com/jobs/state/california


Why CA leads in openings (and what “leads” means in a pipeline)

California’s lead is driven by three factors we can observe directly in the ingestion layer:

  1. Sheer employer surface area: large systems + multi-site outpatient groups generate continuous posting churn.
  2. Broad location graph: dense metros, fast-growing suburbs, and rural shortage zones produce postings across many counties.
  3. High repost velocity: CA roles are more likely to be syndicated across multiple sources, which inflates raw counts.

That third point is where data engineering matters. If we naïvely counted every scraped URL, CA would look even bigger—but it would be wrong.

At a high level, our daily pipeline looks like:

  • Ingest from 500+ sources (ATS pages, job boards, employer sites)
  • Normalize fields (title, employer, location, compensation)
  • Deduplicate across syndication
  • Verify freshness (remove stale/reposted listings)
  • Geocode & tag (state, metro, setting signals)
  • Serve via fast filters + alerts

California just happens to be where every one of those steps gets exercised at scale.


Counting “693”: dedupe + freshness are the whole story

The hardest part of “state spotlights” is making sure the count represents distinct, open roles.

1) Deduplication across sources

A single PMHNP role can appear:

  • on an employer’s ATS
  • on 3–10 job boards
  • reposted weekly with a new URL

We dedupe by generating a stable fingerprint from normalized fields. The exact recipe evolves, but conceptually:

// simplified
function fingerprint(job: NormalizedJob) {
  return hash([
    normalizeEmployer(job.employerName),
    normalizeTitle(job.title),
    normalizeLocation(job.location), // city/state if present
    normalizeReq(job.requirementsText ?? ""),
  ].join("|"))
}

Then we cluster near-duplicates (minor title differences, “Psych NP” vs “PMHNP”) using similarity thresholds.

2) Freshness: “live” vs “stale repost”

High-volume states are repost-heavy. To keep the CA page useful, we track signals like:

  • last_seen_at (when a crawler last confirmed it exists)
  • source_updated_at (if the source exposes it)
  • closed/404 signals

A job can be popular and still sit open for months—but it needs to be verifiably available.


Where the CA jobs are: geo resolution beats “Bay Area” strings

California hiring isn’t evenly distributed, and you can’t analyze distribution if locations are sloppy.

Location normalization challenges we see in CA

  • “Los Angeles, CA” (easy)
  • “San Francisco Bay Area” (needs mapping)
  • “Remote in California” (state-only)
  • “Multiple Locations” (often a multi-site group)

We resolve locations into a consistent shape:

{
  "state": "CA",
  "city": "San Diego",
  "metro": "San Diego-Chula Vista-Carlsbad, CA",
  "is_remote": false,
  "lat": 32.7157,
  "lng": -117.1611
}

When we can’t confidently infer city/metro, we still keep the job (state-level filtering matters), but we avoid over-claiming precision in metro counts.

What the distribution usually looks like

  • Big metros: widest mix (outpatient, inpatient, specialty)
  • Rural/semi-rural: fewer postings, often higher urgency and narrower candidate pools

Outpatient dominates the CA index—clinic medication management, integrated care, and community mental health appear frequently—because those orgs post continuously and across many sites.


Salary + cost of living: normalization before conclusions

California is commonly high-paying, but salary data is messy:

  • hourly vs annual
  • wide ranges (“$160k–$240k”) vs single numbers
  • missing compensation (common)

We normalize to a comparable annualized range when possible:

function annualize(amount: number, unit: "hour"|"year") {
  if (unit === "year") return amount
  return amount * 40 * 52
}

Then we store both the raw and normalized values so the UI can explain what it’s showing.

Cost of living (COL) is not a single number either; it’s region-specific. The product approach we take is: show salary when available, but keep filtering centered on role constraints (onsite vs hybrid, setting, call, population) because those are consistently present in the data.


Volume ≠ fit: what to infer from 693 openings

From a builder’s point of view, “highest volume” usually means:

  • more duplicates to crush
  • more employer posting patterns (waves, evergreen roles)
  • more variance in requirements (onsite-only, specific populations, credentialing timelines)

For job seekers, that translates to: some CA postings close fast because applicant volume is high; others linger because constraints are tight.

If you’re exploring CA, use the live index to filter down to the jobs that match your constraints instead of optimizing for the raw count:

  • region/commute reality
  • outpatient vs inpatient
  • remote/hybrid flags
  • salary (when present)

California leads the country in openings—but the real win is turning that noisy volume into a clean, searchable set of roles you can actually act on.