Skip to main content

PARTIAL SUPERSEDE 2026-05-02: the FuneralWiseAI setup amounts proposed here ($949 USD / $1,295 CAD) were revised to $745 USD / $995 CAD in decisions/2026-05-02-vertical-setup-pricing-revision.md. Recurring monthly amounts ($199/$249) are unchanged. The broader CAD-introduction strategy (round per-currency Stripe prices, not FX auto-conversion; geo-IP default; toggle UI) still stands.

CAD pricing — round prices per currency (2026-04-27)

Context

Cold-email outreach is being prepared for two markets: churches (via churchwiseai.com) and funeral homes (via funeralwiseai.com). Funeral cold-email targeting will include Canadian funeral homes from the start. ChurchWiseAI also has Canadian customers (PewSearch's directory contains ~24K Canadian churches).

Pricing is currently USD-only. Three options were considered:

  1. Single USD price, Stripe Adaptive Pricing. Stripe auto-converts to local currency at checkout using current FX. Customers see messy non-round numbers (e.g., $1,213.44 CAD). Ops simplicity but bad UX.
  2. Round CAD price tracking spot FX. Independent CAD Price object per product (e.g., $1,295 CAD setup). Defensible at any FX, neutral positioning, FX cushion.
  3. Round CAD price below spot FX. Independent CAD Price object priced as a small Canadian concession (e.g., $1,249 CAD setup). "Goodwill positioning" but loses margin if CAD weakens.

Decision

Use separate round CAD Price objects per Stripe Product. Default to "tracks spot FX with small upward buffer" for FX cushion, optionally drop slightly below spot FX as a Canadian-market concession on individual SKUs.

Adopted price grid

ProductUSDCADNote
FuneralWiseAI setup (one-time)$949$1,295At-FX (~1.36). Buffer for CAD volatility.
FuneralWiseAI monthly$199$249Round CAD, slight margin protection.
ChurchWiseAI Starter$14.95$19.95
ChurchWiseAI Pro$29.95$39.95
ChurchWiseAI Suite$59.95$79.95
PewSearch Premium$6.95$9.95
SermonWise$19.95$24.95

USD setup for FuneralWiseAI moves $999 → $949 in the same change (sub-$1K psychology + makes the CAD pairing clean). All other USD prices unchanged.

Display logic

  • USD/CAD toggle on every pricing page (/pricing, /funeralwiseai/pricing, /social/pricing, /sermons/pricing).
  • Default by Vercel request.geo.country === 'CA'.
  • User toggle persists in localStorage.
  • For outreach prospects, currency is also persisted on the outreach_contacts row so the cold-email demo page renders in the prospect's currency.

Tax

  • Stay below CAD $30,000/year revenue from Canadian customers — "small supplier" exemption. No GST/HST registration required.
  • Re-evaluate at $30K CAD/year. At that point, register with CRA, enable Stripe Tax for CA, and add tax-inclusive vs tax-exclusive logic per province.

Why

  • Standard SaaS pattern. Apple, Spotify, Adobe all use round per-region prices, not literal FX conversion. Customers expect this.
  • Operational simplicity. No daily FX monitoring. No ratcheting price changes. Stripe Price objects are static and explicit.
  • Defensible positioning. Round CAD numbers are easy to communicate in cold email and on the pricing page. "Adaptive" auto-FX prices look amateurish.
  • FX volatility is real. CAD has moved between 1.34 and 1.42 vs USD over the past 12 months. Locking USD-equivalent to a Canadian customer would burn margin in a downturn.

Implementation status — BLOCKED

This decision is approved but not yet shipped. Implementation is blocked on the in-flight Stripe refactor work owned by another agent in C:\dev\churchwiseai-web (working tree has uncommitted changes to src/lib/pricing.ts and recent commits referenced the Stripe tierForPriceId resolver and Premium Listing price changes).

Implementation queue (post-Stripe-refactor):

  1. Add cad price block per tier in knowledge/data/pricing.yaml (canonical source).
  2. pnpm derive from C:\dev\knowledge to propagate to src/lib/pricing.ts, PRICING.md, product_knowledge.
  3. Stripe live mode: create CAD Price objects against existing Products. Founder-confirmed before each stripe products write. Add new priceIdCad fields to src/lib/pricing.ts.
  4. Currency toggle component on the four pricing pages above. Default by Vercel geo.
  5. Currency wiring in /api/stripe/church-checkout and /api/stripe/checkout-embedded. Server-side picks the right Price ID by currency.
  6. Schema: ALTER TABLE outreach_contacts ADD COLUMN currency TEXT DEFAULT 'USD'.

Re-evaluation triggers

  • CRA $30K/year threshold reached → register for GST/HST + enable Stripe Tax.
  • CAD spot FX moves outside [1.30, 1.45] for >30 days → revisit specific CAD numbers.
  • Material customer feedback that any specific price feels off-market.

References

  • Plan: C:\Users\johnm\.claude\plans\here-s-the-scoop-i-wild-swing.md (Phase B / D4)
  • Pricing source of truth: knowledge/data/pricing.yaml
  • Active workstream: stripe-upgrade-guard-2026-04-24 and fa-082-multi-item-stripe-2026-04-24