healthcare emails: remove prices, fix click tracking, de-risk claims

Diagnosing zero healthcare sales (11k sent, 5479 opens, 0 clicks, 0 orders).
Root cause of clicks=0: Listmonk only registers a link for tracking when the
href ends with the literal @TrackLink marker; all 10 hc templates lacked it
(trucking/CRTC have it). So the entire funnel was unmeasurable below 'open'.

Changes:
- Click tracking: append @TrackLink + UTM to every /order/ CTA across all 10
  templates (external gov self-verify links left untracked on purpose).
- Remove all service prices from emails (99/49/49/99yr/9mo). Price is
  now revealed on the order page after value is established; catalog
  (api/src/service-catalog.ts) stays source of truth. Kept the 0,000 OIG
  penalty stat (regulatory fact, not our price). Added a neutral 'flat fee shown
  up front' reassurance block where the fee table used to be.
- Compliance/honesty: the nppes_outdated email asserted a per-record
  'FLAGGED OUT OF DATE / detected' status, but its selector only checks
  deliverability and the data has no NPPES last-updated field -> unsubstantiated
  for every recipient. Reframed to a generally-true periodic-attestation message
  ('PERIODIC REVIEW REQUIRED', 'most practices drift out of date'). Same hedging
  applied to npi_reactivation ('may be deactivated ... confirm on official
  sources'). Substantiated reval 'past due' claims (backed by the public CMS
  Revalidation list) were kept.
- Fixed stale $299 OIG metadata in build script -> $79/mo (reference only).

Docs: docs/healthcare-competitive-pricing.md (benchmark research) and
docs/healthcare-email-compliance-review.md (CAN-SPAM / FTC / impersonation pass;
flags SOC2/HIPAA/PCI badge claims for owner confirmation).

Verified headless: all 10 render with 0 JS errors, exactly 1 tracked CTA each,
no price leaks.
This commit is contained in:
justin 2026-06-20 09:37:02 -05:00
parent 9a9b0b9130
commit d8e3e40dda
13 changed files with 256 additions and 48 deletions

View file

