Form Configuration & Lead Response Playbook — Cost-to-Business Calculator

Tool path: /tools/employer-caregiving-cost/ Audience: employer (HR / People Ops / Benefits leader / Owner-Partner / C-suite / Broker) Asset ID: employer-cost-methodology Asset category: employer Form type: Native HTML → lead-capture Edge Function (Supabase) Edge Function: lead-capture (POST to https://api.averyn.app/functions/v1/lead-capture) Database table: marketing.leads (asset = employer-cost-methodology) Email sending: Resend via pulse.averyncare.com


Form Fields

Field HTML id Type Required Stored in Notes
First name gate-name text Yes leads.name Greeting in welcome + drip emails
Work email gate-email email Yes leads.email Lead contact + dedup key
Role gate-role select (optional) No leads.meta.role One of owner | hr | csuite | broker | other. Powers role-tinted drip openers and the role-tailored outreach snippet in the team-notification email.
LinkedIn profile URL gate-linkedin url (optional) No leads.meta.linkedin_url Surfaced as a one-click button in the team-notification email for manual LinkedIn outreach.

Hidden / derived meta fields (computed by the page JS pre-submit):

Field Notes
org_size_band Derived from the calculator's employee-count input (e.g., <100, 100-500, 500-2000, 2000+)
industry The industry select on the calculator (sets caregiver-prevalence + turnover-cost coefficients)
avg_salary_band Derived from the salary input

All meta is bundled into a single meta JSON string and POSTed as meta=<JSON>. The lead-capture Edge Function parses it and stores it in leads.meta (jsonb).


Form Behavior

On submission:

  1. Page JS bundles role + linkedin + calculator inputs into a meta JSON string.
  2. Form POSTs name, email, asset=employer-cost-methodology, source=tool, meta, redirect=about:blank, plus all available utm_* params.
  3. lead-capture Edge Function upserts the lead in marketing.leads, sends the welcome email + the (employer-enriched) team-notification email via Resend.
  4. The page does NOT navigate — it inlines a success state and reveals a "Book a 30-min conversation" Cal.com button (post-gate-booking).
  5. Page fires plausible('lead_magnet_submit', { asset: 'employer-cost-methodology', source: 'tool' }) and a dataLayer.push for GTM, both tagged with the captured role.

Email Configuration

1. Team Notification (employer-enriched)

Setting Value
To hello@averyncare.com
From notifications@notifications.averyncare.com
Subject [EMPLOYER] Lead: Cost-to-Business Methodology — {name}
Body Standard lead summary + employer enrichment block: role tag, LinkedIn button, calculator-inputs dump, and a role-tailored copy/paste outreach snippet

The enrichment block is rendered by buildTeamNotification in _shared/marketingEmails.ts when asset.category === 'employer'. See EMPLOYER_OUTREACH_SNIPPETS in that file for the role-tailored snippet copy.

2. Welcome Email (lead receives)

Setting Value
To {email}
From hello@pulse.averyncare.com
Reply-to hello@averyncare.com
Subject Your Cost-to-Business Methodology

Welcome content delivers a link to the calculator's #methodology anchor plus three companion links (Three ways to offer Averyn, Gap checklist, Workforce-cost calc).

3. Activation drip — 5 stages

All drips defined in marketingEmails.ts and sent by the drip-send cron at ~9 AM ET daily.

Stage Day Subject Strategy Key links
0 (welcome) 0 Your Cost-to-Business Methodology Deliver methodology + 3 companion resources #methodology, gap checklist, workforce calc
1 3 Did the cost-to-business number land? Role-tinted check-in + workforce-cost companion CTA /tools/workforce-caregiving-cost/
2 10 Three ways to offer Averyn — and the sharpest math Structural comparison with HCE emphasis /employers/insights/types-of-caregiver-employee-benefits/
3 21 15 questions: how caregiver-friendly is your stack? Gap checklist (different angle on the same problem) /employers/insights/caregiver-benefits-gap/
4 35 Want to talk it through? 30 minutes is usually enough 30-min conversation booking Cal.com link
5 56 Still on your radar? Soft check-in before shifting to monthly nurture Calculator + Cal.com

Role-tinted openers (Stages 1–5) read meta.role and prepend a one-sentence opener tuned to the role. See employerRoleOpener() in marketingEmails.ts.

4. Graduation into nurture-employer (automatic)

After Stage 5 (Day ~57), drip-send auto-enrolls the lead into the nurture-employer pool with drip_stage = 0. The pool runs 13 calendar-aware topics on a 30-day cadence, starting 30 days after graduation. Topics are aligned to the benefits planning cycle (budget season → OE ramp → OE → new-year → mid-year).


Lead Response Playbook

Employer leads are mid-funnel, decision-aware, evaluating. They self-selected by running a cost calculator AND opted in for the methodology. They are not yet ready to buy but they are open to a conversation.

Immediate (automated — already configured)

Day 0–1: Manual triage

If the lead replies or engages


Metrics to Track

Metric Where Target
Form submission rate Plausible (lead_magnet_submit with source=tool) > 8% of calculator users
Welcome email open rate Resend dashboard > 55% (employer audiences open more than family)
Day 3 follow-up click rate Resend dashboard > 22%
Cal.com booking rate (Day 35 email) Cal.com + Resend > 4%
Day 56 reply rate Manual > 6%
LinkedIn URL capture rate Supabase leads.meta.linkedin_url IS NOT NULL > 35% of employer leads
Pilot/voluntary conversion (90 days) CRM Track separately by role

linkedin-leadgen-webhook contract — STUB (Phase 2)

Status: Not implemented. Deferred to Phase 2 (post-launch, contingent on starting paid LinkedIn ad campaigns). Documented here so the integration can be wired without re-thinking the data contract.

Trigger: A LinkedIn Lead Gen Forms ad submission (LinkedIn Ads Manager) routes to a dedicated Supabase Edge Function linkedin-leadgen-webhook.

Why a separate Edge Function: LinkedIn's webhook signature, retry behavior, and lead-sync API contract differ from a native HTML form post. Keeping it isolated from lead-capture avoids polluting the working family-side flow with LinkedIn-specific verification logic.

Proposed endpoint: POST https://api.averyn.app/functions/v1/linkedin-leadgen-webhook

Expected payload (from LinkedIn Lead Sync API):

{
  "leadGenFormResponse": {
    "leadGenFormId": "urn:li:leadGenForm:<id>",
    "formId": "<our internal form id, e.g. employer-cost-methodology-linkedin>",
    "submittedAt": "2026-05-27T13:45:00Z",
    "answers": [
      { "questionId": "first_name", "answer": "Jane" },
      { "questionId": "email_address", "answer": "jane@example.com" },
      { "questionId": "current_position", "answer": "VP People Operations" },
      { "questionId": "company_name", "answer": "Example Co." },
      { "questionId": "company_size", "answer": "501-1000" }
    ],
    "linkedinProfileUrl": "https://www.linkedin.com/in/janedoe"
  }
}

Normalization (inside the webhook handler):

LinkedIn field Maps to Notes
first_name leads.name If LinkedIn provides full name, take the first token
email_address leads.email Required for upsert
current_position leads.meta.role (derived) Map keyword-match: "founder"/"owner"/"partner" → owner; "HR"/"People"/"Benefits"/"Talent" → hr; "CEO"/"CFO"/"COO" → csuite; broker firms → broker; else other
company_name leads.meta.company_name New meta key
company_size leads.meta.org_size_band Normalize to the same bands as the calculator form
linkedinProfileUrl leads.meta.linkedin_url Direct copy
formId leads.asset Set based on which LinkedIn ad campaign this lead came from (e.g., employer-cost-methodology)
(LinkedIn ad campaign) leads.utm_* Map LinkedIn creativeId/campaignId to UTM fields for attribution parity with site forms

Output behavior (identical to lead-capture):

  1. Upsert into marketing.leads (same dedup logic on email,asset).
  2. Call buildWelcomeEmail + buildTeamNotification from _shared/marketingEmails.ts — both already meta-aware, so the role-tinted welcome and the enriched team notification render correctly without changes.
  3. The lead enters the same activation drip → nurture-employer graduation chain as a site-form lead. No drip-engine changes needed.

Security: Verify LinkedIn's X-LinkedIn-Signature header against the webhook secret stored in Supabase Edge Function secrets (LINKEDIN_WEBHOOK_SECRET). Reject on mismatch.

When to build: The day paid LinkedIn ads start. Until then, the manual LinkedIn-URL capture field on the calculator form covers the same data path for organic conversions, and the manual outreach snippet in the team-notification email lets you act on it the same day.


Future Enhancements