Estym8 DocsEstym8 Home

Upsell strategy: gated access → paid plan

Product context: Estym8 is built from scratch as an AI-first construction preconstruction platform—not a legacy takeoff stack with AI bolted on. AI runs across the product: bid-package ingestion and classification, multi-model takeoff and vision, plan intelligence, cross-file synthesis, Estee, estimate-to-submittal draft review, and optimization recommendations. Canonical framing: AI-first positioning.

Open [ ] checklist items from an earlier draft are tracked in the engineering backlog (repo-only). The body below is the canonical messaging guide.

Goal: Convert accounts that are signed up and engaged but cannot run takeoffs (no active plan) into paying subscribers (Solo or Studio), and reinforce upgrade after they see value.

Product reality (code): New users register with freeEstimatesRemaining: 0. Takeoffs run only when checkTrialStatus allows: verified email plus one of admin, demo user, approved tester, beta lifetime access, or paidAccessAt (manual / billing grant). Otherwise jobs and estimate-generate return 403 with trialCheck.message (e.g. “Takeoffs require an active plan. See pricing or contact us to get access.”). The legacy per-signup estimate grant path is removed (initializeFreeTrial / useFreeEstimate are deprecated no-ops).

Pricing reference: Pricing one-pager · Full strategy: Pricing strategy

Note: In closed beta (ESTYM8_TESTING_MODE=true), most signups are request-access / waitlist; grant approvedForTestingAt (or use the demo account) so testers can run plan sets without paying. The same messaging applies when you open signup: clear path to “get access” (pricing, contact, checkout when live).


1. User journey and conversion moments

StageUser stateBest upsell / activation moment
Signed up, email not verifiedCannot run takeoffsResend / inbox copy: verify to continue (inform, not sell).
Verified, no plan / approvalfreeEstimatesRemaining === 0 in API; upgrade bannersGate moment: project creation, PDF upload, or API 403 — point to /pricing and contact / request access.
First estimate completes (they have access)Can run more while access holdsValue moment: reinforce time saved; optional line about staying on a plan or upgrading tier.
Returning, still no planSame gateEvery blocked action: one primary CTA (See plans / Contact us) plus short reason.

Principle: Do not rely only on “you used your freebie.” Lead with “You need an active plan to run takeoffs” and, when they have seen an output, pair value (“hours saved”) with next step (plan / contact).


2. Touchpoints (current and recommended)

Already in place (align copy with messages, not “free trial ended” unless UI still says that)

  • Dashboard / project: When the client sees freeEstimatesRemaining === 0, upgrade CTAs replace primary actions; keep copy consistent with trialCheck.message (active plan / pricing / contact).
  • API: Jobs and estimate-generate return 403 with message from checkTrialStatus and freeEstimatesRemaining: 0 when blocked. Toasts should show message when present.
  • Pricing page: /pricing — tiers, ROI, Contact / early access until self-serve checkout exists.

Recommended additions

  1. Value-moment CTA (after first estimate completes, for paying or approved users)
    Reinforce outcome: “That’s 1–3 days of takeoff in 15–45 minutes.” Optional: “Stay on Solo/Studio to keep this cadence every month.”

  2. Pricing hero for gated visitors
    Headline/supporting copy should assume plan required, not “your included run is used,” unless product marketing explicitly reintroduces a signup grant.

  3. Email (optional)
    In “Your estimate is ready,” add one line for opted-in users: unlock ongoing takeoffs / see plans → https://estym8.ai/pricing.

  4. Operator workflow
    Document that granting access = set paidAccessAt and/or approvedForTestingAt in admin or DB; /api/auth/me exposes freeEstimatesRemaining: 1 to the client when those flags apply so upgrade chrome stays off for entitled users.


3. Messaging guidelines

  • Value-first when they have a result; clarity-first when they are blocked (why + one CTA).
  • Concrete next step: “See plans,” “Contact us,” “Request access” → /pricing or your testing-mode flow.
  • Price anchor when relevant: “From $179/mo (Solo),” “One saved day pays for the month.”
  • Single primary CTA per surface.

4. Copy reference (in-app and sales)

Gate: no active plan (dashboard / project / upload)

ElementCopy direction
HeadlineRun takeoffs on your plan
SubcopyTakeoffs need an active plan—or approved access in beta. See pricing or contact us to get started.
Primary CTASee plans / Contact us

Value moment (after a successful estimate)

ElementCopy direction
HeadlineThat’s 1–3 days of work in 15–45 minutes.
SubcopyKeep this workflow on Solo or Studio—from $179/mo (1 seat).
Primary CTASee plans

Pricing page

ElementCopy direction
HeroTurn 3 days into 15 minutes—every time.
SubcopyPlans built for MEP estimators; contact us for early access if checkout is not live yet.
Solo / Studio CTAsMatch live purchase or “Contact us” state.

API / toast

LocationCopy direction
403Surface server message first; fall back to short “You need an active plan to run takeoffs.” + link to pricing.

4b–4c. Follow-up email and SMS (opt-in only)

Same structure as before: only for users with notifyEmail / notifySMS. Compliance suffix on SMS is unchanged.

  • Estimate ready email: Optional line linking to pricing / plan value (keep aligned with whatever gating exists in product).
  • SMS: Short “See plans: estym8.ai/pricing” before compliance suffix if appropriate.

5. Implementation checklist

  • Pricing page: Tiers and contact/early-access CTA.
  • Gate UX: Upgrade or blocked states when freeEstimatesRemaining === 0 for non-entitled users.
  • Copy audit: Replace leftover signup-grant / trial wording in UI with plan / access language where gating is paid-first.
  • 403 handling: Client shows message from API everywhere jobs or generate can return 403.
  • Email: Optional upgrade line in “estimate ready” for opted-in users.
  • Checkout (later): Self-serve purchase sets paidAccessAt (or subscription) automatically.

6. Success metrics

  • Activation: % of verified signups who get paidAccessAt or approval and complete ≥1 takeoff.
  • Conversion: % of gated users (403 or upgrade surface) who visit /pricing or contact within 7 days.
  • Revenue: Time from signup to paid grant or checkout.

Track in analytics; tune placement of value moment vs. gate-only messaging.