@ -58,7 +58,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us take the CLIA renewal off your plate &mdash; the sooner we start, the better.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us take the CLIA renewal off your plate &mdash; the sooner we start, the better.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p>
<a href="https://performancewest.net/order/clia-renewal?clia={{ .Subscriber.Attribs.clia }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Renew my CLIA certificate &rarr;</a> <a href="https://performancewest.net/order/clia-renewal?clia={{ .Subscriber.Attribs.clia }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-clia-renewal@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Renew my CLIA certificate &rarr;</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -18,14 +18,13 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #6ee7b7;border-radius:10px;padding:18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #6ee7b7;border-radius:10px;padding:18px;">
<h3 style="margin:0 0 10px;font-size:15px;color:#065f46;font-weight:700;">What's included</h3> <h3 style="margin:0 0 10px;font-size:15px;color:#065f46;font-weight:700;">What's included</h3>
<div style="font-size:13px;color:#065f46;line-height:1.7;">Revalidation monitoring &amp; filing, NPPES updates/attestation, and your <strong>first OIG/SAM exclusion screening</strong> &mdash; one flat annual price, all tracked, all documented. Continue monthly exclusion monitoring afterward for $79/month (optional, cancel anytime).</div> <div style="font-size:13px;color:#065f46;line-height:1.7;">Revalidation monitoring &amp; filing, NPPES updates/attestation, and your <strong>first OIG/SAM exclusion screening</strong> &mdash; one flat annual price, all tracked, all documented. Continue monthly exclusion monitoring afterward (optional, cancel anytime).</div>
</td></tr></table> </td></tr></table>
<!-- Detail row --> <!-- Detail row -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;font-size:13px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;font-size:13px;">
<tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">NPI</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.npi }}</td></tr> <tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">NPI</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.npi }}</td></tr>
<tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">Practice</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.practice }}</td></tr> <tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">Practice</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.practice }}</td></tr>
<tr><td style="padding:10px 0;color:#6b7280;">Our service fee</td><td style="padding:10px 0;font-weight:700;text-align:right;color:#047857;">$899/yr</td></tr>
</table> </table>
<!-- Verify-it-yourself: the bundle monitors public government sources end to <!-- Verify-it-yourself: the bundle monitors public government sources end to
@ -43,7 +42,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">One annual bundle covers your core CMS obligations.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">One annual bundle covers your core CMS obligations.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">We watch the deadlines so you never miss one.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">We watch the deadlines so you never miss one.</p>
<a href="https://performancewest.net/order/provider-compliance-bundle?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Get the compliance bundle →</a> <a href="https://performancewest.net/order/provider-compliance-bundle?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-compliance-bundle@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Get the compliance bundle →</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -6,15 +6,15 @@
<!-- Header --> <!-- Header -->
<tr><td style="background-color:#0f766e;background:linear-gradient(135deg,#0f766e 0%,#14b8a6 100%);padding:26px 28px;"> <tr><td style="background-color:#0f766e;background:linear-gradient(135deg,#0f766e 0%,#14b8a6 100%);padding:26px 28px;">
<img src="https://performancewest.net/images/logo-white.png" alt="Performance West" style="height:44px;margin-bottom:10px;display:block" /> <img src="https://performancewest.net/images/logo-white.png" alt="Performance West" style="height:44px;margin-bottom:10px;display:block" />
<h1 style="color:#fff;margin:0;font-size:22px;font-weight:700;font-family:Inter,system-ui,sans-serif;">Provider Enrollment Alert</h1> <h1 style="color:#fff;margin:0;font-size:22px;font-weight:700;font-family:Inter,system-ui,sans-serif;">Provider Enrollment Check</h1>
<p style="color:#ccfbf1;margin:6px 0 0;font-size:13px;font-family:Inter,system-ui,sans-serif;">Deactivated enrollment detected</p> <p style="color:#ccfbf1;margin:6px 0 0;font-size:13px;font-family:Inter,system-ui,sans-serif;">Make sure your Medicare enrollment is still active</p>
</td></tr> </td></tr>
<!-- Body --> <!-- Body -->
<tr><td class="pw-pad" style="padding:28px;font-family:Inter,system-ui,sans-serif;color:#1f2937;"> <tr><td class="pw-pad" style="padding:28px;font-family:Inter,system-ui,sans-serif;color:#1f2937;">
<p style="font-size:15px;margin:0 0 18px;line-height:1.5;">Hi {{ .Subscriber.Name }},</p> <p style="font-size:15px;margin:0 0 18px;line-height:1.5;">Hi {{ .Subscriber.Name }},</p>
<h2 style="font-size:19px;margin:0 0 14px;color:#0f172a;line-height:1.3;">Your enrollment looks deactivated — let's fix it fast</h2> <h2 style="font-size:19px;margin:0 0 14px;color:#0f172a;line-height:1.3;">Your enrollment looks deactivated — let's fix it fast</h2>
<p style="font-size:14px;line-height:1.7;margin:0 0 18px;">Our compliance monitoring flagged the enrollment for <strong>{{ .Subscriber.Attribs.practice }}</strong> (NPI {{ .Subscriber.Attribs.npi }}) as <strong>deactivated or inactive</strong>.</p> <p style="font-size:14px;line-height:1.7;margin:0 0 18px;">Our compliance monitoring suggests the enrollment for <strong>{{ .Subscriber.Attribs.practice }}</strong> (NPI {{ .Subscriber.Attribs.npi }}) <strong>may be deactivated or inactive</strong> &mdash; it is worth confirming on the official sources below.</p>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #6ee7b7;border-radius:10px;padding:18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #6ee7b7;border-radius:10px;padding:18px;">
<h3 style="margin:0 0 10px;font-size:15px;color:#065f46;font-weight:700;">Why it matters</h3> <h3 style="margin:0 0 10px;font-size:15px;color:#065f46;font-weight:700;">Why it matters</h3>
@ -42,12 +42,9 @@
</td></tr> </td></tr>
</table> </table>
<!-- Service fee --> <!-- Pricing reassurance (no number in email; shown on the order page) -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr> <p style="margin:0;font-size:13px;color:#475569;line-height:1.6;font-family:Inter,system-ui,sans-serif;">Simple, <strong>flat fee &mdash; shown up front</strong> before you pay anything. No logins, no hourly billing, no surprises.</p>
<td style="font-size:13px;color:#6b7280;">Our service fee to reactivate it for you</td>
<td style="font-size:22px;font-weight:800;text-align:right;color:#047857;white-space:nowrap;">$449</td>
</tr></table>
</td></tr></table> </td></tr></table>
<!-- Verify-it-yourself: deactivation status is not a single public dataset, <!-- Verify-it-yourself: deactivation status is not a single public dataset,
@ -65,7 +62,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We handle the CMS-855 reactivation end to end.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We handle the CMS-855 reactivation end to end.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">We verify every field against current CMS requirements.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">We verify every field against current CMS requirements.</p>
<a href="https://performancewest.net/order/npi-reactivation?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Reactivate my enrollment →</a> <a href="https://performancewest.net/order/npi-reactivation?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-npi-reactivation@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Reactivate my enrollment →</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -6,15 +6,15 @@
<!-- Header --> <!-- Header -->
<tr><td style="background-color:#0f766e;background:linear-gradient(135deg,#0f766e 0%,#14b8a6 100%);padding:26px 28px;"> <tr><td style="background-color:#0f766e;background:linear-gradient(135deg,#0f766e 0%,#14b8a6 100%);padding:26px 28px;">
<img src="https://performancewest.net/images/logo-white.png" alt="Performance West" style="height:44px;margin-bottom:10px;display:block" /> <img src="https://performancewest.net/images/logo-white.png" alt="Performance West" style="height:44px;margin-bottom:10px;display:block" />
<h1 style="color:#fff;margin:0;font-size:22px;font-weight:700;font-family:Inter,system-ui,sans-serif;">NPPES Data Alert</h1> <h1 style="color:#fff;margin:0;font-size:22px;font-weight:700;font-family:Inter,system-ui,sans-serif;">NPPES Data Check</h1>
<p style="color:#ccfbf1;margin:6px 0 0;font-size:13px;font-family:Inter,system-ui,sans-serif;">Outdated registry information detected</p> <p style="color:#ccfbf1;margin:6px 0 0;font-size:13px;font-family:Inter,system-ui,sans-serif;">Keep your registry record current &amp; attested</p>
</td></tr> </td></tr>
<!-- Body --> <!-- Body -->
<tr><td class="pw-pad" style="padding:28px;font-family:Inter,system-ui,sans-serif;color:#1f2937;"> <tr><td class="pw-pad" style="padding:28px;font-family:Inter,system-ui,sans-serif;color:#1f2937;">
<p style="font-size:15px;margin:0 0 18px;line-height:1.5;">Hi {{ .Subscriber.Name }},</p> <p style="font-size:15px;margin:0 0 18px;line-height:1.5;">Hi {{ .Subscriber.Name }},</p>
<h2 style="font-size:19px;margin:0 0 14px;color:#0f172a;line-height:1.3;">Outdated NPPES data can hold up your payments</h2> <h2 style="font-size:19px;margin:0 0 14px;color:#0f172a;line-height:1.3;">Outdated NPPES data can hold up your payments</h2>
<p style="font-size:14px;line-height:1.7;margin:0 0 18px;">The public NPPES registry record for <strong>{{ .Subscriber.Attribs.practice }}</strong> (NPI {{ .Subscriber.Attribs.npi }}) appears <strong>out of date</strong>.</p> <p style="font-size:14px;line-height:1.7;margin:0 0 18px;">CMS requires every provider to keep their NPPES registry record current and to periodically attest to it. Records for <strong>{{ .Subscriber.Attribs.practice }}</strong> (NPI {{ .Subscriber.Attribs.npi }}) and most practices drift out of date over time &mdash; it is worth a 60-second check.</p>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #6ee7b7;border-radius:10px;padding:18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #6ee7b7;border-radius:10px;padding:18px;">
<h3 style="margin:0 0 10px;font-size:15px;color:#065f46;font-weight:700;">Why it matters</h3> <h3 style="margin:0 0 10px;font-size:15px;color:#065f46;font-weight:700;">Why it matters</h3>
@ -32,20 +32,17 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="font-size:13px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="font-size:13px;">
<tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:9px 0;color:#64748b;">NPI</td><td style="padding:9px 0;font-weight:700;text-align:right;color:#0f172a;">{{ .Subscriber.Attribs.npi }}</td></tr> <tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:9px 0;color:#64748b;">NPI</td><td style="padding:9px 0;font-weight:700;text-align:right;color:#0f172a;">{{ .Subscriber.Attribs.npi }}</td></tr>
<tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:9px 0;color:#64748b;">Registered to</td><td style="padding:9px 0;font-weight:600;text-align:right;color:#0f172a;">{{ .Subscriber.Attribs.practice }}</td></tr> <tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:9px 0;color:#64748b;">Registered to</td><td style="padding:9px 0;font-weight:600;text-align:right;color:#0f172a;">{{ .Subscriber.Attribs.practice }}</td></tr>
<tr><td style="padding:9px 0;color:#64748b;">Record status</td><td style="padding:9px 0;font-weight:700;text-align:right;color:#b91c1c;">FLAGGED OUT OF DATE</td></tr> <tr><td style="padding:9px 0;color:#64748b;">Attestation</td><td style="padding:9px 0;font-weight:700;text-align:right;color:#b45309;">PERIODIC REVIEW REQUIRED</td></tr>
</table> </table>
<p style="margin:10px 0 0;font-size:11px;color:#94a3b8;line-height:1.5;">Source: NPPES NPI Registry (npiregistry.cms.hhs.gov). Staleness flagged by our compliance monitoring &mdash; confirm on the official registry below.</p> <p style="margin:10px 0 0;font-size:11px;color:#94a3b8;line-height:1.5;">Source: NPPES NPI Registry (npiregistry.cms.hhs.gov). CMS requires periodic NPPES attestation &mdash; review your current record on the official registry below.</p>
</td></tr> </td></tr>
</table> </table>
</td></tr> </td></tr>
</table> </table>
<!-- Service fee --> <!-- Pricing reassurance (no number in email; shown on the order page) -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr> <p style="margin:0;font-size:13px;color:#475569;line-height:1.6;font-family:Inter,system-ui,sans-serif;">Simple, <strong>flat fee &mdash; shown up front</strong> before you pay anything. No logins, no hourly billing, no surprises.</p>
<td style="font-size:13px;color:#6b7280;">Our service fee to update it for you</td>
<td style="font-size:22px;font-weight:800;text-align:right;color:#047857;white-space:nowrap;">$349</td>
</tr></table>
</td></tr></table> </td></tr></table>
<!-- Verify-it-yourself: the NPPES registry is fully public, so the provider <!-- Verify-it-yourself: the NPPES registry is fully public, so the provider
@ -61,7 +58,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We update and attest your NPPES record for you.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We update and attest your NPPES record for you.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">Address, taxonomy, contacts, and authorized official.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">Address, taxonomy, contacts, and authorized official.</p>
<a href="https://performancewest.net/order/nppes-update?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Update my NPPES record →</a> <a href="https://performancewest.net/order/nppes-update?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-nppes-update@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Update my NPPES record →</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -25,7 +25,6 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;font-size:13px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;font-size:13px;">
<tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">NPI</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.npi }}</td></tr> <tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">NPI</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.npi }}</td></tr>
<tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">Practice</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.practice }}</td></tr> <tr style="border-bottom:1px solid #e5e7eb;"><td style="padding:10px 0;color:#6b7280;">Practice</td><td style="padding:10px 0;font-weight:600;text-align:right;">{{ .Subscriber.Attribs.practice }}</td></tr>
<tr><td style="padding:10px 0;color:#6b7280;">Our service fee</td><td style="padding:10px 0;font-weight:700;text-align:right;color:#047857;">$79/month</td></tr>
</table> </table>
<!-- Verify-it-yourself: the OIG LEIE and SAM exclusion lists are public and <!-- Verify-it-yourself: the OIG LEIE and SAM exclusion lists are public and
@ -42,8 +41,8 @@
<!-- CTA --> <!-- CTA -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We run and document your OIG/SAM exclusion screening.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We run and document your OIG/SAM exclusion screening.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">Monthly checks with an audit-ready record &mdash; $79/month, cancel anytime.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">Monthly checks with an audit-ready record &mdash; cancel anytime.</p>
<a href="https://performancewest.net/order/oig-sam-screening?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Set up exclusion screening →</a> <a href="https://performancewest.net/order/oig-sam-screening?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-oig-screening@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Set up exclusion screening →</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -50,14 +50,9 @@
<a href="https://data.cms.gov/tools/medicare-revalidation-list" style="display:inline-block;padding:10px 22px;background:#fff;border:1px solid #1d4ed8;color:#1d4ed8;font-weight:700;border-radius:8px;text-decoration:none;font-size:13px;">Verify on CMS.gov &#8599;</a> <a href="https://data.cms.gov/tools/medicare-revalidation-list" style="display:inline-block;padding:10px 22px;background:#fff;border:1px solid #1d4ed8;color:#1d4ed8;font-weight:700;border-radius:8px;text-decoration:none;font-size:13px;">Verify on CMS.gov &#8599;</a>
</td></tr></table> </td></tr></table>
<!-- Service fee --> <!-- Pricing reassurance (no number in email; shown on the order page) -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0"> <p style="margin:0;font-size:13px;color:#475569;line-height:1.6;font-family:Inter,system-ui,sans-serif;">Simple, <strong>flat fee &mdash; shown up front</strong> before you pay anything. No logins, no hourly billing, no surprises.</p>
<tr>
<td style="font-size:13px;color:#6b7280;font-family:Inter,system-ui,sans-serif;">Our service fee to file it for you</td>
<td style="font-size:22px;font-weight:800;text-align:right;color:#047857;font-family:Inter,system-ui,sans-serif;white-space:nowrap;">$599</td>
</tr>
</table>
</td></tr></table> </td></tr></table>
<!-- Convenience: no password / no login / no 2FA: we do the work, you just e-sign --> <!-- Convenience: no password / no login / no 2FA: we do the work, you just e-sign -->
@ -71,7 +66,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We file your PECOS revalidation for you, well before the deadline.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We file your PECOS revalidation for you, well before the deadline.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">Most filings submitted within 1-2 business days.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">Most filings submitted within 1-2 business days.</p>
<a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Start my revalidation →</a> <a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-reval-due-soon@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Start my revalidation →</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -50,14 +50,9 @@
<a href="https://data.cms.gov/tools/medicare-revalidation-list" style="display:inline-block;padding:10px 22px;background:#fff;border:1px solid #1d4ed8;color:#1d4ed8;font-weight:700;border-radius:8px;text-decoration:none;font-size:13px;">Verify on CMS.gov &#8599;</a> <a href="https://data.cms.gov/tools/medicare-revalidation-list" style="display:inline-block;padding:10px 22px;background:#fff;border:1px solid #1d4ed8;color:#1d4ed8;font-weight:700;border-radius:8px;text-decoration:none;font-size:13px;">Verify on CMS.gov &#8599;</a>
</td></tr></table> </td></tr></table>
<!-- Service fee --> <!-- Pricing reassurance (no number in email; shown on the order page) -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 18px;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0"> <p style="margin:0;font-size:13px;color:#475569;line-height:1.6;font-family:Inter,system-ui,sans-serif;">Simple, <strong>flat fee &mdash; shown up front</strong> before you pay anything. No logins, no hourly billing, no surprises.</p>
<tr>
<td style="font-size:13px;color:#6b7280;font-family:Inter,system-ui,sans-serif;">Our service fee to file it for you</td>
<td style="font-size:22px;font-weight:800;text-align:right;color:#047857;font-family:Inter,system-ui,sans-serif;white-space:nowrap;">$599</td>
</tr>
</table>
</td></tr></table> </td></tr></table>
<!-- Convenience: no password / no login / no 2FA: we do the work, you just e-sign --> <!-- Convenience: no password / no login / no 2FA: we do the work, you just e-sign -->
@ -71,7 +66,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We file your PECOS revalidation for you, before the clock runs out.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">We file your PECOS revalidation for you, before the clock runs out.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">Most filings submitted within 1-2 business days.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">Most filings submitted within 1-2 business days.</p>
<a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Start my revalidation →</a> <a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-reval-overdue@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Start my revalidation →</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -58,7 +58,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us get your past-due revalidation filed right away.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us get your past-due revalidation filed right away.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p>
<a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Handle my revalidation &rarr;</a> <a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-reval-overdue-personal@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Handle my revalidation &rarr;</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -57,7 +57,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us take revalidation off your plate &mdash; the sooner we start, the better.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us take revalidation off your plate &mdash; the sooner we start, the better.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p>
<a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Handle my revalidation &rarr;</a> <a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-reval-personal@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Handle my revalidation &rarr;</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -57,7 +57,7 @@
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:22px 0;"><tr><td style="background:#ecfdf5;border:2px solid #10b981;border-radius:10px;padding:18px;text-align:center;">
<p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us take revalidation off your plate &mdash; the sooner we start, the better.</p> <p style="font-size:14px;color:#065f46;margin:0 0 6px;font-weight:600;">Let us take revalidation off your plate &mdash; the sooner we start, the better.</p>
<p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p> <p style="font-size:12px;color:#047857;margin:0 0 14px;">We submit most filings within 1-2 business days, then track it through CMS processing to confirmation.</p>
<a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Handle my revalidation &rarr;</a> <a href="https://performancewest.net/order/npi-revalidation?npi={{ .Subscriber.Attribs.npi }}&utm_source=listmonk&utm_medium=email&utm_campaign=hc-reval-turnover@TrackLink" style="display:inline-block;padding:14px 40px;background:#10b981;color:#fff;font-weight:700;border-radius:8px;text-decoration:none;font-size:15px;">Handle my revalidation &rarr;</a>
</td></tr></table> </td></tr></table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;"> <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:18px 0;"><tr><td style="background:#f0f4f8;border-radius:8px;padding:16px;font-size:13px;color:#374151;line-height:1.6;">

