Skip to main content

Monetization & Tier Packaging (v1)

FieldValue
StatusIn execution β€” P2 packaging met; P3 controls shipped (hard/monitor toggles, tier_gate logs); pilot hard enforce + Stripe alignment still TBD
OwnerScott Asher
Target reposattunelogic-api, attunelogic-landing, attunelogic-service
Depends onStripe Billing Foundation (already in flight)
RelatedAI Agent for Trucking β€” v1 (per-tenant cost ceiling reused here) Β· Tier deliverability checklist
Last updated2026-04-30

Reading order: start here for the what packaging and why. For the how to wire it up on Stripe + feature flags, jump to the Stripe Billing Foundation proposal.


TL;DR​

Ship AttuneLogic as a three-tier public ladder for trucking (Starter, Growth, Pro) plus a custom Enterprise quote, priced 20–35% below mid-market incumbents (Jobber, Housecall Pro, Workiz, Truckpedia) while matching or beating their feature set. The platform's single biggest differentiator β€” the conversational AI Agent β€” is bundled into Pro with a token cap and metered overages, using the per-tenant monthlyCostCeilingUsd infrastructure already designed in the AI agent proposal.

Gating is implemented through the feature-flag registry (src/services/config/default-configs/feature-flags.js) via TIER_DEFAULTS + tenant overrides. Numeric caps use TIER_LIMITS and requireSeatCap / controller checks (default monitor; hard mode via SEAT_CAP_HARD_ENFORCE or per-tenant billing.enforcementMode). Existing FOUNDING_MONTHLY customers stay on legacy pricing; VIP / full-product grandfather is a separate switch: Customer.grandfatherFullAccess (see tier deliverability).

Scope note (v1): This proposal covers trucking only. The platform supports service / repair / home-service verticals under Customer.appType, but public pricing, marketing positioning, and sales collateral are trucking-first for launch. Service-vertical monetization will ship as a v2 addendum once the trucking ladder is validated against paying customers. Feature flags that gate service-only modules (jobs.quotes, inventory, employees, etc.) stay at their registry defaults and are not part of tier gating in v1.

Three non-negotiable guardrails for launch:

  1. No existing customer gets locked out. Enforcement is new-customer-only at first, behind a feature flag. Grandfather plans stay grandfathered.
  2. Core operational modules are NEVER gated by tier. jobs.enabled, dispatch.enabled, schedule.enabled, clients.enabled, invoices.enabled, jobs.legs.enabled, manifests.enabled must remain default-on across all paid tiers. If a customer can't dispatch a load, the product is broken β€” not "upsold."
  3. AI cost ceiling is always enforced. The per-tenant monthly USD ceiling and the platform-wide daily ceiling from the AI agent proposal are active even on Enterprise tiers.

Stakeholder review checklist​

  • Founder / Product β€” sign off on the final tier prices, seat caps, and naming
  • Sales / GTM β€” confirm Enterprise floor ($1,500/mo) and negotiation room
  • Finance β€” validate gross margin on Pro tier given AI bundled tokens
  • Engineering β€” confirm TIER_DEFAULTS map + entitlement switch-over is a one-sprint lift
  • Customer success β€” confirm Founding-customer grandfather policy
  • Legal β€” review monthly-to-monthly language and cancellation policy on the public pricing page

Context​

What already exists in the codebase​

This proposal is 90% packaging decisions and 10% code, because the infrastructure is largely built:

CapabilityLocationCurrent state
Four-tier scaffoldsrc/services/constants/billing β†’ PLAN_TIERS.tier1..tier4Defined. tier4 reserved for superAdmin.
Plan catalogsrc/services/billing/catalog.js4 offers defined: FOUNDING_MONTHLY (legacy), STARTER_MONTHLY, GROWTH_MONTHLY, PRO_MONTHLY β€” mapped to tier1/tier1/tier2/tier3.
Feature registrysrc/services/config/default-configs/feature-flags.js~30 module + sub-module flags. All GA, all default-on except jobs.liveUpdates.enabled (default-off).
Tier defaultsSame file, TIER_DEFAULTSEmpty { tier1: {}, tier2: {}, tier3: {}, tier4: {} }. This is the single lever this proposal fills in.
Entitlement evaluationsrc/services/billing/index.js β†’ buildBillingEntitlementsReturns monitorOnly: true, allowProductAccess: true. Nothing enforced today.
AI cost ceilingaiAgent.monthlyCostCeilingUsd config block (proposed)Part of the AI agent proposal. Reused here.
Industry verticalCustomer.appTypeAlready separate from tier. trucking / service / home-service.

