diff --git a/data/hc_campaigns/hc_revalidation_overdue_personal.html b/data/hc_campaigns/hc_revalidation_overdue_personal.html
index 7e6a9d4..0391951 100644
--- a/data/hc_campaigns/hc_revalidation_overdue_personal.html
+++ b/data/hc_campaigns/hc_revalidation_overdue_personal.html
@@ -58,7 +58,7 @@
diff --git a/data/hc_campaigns/hc_revalidation_personal.html b/data/hc_campaigns/hc_revalidation_personal.html
index 40dfef2..b60b497 100644
--- a/data/hc_campaigns/hc_revalidation_personal.html
+++ b/data/hc_campaigns/hc_revalidation_personal.html
@@ -57,7 +57,7 @@
diff --git a/data/hc_campaigns/hc_revalidation_turnover.html b/data/hc_campaigns/hc_revalidation_turnover.html
index fddba67..0d4c7cc 100644
--- a/data/hc_campaigns/hc_revalidation_turnover.html
+++ b/data/hc_campaigns/hc_revalidation_turnover.html
@@ -57,7 +57,7 @@
|
diff --git a/docs/healthcare-competitive-pricing.md b/docs/healthcare-competitive-pricing.md
new file mode 100644
index 0000000..1fa22e3
--- /dev/null
+++ b/docs/healthcare-competitive-pricing.md
@@ -0,0 +1,126 @@
+# Healthcare services — competitive pricing research
+
+**Date:** 2026-06-20
+**Purpose:** Benchmark our healthcare compliance prices against what other firms
+charge, to inform email copy (price removal), landing-page pricing, and offer design.
+
+## Methodology & honest caveat
+
+Automated web search (Google / Bing / DuckDuckGo) and direct vendor-page scraping
+were attempted and largely **bot-blocked**, and nearly every specialist firm
+(ProviderTrust, Verisys, Streamline Verify, Exclusion Screening LLC, most
+credentialing companies) **gates pricing behind a "schedule a call" sales motion**.
+That gating is itself a signal: this market is sales-led and quote-based, which is
+exactly the friction our flat-fee, no-login, self-serve checkout is designed to
+undercut.
+
+The figures below are from **established market knowledge** of the healthcare
+credentialing / compliance space, with **confidence levels marked**. Specific
+vendor quotes were NOT fabricated — where a number could not be verified live it
+is presented as a market range, not a vendor-attributed price. Government fees
+(CLIA) are public but the CMS pages are JS-rendered and did not scrape cleanly;
+amounts below are flagged for re-verification.
+
+> **Action item:** when we can get live quotes (mystery-shop a few competitors, or
+> pull their gated PDFs), replace the ranges here with sourced, dated, vendor-named
+> figures.
+
+## Our current prices (source of truth: `api/src/service-catalog.ts`)
+
+| Service | Slug | Our price | Billing |
+|---|---|---:|---|
+| Medicare PECOS Revalidation | `npi-revalidation` | **$599** | one-time |
+| Medicare Enrollment (PECOS) | `medicare-enrollment` | **$699** | one-time |
+| NPI Reactivation | `npi-reactivation` | **$449** | one-time |
+| NPPES Data Update / Attestation | `nppes-update` | **$349** | one-time |
+| CLIA Certificate Renewal | `clia-renewal` | **$449** | one-time (+ govt fee) |
+| OIG/SAM Exclusion Screening | `oig-sam-screening` | **$79** | **per month** (recurring) |
+| Provider Compliance Bundle (Annual) | `provider-compliance-bundle` | **$899** | per year |
+
+> Note: the build script `scripts/build_healthcare_campaigns.py` SEGMENTS dict had
+> a stale `"price": "$299"` for OIG — that is **dead metadata** not used at
+> checkout (catalog says $79/mo). Worth cleaning up to avoid confusion, but it
+> never affected what a customer was charged.
+
+## Benchmarks by service
+
+### 1. Medicare Revalidation / PECOS enrollment filing — our $599 / $699
+- **Market:** credentialing/enrollment firms typically charge **~$200-$500 per
+ provider, per payer** for enrollment, often inside a broader credentialing
+ retainer. Medicare-specific revalidation a-la-carte commonly **~$150-$400**;
+ full new Medicare enrollment (855I/855B) often **~$300-$600**. Many bill hourly
+ ($50-$150/hr) inside a retainer rather than flat.
+- **Verdict:** our $599 reval / $699 enrollment is **at or slightly above** the
+ a-la-carte midpoint, but **defensible** as flat-fee, no-login, done-for-you,
+ single provider. Confidence: **medium-high** (the per-payer model is well
+ established).
+
+### 2. OIG/SAM exclusion screening — our $79/month ← most mispriced
+- **Market:** specialist exclusion monitoring is almost always **per-covered-life /
+ per-employee, per-month**, roughly **$1-$3 per name per month**, often with
+ **annual minimums ~$300-$1,000+** for a small practice. One-time single-name
+ searches run **~$5-$15**.
+- **Verdict:** a flat **$79/month for the whole practice** is **cheap-to-mid** for a
+ 10+ person office but potentially **expensive for a solo provider** screening
+ 1-3 names — who can DIY free on the public LEIE / SAM.gov sites (which our own
+ email tells them to do). The flat model is fine; the **recurring** ask is the
+ hard part in cold email vs the perceived free-DIY alternative. Confidence:
+ **medium-high** on the per-life model.
+
+### 3. NPPES / NPI update — our $349 ← looks high
+- **Market:** NPI registration/update is **commodity work**; services that file NPI
+ applications charge roughly **$50-$200**, and some credentialing firms bundle it
+ **free** with enrollment.
+- **Verdict:** **$349 for an NPPES update looks high** relative to perceived effort
+ (the provider knows NPPES is a free government portal). Widest price-to-perceived-
+ value gap of any item → likely a conversion drag. Confidence: **medium**.
+
+### 4. NPI reactivation — our $449
+- **Market:** tied to restoring Medicare billing; more defensible than a plain
+ update because the stakes (claims paying again) are high. Comparable to a reval
+ filing in effort. Confidence: **medium**.
+
+### 5. CLIA renewal — our $449 service fee (+ government fee, separate)
+- **Government CLIA certificate fee** (paid to CMS, separate from any service fee):
+ Certificate of Waiver / PPM historically **~$180**; Certificate of
+ Compliance/Accreditation **scales with annual test volume from ~$180 up to
+ several thousand**. *(Re-verify current amounts on the CMS CLIA fee schedule —
+ CMS updates them; page is JS-rendered and did not scrape cleanly.)*
+- **Verdict:** a **$449 service fee** to prepare/submit the CMS-116 is reasonable,
+ **but the email/landing copy must make clear it's on top of the government fee**.
+ Confidence: **high** that a separate govt fee exists; **medium** on exact current
+ amounts.
+
+## Synthesized ranges (low / typical / high)
+
+| Service | Market low | Market typical | Market high | Ours | Read |
+|---|---:|---:|---:|---:|---|
+| Medicare revalidation (a-la-carte) | $150 | $250-350 | $500 | **$599** | slightly high, defensible (flat, no-login) |
+| Medicare new enrollment | $300 | $400-500 | $600+ | **$699** | top of range; justify with done-for-you |
+| NPI reactivation | $150 | $300 | $500 | **$449** | upper-mid, OK (billing at stake) |
+| NPPES/NPI update | $50 | $100-150 | $200 | **$349** | **high vs perceived value** |
+| CLIA renewal service fee | $150 | $300 | $600 | **$449** | mid; must separate govt fee |
+| OIG/SAM screening (small practice) | ~$25/mo | ~$50-100/mo | $300+/mo (per-life) | **$79/mo** | mid, but recurring = hard cold ask |
+
+## Takeaways for the campaign
+
+1. **Removing price from the cold email is the right call** — it kills the biggest
+ objection at the worst moment, lets price be revealed on the landing page after
+ value is established, and sidesteps NPPES/OIG sticker shock. Catalog prices stay
+ the source of truth at checkout.
+2. **Best-priced / most defensible:** revalidation ($599), reactivation ($449),
+ CLIA ($449) sit at sensible levels.
+3. **Mispriced-feeling (review):** NPPES update **$349** reads high for "update a
+ free form"; OIG **$79/mo recurring** competes against free DIY. Consider a lower
+ NPPES anchor or a one-time OIG option as an entry product.
+4. **Differentiator to lean on:** competitors are sales-led and quote-gated. Our
+ edge is **transparent flat pricing + no-login done-for-you + instant checkout**.
+ That should be the wedge, not undercutting on raw price.
+
+## Confidence summary
+- Per-payer credentialing model & ranges: **medium-high**
+- Exclusion-screening per-life model: **medium-high**
+- NPI update being commodity-cheap: **medium**
+- Exact CLIA government fee amounts: **medium (re-verify on CMS)**
+- All specific dollar figures: **ranges, not vendor-attributed quotes** — upgrade
+ with live mystery-shopping when possible.
diff --git a/docs/healthcare-email-compliance-review.md b/docs/healthcare-email-compliance-review.md
new file mode 100644
index 0000000..4aeca4d
--- /dev/null
+++ b/docs/healthcare-email-compliance-review.md
@@ -0,0 +1,98 @@
+# Healthcare cold-email compliance review (2026-06-20)
+
+Reviewed all 10 templates in `data/hc_campaigns/` after removing prices, fixing
+click tracking, and de-risking unsubstantiated status claims.
+
+## Scope of the pass
+1. **Removed all service prices** from the emails (price is now revealed on the
+ order page, after value is established). Catalog (`api/src/service-catalog.ts`)
+ remains the source of truth.
+2. **Fixed click tracking** — appended `@TrackLink` + UTM to every conversion CTA
+ (root cause of clicks=0; Listmonk only registers links with that marker).
+3. **Reframed unsubstantiated per-record status assertions** to honest, hedged,
+ generally-true statements (defamation / FTC-deception risk).
+4. This compliance review.
+
+## Compliance posture — item by item
+
+### CAN-SPAM (US) — PASS
+- **Physical postal address** present in every footer (Performance West Inc., 525
+ Randall Ave Ste 100-1195, Cheyenne, WY 82001). ✓
+- **Unsubscribe** present in every template + `List-Unsubscribe` /
+ `List-Unsubscribe-Post` one-click headers set by the build script. ✓
+- **No deceptive subject lines** — subjects are hedged ("may be out of date",
+ "appears deactivated", "Are you screening for…"). ✓
+- **Accurate From / Reply-To** — `FROM_EMAIL` / `REPLY_TO` real, monitored. ✓
+
+### Truth-in-advertising / FTC deception — FIXED
+The biggest risk was **asserting a specific provider's record status as fact when
+we don't actually measure it**. Addressed:
+
+| Template | Was | Now |
+|---|---|---|
+| `nppes_outdated` | "record … appears **out of date**", header "Outdated registry information **detected**", row "**FLAGGED OUT OF DATE**", footnote "Staleness **flagged by our compliance monitoring**" | General true statement ("most practices drift out of date over time"), header "NPPES Data Check / keep your record current & attested", row "**PERIODIC REVIEW REQUIRED**", footnote cites the real CMS periodic-attestation requirement |
+| `npi_reactivation` | header "Deactivated enrollment **detected**", body "**flagged** … as deactivated" | header "Provider Enrollment Check", body "**may be** deactivated … worth confirming on the official sources" |
+
+**Why this matters:** the `nppes_outdated` audience selector (`institutional_verified`)
+only checks **deliverability**, never staleness — and the harvested data has **no
+NPPES last-updated field**, so a per-record "out of date / FLAGGED" claim was
+literally unsubstantiated for every recipient. Now the copy is true for everyone
+(CMS does require periodic NPPES attestation) and still invites them to self-verify.
+
+### Substantiated claims that were KEPT (verified backed by data)
+- `revalidation_overdue` "**is past due** / PAST DUE · N days overdue" — **OK**: the
+ `reval_overdue` selector requires `reval_status == "overdue"` AND a real overdue
+ day count derived from the **public CMS Revalidation Due Date List**. The email
+ also links the provider to that exact government list to self-verify. Legitimate.
+- `revalidation_due_soon` "deadline is coming up" — backed by `reval_status ==
+ "upcoming"` from the same CMS list. ✓
+- OIG "**civil monetary penalties up to $20,000 per claim**" — this is a real OIG
+ penalty figure (kept; it is a regulatory fact, not a price). ✓
+
+### Government-affiliation / impersonation — PASS
+- Every template carries the disclaimer **"Performance West is an independent
+ compliance firm, not affiliated with CMS / Medicare / OIG / SAM.gov."** ✓
+- "Official record · CMS Medicare Revalidation Due Date List" refers to the **CMS
+ public dataset we cite** (and link to), not a claim that we are CMS. The
+ "Don't take our word for it — check the official CMS record" framing reinforces
+ that we are pointing them AT the government source, not posing as it. ✓
+- No CMS/HHS logos, seals, or government-lookalike sender identity. ✓
+
+### "No-login / done-for-you" claims — PASS (already vetted)
+- Matches the verified capability map in `docs/healthcare-no-login-value-add.md`
+ and `docs/healthcare-filing-tiers-verified.md`. The one honesty caveat (the
+ provider must personally **sign** the 855; we cannot sign for them) is respected:
+ copy says "the only thing we may need is a one-minute e-signature," never claims
+ we sign on their behalf. ✓
+
+### Guarantee / absolute-language scan — ACCEPTABLE
+Scanner flagged `guarantee / never / 100% / will not`. Reviewed in context — all
+benign and substantiable:
+- "**100% satisfaction guarantee**" + "we'll make it right" — standard puffery /
+ service promise, paired with "fixed pricing, no billable hours." Acceptable.
+- "You **never** share your password / you **will not** pay billable hours" —
+ factual descriptions of how the service works, not outcome guarantees. ✓
+- No claims guaranteeing a CMS approval/outcome (which WOULD be a problem). ✓
+
+### Trust/credibility badges — VERIFY (flag for owner)
+Footers assert **"SOC 2 Type II hosting · HIPAA & PCI compliant · 256-bit TLS."**
+These are factual compliance claims and must be **literally true**:
+- ⚠️ **Action for Justin:** confirm we can substantiate SOC 2 Type II + HIPAA + PCI
+ (or soften to "encrypted, secure Stripe payments" if any is aspirational). False
+ compliance badges are an FTC and contractual risk. Not changed in this pass —
+ needs owner confirmation.
+
+## HTML / deliverability QA — PASS
+- All 10 templates render with **0 JS errors** headless, each has **exactly one
+ tracked `/order/...@TrackLink` CTA**, and **no price leaks** (only the $20,000
+ OIG penalty stat remains, intentionally).
+- External self-verify links (oig.hhs.gov, sam.gov, npiregistry, data.cms.gov) left
+ **untracked** on purpose (they're trust links, not conversions).
+
+## Outstanding (not blocking, recommended next)
+1. **Confirm SOC 2 / HIPAA / PCI badge claims** are literally true (above).
+2. **OIG $79/mo & NPPES $349 pricing** flagged as high/hard in
+ `docs/healthcare-competitive-pricing.md` — consider a one-time OIG entry option
+ and a lower NPPES anchor. (Pricing strategy, separate from compliance.)
+3. **Add the free `/tools/npi-compliance-check`** as a soft secondary CTA / lead
+ magnet so non-buyers are captured and nurtured (funnel, separate effort).
diff --git a/scripts/build_healthcare_campaigns.py b/scripts/build_healthcare_campaigns.py
index bb89d24..fb37d5c 100644
--- a/scripts/build_healthcare_campaigns.py
+++ b/scripts/build_healthcare_campaigns.py
@@ -45,7 +45,9 @@ OUT_DIR = os.path.join(os.path.dirname(__file__), "..", "data", "hc_campaigns")
# subject listmonk campaign subject line
# template HTML file under data/hc_campaigns/ (the canonical body)
# cta_path order page the CTA links to (NPI appended as ?npi=)
-# price headline price (for reference / docs; lives in the template)
+# price reference price only (catalog in api/src/service-catalog.ts is
+# the source of truth). NOT shown in the email anymore — price is
+# revealed on the order page after the value is established.
# list_name listmonk-hc list this segment is warmed into
# campaign_name listmonk-hc campaign name prefix (dated per build)
# selector which warmup-CSV rows belong to this segment (see cron)
@@ -90,7 +92,7 @@ SEGMENTS = {
"subject": "Are you screening for OIG / SAM exclusions?",
"template": "hc_oig_screening.html",
"cta_path": "/order/oig-sam-screening",
- "price": "$299",
+ "price": "$79/mo",
"list_name": "HC Warmup - OIG Screening",
"campaign_name": "HC Warmup - OIG Screening",
"selector": "institutional_verified",
|
|
|
|