Wired in prototype
CMS NPPES (NPI Registry)
Public domain · bulk download (~9.6M rows) + REST API
All US healthcare providers with an NPI. Includes taxonomy codes, primary practice address, state license number + state code (×15 slots — used for the sanctions cross-walk), and authoritative provider identity. The provider_ingest pipeline streams the bulk schema, filters to the curated menopause NUCC taxonomies, overlays the MSCP credential list (synthetic + self-reported), computes a graphScore, stamps lat/lng from the Census ZCTA gazetteer, and emits the 2,015-row directory the contract serves. Refresh runs in ~1m50s end-to-end via the tracked refresh_national.sh harness.
- PurposeAuthoritative provider identity. The NPI is the join key that everything else hangs off.
Wired in prototype
Census 2020 ZCTA Gazetteer
Public domain · ~33K ZIP centroids
Bundled in both the Python pipeline (provider_ingest/centroids.py) and the Next.js server runtime (lib/zip-centroids.ts) so build-time stamping (every NPPES row → lat/lng) and request-time resolution (patient ZIP → centroid) draw from one source. The directory ranks by Haversine distance whenever the patient ZIP centroid is known and at least one in-tier provider has its own; otherwise it gracefully falls back to graphScore-only ranking and reports sort: "score".
- PurposeReal distance ranking, not a 3-digit-prefix proxy. Powers the "4.2 mi away" chip on every recommendation.
Wired in prototype
State license-sanction overlays
Public domain · CA + NY + TX
Three live filters drop sanctioned providers at build time: CA Medi-Cal Suspended & Ineligible List (NPI-keyed CSV from CHHS), NY Professional Medical Conduct Board Actions (license-keyed via the NPPES Provider License Number cross-walk), Texas Medical Board All-Licenses (license-keyed, allowlist of explicit active-sanction dispositions — REVOKED / SUSPENDED BY BOARD / UNDER BOARD ORDER, not the noisy != NONE check). The June 2026 run filters 588 (CA) + 849 (NY) + 283 (TX) = 1,720 candidates total. FL is gated behind Azure AD B2C; NJ is PDF-only; landscape documented in the runbook.
- PurposePatient-safety filter that's verifiable from the response (provenance.dataset.sanctionedFilteredBySource) on every API call.
Wired in prototype
NPPES service-line signals
Derived · provider_ingest/signals.py
Six public-registry tokens detected from the NPPES credential text + taxonomy stack: facog (Fellow ACOG = board-certified OB/GYN), faafp (board-certified family medicine), face (board-certified endocrinology), whnp (Women's Health NP), cnm (Certified Nurse-Midwife), multi-taxonomy (≥2 menopause-relevant NUCC codes). Each contributes a +2% graphScore bump capped at +5% — bounded so a non-certified provider with all signals still falls behind a certified one at the same baseline. 22% of the directory carries at least one signal; honestly sub-ranks the relevant-local fallback tier.
- PurposeStrengthens the case for non-certified providers in metros where MSCP coverage is sparse, without inventing certifications.
Today · partial
Insurance acceptance overlay
Synthetic per-NPI today · partner feed-shaped
There's no public structured payer/in-network feed; a real implementation needs a paid partnership (Ribbon Health, Turquoise, etc.). Today insuranceAccepted is derived deterministically from a SHA-256 hash of the NPI, calibrated to plausible real-world participation rates (Medicare ~85%, Kaiser ~20%, ~3.8 plans per provider on average). Every Experience API response carries the synthetic caveat in provenance.sources. The shape is real (filter UX, contract, agent framing); replacing the synthesis with a real feed is a one-module swap.
- PurposeWire the in-network filter end-to-end so the partner integration is a drop-in, not a rebuild.
Designed
Clinic-site service detection
Derived · Pause-built
Phase-2-bis. NPPES-resident signals already cover board certifications and multi-specialty practice; clinic-site scraping would add explicit mentions of HRT / perimenopause / vasomotor services on the practice's own website. Caching, rate-limiting, robots.txt-respecting. No fetcher today — we don't ship a brittle scraper without an explicit need.
- PurposeDistinguishes general OB/GYNs who happen to see midlife patients from clinicians actually marketing menopause services.
Designed
Licensed MSCP feed (Menopause Society)
Partnership · The Menopause Society
Authoritative Menopause Society Certified Practitioner roster; gated on a partnership (terms-of-use prohibits scraping/republishing). Self-reported MSCP/NCMP credentials in the public NPPES record act as the floor today (~14 physicians nationally — rare but real). The pipeline is ready to union a licensed feed via the same MscpOverlay class once an agreement lands.
- PurposeDense certified coverage outside the demo metros. Today's directory has 15 certified providers; a real feed adds thousands.
Future
Outcomes signal (closed loop)
Pause-internal · Phase 3
Once Pause has referrals flowing at scale, the patient and provider outcomes from each referral become the strongest possible scoring signal. Activates after the first ~1,000 referrals.
- PurposeThe actual moat. Every successful referral makes the graph better; every poor one downweights the destination.