What the market charges today​

Verified against live pricing pages (April 2026):

Field service mid-market​

ToolEntryMidTop
JobberCore $39/mo (1 user)Connect Team $169/mo (5 users)Grow Team $349 (10) Β· Plus $599 (15)
Housecall ProBasic $79/mo (1)Essentials $189/mo (5)MAX $329/mo (8), +$35/user
WorkizKickstart $225/mo (3)Standard $275/mo (5)Pro $325/mo (5) Β· Ultimate custom
Service FusionStarter $245/moPlus $382/moPro $627/mo β€” unlimited users all tiers
ServiceM8Starter $29/mo (50 jobs)Growing $79/mo (150)Premium $149 (500) Β· Premium+ $349 (1500+)
FieldEdge$100/mo office user + $125/mo field techβ€”Custom
ServiceTitanStarter $245/tech/moEssentials $325/tech/moThe Works $398+/tech/mo Β· $5k–50k implementation Β· 12 mo minimum

Trucking / TMS​

ToolPricing
Motive (KeepTruckin)$20/truck Starter, $35/truck Pro + ELD hardware
Super Dispatch (Carrier Pro)$55/seat/mo β€” counts dispatchers AND drivers
Truckbase$290/mo minimum, annual
LoadPro$60 owner-op Β· $400 small fleet Β· $750 mid Β· $1,250 large
Truckpedia$239.99–$299/mo (up to 10 trucks), $30/extra truck

Competitive takeaways​

  1. The $149–$349 band is the mid-market gravity well. Jobber Connect Team ($169), Housecall Essentials ($189), Workiz Standard ($275), Service Fusion Starter ($245). This is where 80% of field-service customers land.
  2. Service Fusion's unlimited-users angle is the single biggest pricing threat at $245/mo. Counter by making field users (drivers, techs) unlimited and only capping office seats β€” which matches our ICP's actual usage pattern.
  3. No incumbent bundles a conversational AI agent at mid-market prices. Workiz Pro ($325) bundles narrow AI (scheduling hints, AI phone answering) but not a full tool-using agent. This is our wedge.
  4. ServiceTitan is 10–30Γ— more expensive with contracts and implementation fees. We win enterprise deals on price, speed-to-live, and modern UX.
  5. Trucking benchmark for our Growth tier is Truckpedia Professional ($239.99–$299 for up to 10 trucks) and Super Dispatch ($55 Γ— 5 seats = $275). Our $249 Growth tier clears both.

Proposed public pricing​

All prices in USD. Monthly billing; annual billing saves ~15% (implemented via a parallel Stripe price set, not in scope of this doc). Payment processing fees pass through at cost.

Tier 1 β€” Starter β€” $99/mo​

"Replace your spreadsheets."

  • Office seats: 3 (admins, dispatchers, back-office)
  • Driver seats: up to 25 on the mobile app
  • Core modules on: jobs, dispatch, schedule, clients, invoices, drivers, jobs.accessories, jobs.tasks, jobs.communications, jobs.legs, manifests.
  • Gated off: jobs.liveUpdates, routing (route optimization), reports limited to 3 saved reports, aiAgent, audit log viewing, settings.advanced, webhooks (outbound), public API tokens, custom notification templates beyond 5.
  • Support: Email, 48h business-day response.
  • Annual equivalent: ~$84/mo ($1,008/yr).

Positioning vs market:

  • Beats Jobber Core ($39, 1 user) and Housecall Pro Basic ($79, 1 user) on seats by 3Γ—.
  • Beats Workiz Kickstart ($225, 3 users, no driver cap framing) on price by 56%.
  • Crushes Motive Pro ($35 Γ— 25 trucks = $875) on cost by ~$776/mo β€” they charge per-truck, we charge a flat $99 for the same capacity.
  • Beats Truckpedia ($239.99, 10 trucks) on price AND driver capacity (2.5Γ— drivers).
  • The 25-driver cap is intentional: it's a generous "serious small carrier" cap that discourages hobbyists while giving small fleets room to grow before upgrading.

