1 OAK MLS
Features

Subscription Billing

Plan tiers, checkout, and subscription management

Subscription Billing

1 OAK MLS uses Stripe to manage workspace subscriptions. Each workspace can subscribe to one of three plans, each unlocking progressively more features.

Plans Overview

AgentProfessionalPrestige
Monthly$99/mo$199/mo$449/mo
Annual$990/yr$1,990/yr$4,490/yr
Setup fee (monthly)None$299$499
Setup fee (annual)NoneNoneNone
Listings1,0005,000Unlimited
Templates1 (Estate)3 (all)3 (all)
Custom domainYesYesYes
Service areas310Unlimited
Landing pages--5Unlimited
Dashboard members25Unlimited
AI generations--500/mo2,000/mo
Brand palette--YesYes
Blog--YesYes
Map view--YesYes
Favorites--YesYes
AI search----Yes
Automations----Yes
Team branding----Yes
Custom CSS----Yes

Annual billing saves approximately 2 months compared to monthly.

How to Subscribe

  1. Go to Dashboard > Billing (requires Admin or Owner role)
  2. Choose a plan and click Monthly or Annual
  3. Complete payment on the Stripe Checkout page
  4. You'll be redirected back to your dashboard with the plan active

The billing page shows your current plan, features, next billing date, and available upgrades.

Managing Your Subscription

Click Manage Billing on the billing page to open the Stripe Customer Portal. From there you can:

  • Upgrade or downgrade your plan
  • Switch between monthly and annual billing
  • Update your payment method
  • Cancel your subscription (access continues until period end)
  • View invoice history and download receipts

Charter Partner Overrides

Founding clients and special partners can be granted full Prestige access without a Stripe subscription. This is managed by platform administrators.

Charter partners see a "Charter Partner" badge on their billing page instead of subscription status. They have no Manage Billing button since there's nothing to manage.

To set up a charter override, a platform admin uses the admin API:

POST /api/admin/workspaces/{id}/billing
{
  "is_billing_override": true,
  "plan": "prestige",
  "override_reason": "Charter partner — founding client"
}

Grace Period

If a payment fails, the subscription enters past_due status. A 3-day grace period starts from the end of the current billing period. During this time:

  • All features remain accessible
  • A warning banner appears on the billing page
  • The workspace owner should update their payment method via Manage Billing

After the grace period expires, access to plan-gated features is revoked until payment is resolved.

Feature Gating

Each plan defines which features are available. The feature matrix is enforced by the requireFeature() helper, which checks the workspace's subscription against the plan's feature definitions.

Features are defined in packages/billing/src/plans.ts and include both boolean flags (e.g., blog, mapView) and numeric limits (e.g., maxListings, aiMonthlyLimit).

The dashboard sidebar shows a color-coded badge indicating the current plan:

  • Agent — Gray badge
  • Professional — Indigo badge
  • Prestige — Amber/gold badge
  • Charter — Plan color with "(Charter)" suffix

If the plan includes AI generations, the sidebar also shows current month's usage (e.g., "12/500 AI").

On this page