View file

@ -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.

View file

@ -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).

View file

@ -45,7 +45,9 @@ OUT_DIR = os.path.join(os.path.dirname(__file__), "..", "data", "hc_campaigns")
# subject listmonk campaign subject line # subject listmonk campaign subject line
# template HTML file under data/hc_campaigns/ (the canonical body) # template HTML file under data/hc_campaigns/ (the canonical body)
# cta_path order page the CTA links to (NPI appended as ?npi=) # 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 # list_name listmonk-hc list this segment is warmed into
# campaign_name listmonk-hc campaign name prefix (dated per build) # campaign_name listmonk-hc campaign name prefix (dated per build)
# selector which warmup-CSV rows belong to this segment (see cron) # selector which warmup-CSV rows belong to this segment (see cron)
@ -90,7 +92,7 @@ SEGMENTS = {
"subject": "Are you screening for OIG / SAM exclusions?", "subject": "Are you screening for OIG / SAM exclusions?",
"template": "hc_oig_screening.html", "template": "hc_oig_screening.html",
"cta_path": "/order/oig-sam-screening", "cta_path": "/order/oig-sam-screening",
"price": "$299", "price": "$79/mo",
"list_name": "HC Warmup - OIG Screening", "list_name": "HC Warmup - OIG Screening",
"campaign_name": "HC Warmup - OIG Screening", "campaign_name": "HC Warmup - OIG Screening",
"selector": "institutional_verified", "selector": "institutional_verified",