Tier 2 β€” Growth β€” $249/mo​

"Run a real operation." ← 80% of customers will land here.

  • Office seats: 10
  • Driver seats: unlimited
  • Everything in Starter, plus:
    • jobs.liveUpdates ON (real-time job + leg updates)
    • routing.enabled ON (route mapping + mileage)
    • reports.enabled fully on (unlimited saved reports)
    • settings.taskTemplates, settings.notificationTemplates unlimited
    • QR codes, public lead intake
    • CSV export for accounting (QuickBooks-compatible). Two-way QuickBooks sync, outbound webhooks, and Google Calendar sync are deferred β€” see Feature Roadmap Index.
  • Gated off: aiAgent, audit log, SSO, settings.advanced, outbound webhooks, public API (read or write), QuickBooks two-way sync, Google Calendar sync.
  • Support: Email + chat, 24h business-day response.
  • Annual equivalent: ~$212/mo ($2,544/yr).

Positioning vs market:

  • Undercuts Jobber Grow Team ($349, 10 users) by $100 while matching seats.
  • Beats Super Dispatch ($55/seat Γ— 10 seats = $550) by $300 with unlimited drivers.
  • Beats LoadPro Small Fleet ($400/mo) by $150.
  • Beats Truckbase ($290 minimum, annual-only) by $40 with month-to-month flexibility.

Tier 3 β€” Pro β€” Waitlist (not self-serve in v1)​

"AI-powered dispatch."

Pro is a waitlist card on the public pricing page, not a self-serve plan, until the AI Agent is production-ready. The pricing page renders an AIWaitlistCard in the Pro slot that drops visitors into AIWaitlistModal (a thin wrapper over ContactModal that submits type: "ai_waitlist" leads). The planned self-serve price and scope when the card flips back on:

  • Price at launch: $549/mo (subject to re-benchmarking once AI is in beta).
  • Office seats: 25
  • Driver seats: unlimited
  • Everything in Growth, plus:
    • aiAgent.enabled ON with $75/mo in bundled Anthropic tokens, overage metered at cost + 25% (per the AI agent proposal's monthlyCostCeilingUsd mechanism)
    • Audit log access (AuditLog model already landed β€” see security proposal)
    • settings.advanced ON
    • Priority integrations (QuickBooks Desktop, Stripe Connect, Twilio BYO)
  • Deferred for v1, with build specs:
  • Gated off: SAML SSO, dedicated CSM, custom uptime SLA, custom AI cost ceiling beyond default.
  • Support at launch: Email + chat, 8h business-day response, priority queue.
  • Annual equivalent at launch: ~$467/mo ($5,604/yr).

Why a waitlist card instead of self-serve:

  • The AI Agent is still in active development. Listing Pro as a self-serve plan that advertises an AI-first experience would set expectations we can't meet.
  • The waitlist captures warm leads, gives product a concrete cohort to invite into the private beta, and signals honestly that AI is Pro-exclusive when it ships.
  • All waitlist leads land on Lead with type: "ai_waitlist" so sales can segment them from general demo requests. See attunelogic-landing/src/pages/Home/AIWaitlistModal.jsx and attunelogic-api/src/models/Lead.js.

Positioning once Pro goes self-serve:

  • Undercuts Jobber Plus ($599, 15 users, no AI) by $50 and adds 10 seats + AI.
  • Beats Housecall MAX ($329, 8 users) at a higher price point with 3Γ— seats + real AI.
  • Massively undercuts ServiceTitan Essentials ($3,250/mo for 10 techs).
  • This tier carries the margin. Sales conversations aim here.

Enterprise β€” Custom β€” starts at $1,500/mo​

"Run your fleet at scale."

  • Unlimited office seats
  • SAML SSO
  • Custom AI monthly cost ceiling (negotiable, with platform-wide daily ceiling still enforced)
  • Dedicated CSM + onboarding + training
  • Uptime SLA (99.9% target)
  • Custom integrations + custom contract
  • Audit log retention + export guarantees
  • Optional: private deployment, dedicated support Slack

Positioning: Massively below ServiceTitan ($20k/mo for a 50-tech shop), McLeod/Trimble ($5k+/mo). Win on price, speed-to-live, and modern UX.

Add-ons (independent of tier)​

Add-onPriceNotes
Extra office seat$15/user/moBelow Jobber ($29) and Housecall ($35). Below Super Dispatch ($55).
Extra driver seat (Starter only)$5/driver/moApplies once you exceed 25 drivers on Starter. Most customers upgrade to Growth at this point.
AI token overageCost + 25% margin, meteredPro tier only. Triggers circuit breaker at per-tenant ceiling.
QuickBooks CSV exportIncluded on GrowthCovers the common-case accounting handoff without the overhead of a two-way sync. Full QuickBooks sync is on the roadmap.
Premium integration pack$49–99/mo eachSamsara, Geotab, specific ELD vendors. Roadmap.
Marketing automation$79/moRoadmap. Parity with Jobber's Marketing Suite.
Dedicated phone line + SMS$29/mo + usageCompetitive with ServiceM8 Phone ($19) β€” ship later.

Google Calendar sync is not offered as a paid add-on in v1 β€” it's tracked on the roadmap with a build spec instead. See Google Calendar Sync (v1).


Grandfathering policy​

  • All FOUNDING_MONTHLY customers are grandfathered at their current price FOREVER as long as the subscription remains continuously active. Code already marks FOUNDING_MONTHLY as isLegacy: true.
  • STARTER_MONTHLY, GROWTH_MONTHLY, PRO_MONTHLY existing customers (if any) stay at their current price for 12 months, then are given 60 days notice before being moved to the new equivalent tier.
  • Feature gating is not retroactively applied to grandfathered customers. They keep whatever modules they had access to on the day this proposal ships.
  • Optional future bookkeeping: billing.grandfathered + billing.grandfatheredUntil on Customer.billing for price cohorts (not yet required for launch).
  • Full product access (VIP / pilot / β€œnever tier-tied”) is implemented today as Customer.grandfatherFullAccess (boolean): all GA flags resolve on, tier numeric caps treated as unlimited. Super Admin toggles it per tenant; see Tier deliverability.

Decisions this proposal locks in​

These are the product decisions. All are reversible, but reversing any of them is more expensive than making them correctly now.

  1. Flat-per-tier with seat caps, NOT per-seat. Keeps invoices predictable for customers. Seat overage add-ons handle growth without forcing tier upgrades. Matches current BILLING_MODEL.FLAT_ORG.
  2. Driver seats are unlimited on Growth and Pro, capped at 25 on Starter. The Starter cap is generous enough for serious small carriers (most competitors charge per-truck or per-seat at this scale, meaning Starter is a massive discount vs. market) and acts as a natural upgrade prompt at the point customers start seeing clear ROI from the product.
  3. Office seats (dispatchers, admins, managers) are always capped. 3 / 10 / 25 across Starter / Growth / Pro.
  4. AI Agent is Pro-only with bundled tokens + metered overage. NOT pass-through-only (too much checkout friction), NOT fully-included-free (too much margin risk). Hybrid matches the infrastructure already designed.
  5. Core workflow modules are NEVER gated by tier. jobs, dispatch, schedule, clients, invoices, jobs.legs, manifests stay default-on for all paid tiers. Gating these would break the product.
  6. Enterprise is not published. "Starts at $1,500/mo β€” contact sales."
  7. v1 public pricing is trucking-only. Service / repair / home-service verticals remain supported by the platform (via Customer.appType) but are out of scope for public pricing and marketing until a v2 packaging pass. Service-only feature flags (jobs.quotes, inventory, employees, recipes) are not part of the v1 tier gating map.

Feature gating map (new TIER_DEFAULTS values)​

This is the minimal set of overrides to populate in src/services/config/default-configs/feature-flags.js. Everything not listed here keeps its registry default (mostly default-on).

const TIER_DEFAULTS = Object.freeze({
tier1: {
"jobs.liveUpdates.enabled": false,
"routing.enabled": false,
"reports.enabled": true, // limited by count server-side
"aiAgent.enabled": false,
"settings.advanced.enabled": false,
"audit.enabled": false, // new flag (Phase 1)
"api.public.enabled": false, // new flag (Phase 1)
"webhooks.outbound.enabled": false, // new flag (Phase 1)
"sso.enabled": false, // new flag (Phase 1)
},
tier2: {
"jobs.liveUpdates.enabled": true,
"routing.enabled": true,
"aiAgent.enabled": false,
"settings.advanced.enabled": false,
"audit.enabled": false,
"api.public.enabled": true, // read-only enforced in middleware
"webhooks.outbound.enabled": true, // capped at 5 endpoints
"sso.enabled": false,
},
tier3: {
"jobs.liveUpdates.enabled": true,
"routing.enabled": true,
"aiAgent.enabled": true,
"settings.advanced.enabled": true,
"audit.enabled": true,
"api.public.enabled": true, // read + write
"webhooks.outbound.enabled": true, // unlimited
"sso.enabled": true, // OAuth SSO (Google/MS). SAML = Enterprise.
},
tier4: {
// superAdmin-only, full unrestricted access. No changes needed.
},
});

New feature-flag keys to register in FEATURE_REGISTRY during Phase 1 of rollout:

  • aiAgent.enabled (beta, tenantAdminToggleable) β€” already planned in AI agent proposal
  • audit.enabled (GA, default false)
  • api.public.enabled (GA, default false)
  • webhooks.outbound.enabled (GA, default false)
  • sso.enabled (GA, default false)

Seat caps and count-based limits (office seats, driver seats, saved reports, webhook endpoints, notification templates) are NOT feature flags β€” they're numeric limits enforced in the relevant controllers and surfaced through the tierLimits object returned by buildBillingEntitlements.

Driver-seat enforcement (Starter only) happens at driver creation time:

  • On POST /api/v1/drivers (or equivalent), count the tenant's active drivers via an indexed query scoped to parentCompany.
  • If activeDriverCount >= tierLimits.driverSeats and tierLimits.driverSeats !== null, return a 402 with a friendly upgrade message that links to the billing portal.
  • Soft-deleted drivers (deletedAt set) do NOT count toward the cap.
  • Admins can still view and re-activate drivers above the cap (so downgrade scenarios don't brick the account), but cannot create new ones.
  • The cap is advisory in monitor-only mode (Phase 1) β€” we log the intended block + metric but allow creation. Hard-block flips on in Phase 2 for new customers only.

Entitlement enforcement β€” staged rollout​

Current buildBillingEntitlements / getEntitlementsForCustomer return (v1 shipped shape):

{
monitorOnly: Boolean, // true when seat-cap mode !== "hard" (numeric caps advisory vs blocking)
seatCapEnforcementMode: "hard" | "monitor",
grandfatherFullAccess: Boolean, // Customer.grandfatherFullAccess β€” unlimited caps + GA-on resolver path
allowProductAccess: Boolean, // today: true unless billing attention logic evolves
requiresBillingAttention: Boolean, // e.g. past_due / canceled β€” surface in billing UI
planTier: "tier1" | "tier2" | "tier3" | "tier4",
releaseChannel: "stable" | "latest",
gatingSource: "planTier_and_featureFlags" | "grandfather_full_access",
tierLimits: {
officeSeats: Number | null,
driverSeats: Number | null,
savedReports: Number | null,
},
}

Same payload is attached to GET /api/v1/config as config.configs.billingEntitlements so web/mobile can show caps without an extra billing round-trip.

aiAllowance / AI metering remain future until the AI billing slice ships (see AI agent proposal).

webhookEndpoints and notificationTemplates were in an earlier draft of tierLimits. They stay out of v1 because outbound webhooks are deferred and template counts are not gated in product yet.

Phase gates for enforcement​

  • Phase 1 (current): TIER_DEFAULTS + TIER_LIMITS + seat/report enforcement paths; default monitor (monitorOnly: true unless hard mode). Grandfather VIP via grandfatherFullAccess.
  • Phase 2 (underway): Hard seat-cap enforcement available globally (SEAT_CAP_HARD_ENFORCE) or per tenant (Customer.billing.enforcementMode, Super Admin UI + API merge). Next: pilot cohorts and Stripe/checkout alignmentβ€”not blocked on code.
  • Phase 3: 60-day notice to non-grandfathered legacy customers where needed. Founding (isLegacy: true) price grandfather stays per policy.

AI Agent monetization specifics​

Reuses the per-tenant aiAgent config block from the AI agent proposal:

SettingPro defaultEnterprise defaultNotes
monthlyTokenCapEnforced via costEnforced via costDollar-based ceiling is simpler to communicate
monthlyCostCeilingUsd75 (included)NegotiatedHard cap. Requests beyond the cap return 402 with a friendly "upgrade for more capacity" message.
perUserDailyMessageCap100NegotiatedAnti-abuse ceiling
platformDailyCostCeilingUsd200200Circuit breaker across ALL tenants

Overage billing pattern:

  1. Per-tenant MTD spend tracked on AgentSession aggregation (already in plan).
  2. At month-end, if mtdUsageCostUsd > bundledCostUsd, emit an invoice line item at cost Γ— 1.25 for the overage.
  3. At 80% of ceiling, email the tenant admin; at 100%, the circuit breaker trips and the AI Agent returns 402 until the next billing cycle (or the tenant admin raises the ceiling via Stripe portal upgrade).

This protects us from runaway costs AND gives us an upsell moment.


Public pricing page (attunelogic-landing)​

Replacing the current single-flat-rate src/pages/Home/Pricing.jsx with a 2-tier self-serve ladder + AI Agent waitlist card + Enterprise row. The marketing page intentionally:

  • Shows monthly prices by default with a toggle to annual (saves ~15%).
  • Uses trucking-first copy (multi-leg jobs, manifests, BOL, drivers) β€” no technician/service mentions until the v2 packaging lands.
  • Calls out the Starter driver cap inline in the seat copy line ("3 office users & up to 25 drivers"), and unlimited drivers on Growth.
  • Replaces the self-serve Pro card with an AIWaitlistCard that drops visitors into AIWaitlistModal. The copy is explicit that the AI Agent is coming soon and will be Pro-exclusive when it ships.
  • Routes Enterprise clicks into the existing ContactModal, not a separate form.
  • Updates the FAQ "How is Attune Logic priced?" and adds "When does Pro with the AI Agent launch?" + "What's on the Attune Logic roadmap?" entries pointing at the Feature Roadmap Index.
  • Removes any Growth bullets that referenced deferred features (QuickBooks sync, Google Calendar sync, outbound webhooks). Those live on the roadmap with dedicated build specs instead.

Rollout plan​

Week 1 β€” Decisions & documentation

  • Founder sign-off on final numbers
  • Publish enforcement map + pricing readiness (living doc)
  • Update FEATURE_REGISTRY with deferred Phase-1 keys (audit, public API, webhooks, SSO) when those products ship β€” not blocking Starter/Growth truthfulness for v1 trucking

Week 2 β€” Infrastructure (no customer impact)

  • Populate TIER_DEFAULTS / TIER_LIMITS (minimal trucking ladder β€” see code; differs slightly from the aspirational map earlier in this doc)
  • Extend buildBillingEntitlements with tierLimits, seatCapEnforcementMode, grandfatherFullAccess; expose on GET /config as billingEntitlements
  • Optional: billing.grandfathered / grandfatheredUntil for price cohort tracking (distinct from grandfatherFullAccess)
  • Add Stripe price IDs for new $99/$249 tiers (keep old prices for legacy SKUs)
  • Deferred features: audit UI, public API, outbound webhooks, SSO β€” see Feature Roadmap Index
  • Driver + office seat + saved-report cap enforcement (monitor by default; programmatic driver create included)

Week 3 β€” Public launch

  • Ship Pricing.jsx ladder + AI waitlist + FAQ updates (attunelogic-landing) β€” verify against live flags
  • Announce to existing customers (grandfather / positioning email)
  • Update docs/customer/* onboarding docs with new tier copy

Week 4 β€” Enforcement (pilot / new customers)

  • Hard vs monitor controls β€” env var, billing.enforcementMode, Super Admin Settings; structured tier_gate logs (seat_cap_monitor, seat_cap_blocked, feature_disabled)
  • Config cache β€” invalidateCustomerConfigCache after Stripe webhook saves so GET /config / billingEntitlements match Stripe-synced planTier and billing status
  • Service app β€” toast on 402 + TIER_LIMIT (upgrade prompt when hard enforcement blocks)
  • Pilot hard enforcement on selected tenants or post-cutover cohort (operational decision)
  • Wire log aggregation / alerts on tier_gate; watch support inbox, Sentry before expanding hard globally

Week 8 β€” A/B pricing test (optional)

  • Run a 6-week A/B test on attunelogic-landing: control ($99/$249/$549) vs variant ($79/$199/$449)
  • Measure: checkout conversion, 60-day retention, Pro-tier attach rate
  • Decide to keep, adjust, or revert based on data

Risks and mitigations​

RiskLikelihoodImpactMitigation
Existing customers revolt when they see new pricingMediumHighGrandfather policy is generous and public. Email before they see the page.
AI Agent waitlist leads cool off before Pro launchesMediumHighQuarterly-or-better product update emails to the waitlist; invite the most engaged carriers into the private beta early to keep the top of the funnel warm.
AI token costs exceed $75 bundle for heavy Pro usersMediumMediumCircuit breaker + 80%-of-ceiling email already planned. Overage is billable, not absorbed.
$99 Starter attracts high-support, low-retention buyersMediumMediumForce Starter customers through self-serve onboarding only. No paid onboarding time below Growth. The 25-driver cap also screens out hobbyists.
Carriers hit the 25-driver Starter cap and downgrade instead of upgradingLowMediumUpgrade prompt at 80% of cap (20 drivers) shows ROI-framed Growth comparison. The $5/driver overage add-on gives short-term flexibility before forcing the decision.
Per-truck competitors (Motive, Super Dispatch) poach small carriersLowMediumStarter's 25-driver cap at $99 beats them on cost by 5Γ—+. Train sales to lead with this comparison in the 5–20 truck segment.
Growth prospects who wanted QuickBooks / Google Calendar / webhooks leave for a competitorMediumMediumCSV export + route mapping cover the most common asks today. Every deferred item has a public spec on the Feature Roadmap Index so prospects can see the plan; sales can capture the "must-have" answers to prioritize which spec we execute first.
Enterprise floor scares off mid-market buyersLowLowEnterprise is hidden behind "Contact sales." Self-serve up to Growth; Pro is a waitlist CTA.
Sales team under-quotes EnterpriseHigh (always)MediumPublish an internal Enterprise pricing guide with floor by company size. Out of scope for this doc.
Service-vertical tenants (if any exist) are confused by trucking-only pricing pageLowLowappType !== "trucking" tenants get a different pricing view OR fall back to "Contact sales" during v1. Add a v2 pricing proposal once trucking ladder is validated.

Cross-references​

  • Stripe plumbing: Stripe Billing Foundation β€” checkout sessions, webhooks, idempotency, feature gate service
  • AI cost infrastructure: AI Agent for Trucking β€” v1 β€” per-tenant ceiling, circuit breaker, dry-run mode
  • Deferred feature specs: Feature Roadmap Index, covering QuickBooks Sync, Google Calendar Sync, Outbound Webhooks, Public API, and Google + Microsoft SSO.
  • Feature flag registry: attunelogic-api/src/services/config/default-configs/feature-flags.js
  • Billing catalog: attunelogic-api/src/services/billing/catalog.js
  • Entitlement evaluation: attunelogic-api/src/services/billing/index.js β†’ buildBillingEntitlements
  • Seat-cap middleware: attunelogic-api/src/middlewares/requireSeatCap.js (evaluateSeatCap + buildSeatCapResponse helpers used inline in the users, drivers, and reports controllers)
  • Tier constants: attunelogic-api/src/services/constants/billing β†’ PLAN_TIERS, PLAN_KEYS
  • Public pricing surface: attunelogic-landing/src/pages/Home/Pricing.jsx, attunelogic-landing/src/pages/Home/FAQs.jsx, attunelogic-landing/src/pages/Home/AIWaitlistModal.jsx