Custom plans are the most load-bearing screen in the platform. Every plan is a bundle of pricing, limits, and feature switches, and every customer's experience — what they see, what they can use, and what asks them to upgrade — is decided here.
This guide is the complete reference. It walks the plan editor tab by tab, lists every option with its default, and covers the Stripe and non-Stripe billing paths, per-customer overrides, the plan lifecycle, and the gotchas agencies hit most often.
Open a plan from `Business -> Billing & Revenue -> Custom Plans`. The editor has three tabs: `General`, `Pricing & Billing`, and `Features & Options`.
How the plan editor is organised
The `Features & Options` tab is where the feature matrix lives. It is split into six sub-tabs: `General`, `Reviews`, `Campaigns`, `Review Tools`, `Social Proof`, and `Integrations`.
Above the sub-tabs sits an `Advanced View` switch. It reveals extra controls — Platform Mode, API Access, widget filter options, and more — and it resets to off on every page load. Several important options are simply invisible until you flick it, so if an option from this guide is missing from your screen, turn `Advanced View` on before assuming anything else.
The same editor appears in two places: on the plan itself (the template every subscriber inherits) and on each customer's Manage Customer page (a per-customer override layer). Anything set on the customer overrides the plan for that customer only; clearing the override re-inherits the plan value.
Saving the plan editor opens a price-recommendation dialog first. Your option changes only persist after you click `Save Plan Options` inside that dialog — closing it discards them.
The three access states
Most options are a 3-state access control rather than a simple on/off switch. Understanding the difference between `Upgrade` and `Hidden` is the key to designing a plan ladder.
- Section-visibility options are 2-state instead: `Visible` / `Hidden`. These are `Settings Pages`, `Billing Pages`, `Reviews Page`, `Campaigns Section`, and `NFC Cards`
- Some options are parents with nested children — hiding a parent (for example `Respond with AI` or `Email Campaigns`) also hides its children
- Use `Upgrade` on features you want to sell against, and `Hidden` on features that should never appear for that tier
| State | What the customer experiences |
|---|---|
| `Enabled` | The feature is fully available and works normally. |
| `Upgrade` | The feature is visible but locked. The customer sees it with an upgrade prompt — useful for showing what a higher tier includes. |
| `Hidden` | The feature is removed from the customer's UI entirely, as if it does not exist. |
Testing plan gating (do not use your agency login)
You cannot QA plan gating from your agency account. Tenant owners and sales agents bypass every plan gate, so when you look at a customer account through your own login, everything appears enabled regardless of the plan.
Always test by logging in as (or impersonating) a customer. Only then do the `Upgrade` locks, hidden sections, and limits actually apply.
The General tab: identity and availability
Before the feature matrix, the `General` tab holds the plan's identity and how customers can reach it.
| Field | What it does | Notes |
|---|---|---|
| `Name` | The plan's name | Must be unique across your plans. |
| `Description` | Short text shown to customers when they are choosing a plan | Sell the tier here, not internally. |
| `Default Plan` | Auto-selected for new customers at signup | Setting a plan as default un-defaults every other plan. |
| `Hide Plan` | Removes the plan from the customer subscription page | Existing subscribers keep it, and it stays usable in your Switch Plan modal — this is how you retire a plan. |
| `Plan Registration URL` | A direct signup link for this plan | Always `register?plan={id}`. A status banner tells you whether it is ready to share: it warns when signups are off, when payment-first needs a payment link, or when you should share the Stripe payment link instead. |
Features & Options: General sub-tab
The `General` sub-tab holds account-wide limits, monthly credits, and the section-visibility switches.
| Option | What it controls | Default | Notes |
|---|---|---|---|
| `Max Locations` | How many locations the customer can create | 1 | 0 = unlimited. On Stripe plans this limit also drives add-on location billing. |
| `Max Team Members` | How many team members the customer can invite | 0 (unlimited) | 0 = unlimited. |
| `Monthly Email Credits` | Email sending credits granted each month | 0 | Renews monthly per channel. |
| `Monthly SMS Credits` | SMS sending credits granted each month | 0 | Renews monthly per channel. |
| `Monthly WhatsApp Credits` | WhatsApp sending credits granted each month | 0 | Renews monthly per channel. |
| `Settings Pages` | Visibility of the customer's Settings group | Visible | Hiding 404s the whole Settings group — except Profile, which always stays reachable. |
| `Billing Pages` | Visibility of the customer's Billing menu | Visible | Hiding removes the entire Billing menu plus upgrade and top-up links. UI only — Stripe subscriptions keep renewing. |
| `Remove 'Powered By' Branding` | Whether the customer can strip platform branding | Enabled | |
| `Platform Mode` | Multi-Location vs Multi-Organization account structure | Multi-Location | Advanced View only. |
| `API Access` | Access to the customer API and API settings | Upgrade | Advanced View only. On `Upgrade` the API settings page shows locked, but the API docs page 404s until the option is fully `Enabled`. |
Features & Options: Reviews sub-tab
The `Reviews` sub-tab controls the reviews page itself, the AI reply stack, and review management tools. `Respond with AI` is a parent option: hiding it also hides `Auto-Responding` and `Custom AI Prompts` beneath it.
Note that `AI Hub` and `API Access` are separate products with separate switches — enabling API access does not grant the AI Hub, and vice versa. The last five rows only appear with `Advanced View` on.
| Option | What it controls | Default | Notes |
|---|---|---|---|
| `Reviews Page` | Visibility of the customer's Reviews page | Visible | 2-state Visible / Hidden. |
| `Respond with AI` | AI reply generation on reviews | Enabled | Parent option — hiding it also hides its children below. |
| `Auto-Responding` | Automatic AI replies to incoming reviews | Upgrade | Child of `Respond with AI`. |
| `Custom AI Prompts` | Customer-defined prompts for AI replies | Enabled | Child of `Respond with AI`. |
| `Tag Reviews` | Tagging and organising reviews | Enabled | |
| `AI Insights` | AI-generated insight reports over reviews | Upgrade | |
| `Search AI` | AI-powered review search | Upgrade | |
| `AI Hub` | The AI Hub (MCP) connection | Upgrade | Sold independently of `API Access` — enabling one does not enable the other. |
| `Import Reviews` | Importing reviews manually | Enabled | Advanced View only. |
| `Export Reviews` | Exporting reviews | Enabled | Advanced View only. |
| `Hide Reviews from Widgets` | Excluding individual reviews from widget display | Enabled | Advanced View only. |
| `Scheduled Reporting` | Recurring emailed reports | Enabled | Advanced View only. Deliberately independent of `Settings Pages` visibility — hiding Settings does not switch reporting off. |
| `Sentiment Analysis` | Sentiment analysis over reviews | Upgrade | Advanced View only. |
Features & Options: Campaigns sub-tab
The `Campaigns` sub-tab gates each sending channel separately. `Email Campaigns`, `SMS Campaigns`, and `WhatsApp Campaigns` are parents — hiding a parent hides its children with it.
The bring-your-own-provider children (`Own Email Provider`, `Own SMS Provider`, `Own WhatsApp Provider`) and WhatsApp `Custom Templates` all default to `Hidden`, so customers use your managed sending unless you deliberately open BYOK up on the plan.
| Option | What it controls | Default | Notes |
|---|---|---|---|
| `Campaigns Section` | Visibility of the campaigns area in nav and dashboard | Visible | Nav and dashboard only — direct URLs stay reachable. |
| `Email Campaigns` | Email review-request campaigns | Enabled | Parent option with the three children below. |
| `Custom 'From' Email` | Sending from the customer's own from-address | Enabled | Child of `Email Campaigns`. |
| `Own Email Provider` | Bring-your-own email provider (BYOK) | Hidden | Child of `Email Campaigns`. |
| `BCC Automation` | Triggering requests via BCC'd emails | Enabled | Child of `Email Campaigns`. |
| `SMS Campaigns` | SMS review-request campaigns | Enabled | Parent option with the two children below. |
| `Own SMS Provider` | Bring-your-own SMS provider | Hidden | Child of `SMS Campaigns`. |
| `MMS Requests` | Sending MMS review requests | Upgrade | Child of `SMS Campaigns`. |
| `Video Review Requests` | Video-based review requests | Upgrade | |
| `WhatsApp Campaigns` | WhatsApp review-request campaigns | Upgrade | Parent option with the two children below. |
| `Own WhatsApp Provider` | Bring-your-own WhatsApp provider | Hidden | Child of `WhatsApp Campaigns`. |
| `Custom Templates` | Custom WhatsApp message templates | Hidden | Child of `WhatsApp Campaigns`. |
| `No Credits During Trial` | Withholds monthly credits while the customer is on trial | Off | Advanced View only. |
Features & Options: Review Tools sub-tab
The `Review Tools` sub-tab covers the collection assets: feedback forms, QR codes, and NFC cards. `Feedback Forms` is a parent — hiding it hides the form limit, AI Review Assistant, Video Testimonials, and custom domain options beneath it.
| Option | What it controls | Default | Notes |
|---|---|---|---|
| `Feedback Forms` | Branded review-collection forms | Enabled | Parent option with the four children below. |
| `Feedback Form Limit` | Maximum number of feedback forms | 0 (unlimited) | Child of `Feedback Forms`. |
| `AI Review Assistant` | AI-assisted review writing on forms | Upgrade | Child of `Feedback Forms`. |
| `Video Testimonials` | Video collection on feedback forms | Upgrade | Child of `Feedback Forms`. Shows an inline warning to keep the Testimonials source allowed on the Integrations sub-tab. |
| `Custom Domain for Feedback Forms` | Serving forms from the customer's own domain | Upgrade | Child of `Feedback Forms`. |
| `Review Gating / Negative Feedback` | Routing unhappy customers into private feedback | Enabled | Advanced View only. |
| `QR Codes` | QR codes that link to collection pages | Enabled | |
| `NFC Cards` | Visibility of the NFC cards area | Hidden | The only option hidden by default. Even when visible, the customer nav additionally needs an actual NFC order before the item shows. |
Features & Options: Integrations sub-tab
The `Integrations` sub-tab decides which review platforms a customer can connect. `Allowed Review Sources` is a logo grid with every platform selected by default — deselect a platform to block customers on this plan from connecting it.
By default a blocked platform still shows greyed out in the customer's picker; turn on `Hide Unselected Sources` to remove blocked platforms from the picker entirely.
| Option | What it controls | Default | Notes |
|---|---|---|---|
| `Allowed Review Sources` | A logo grid of review platforms the customer may connect | All selected | Deselecting a platform blocks connecting it. |
| `Review Source Limit` | Maximum number of connected review sources | 0 (unlimited) | |
| `Allow Custom Review Sources` | Letting customers add sources not in the grid | Enabled | Advanced View only. |
| `Hide Unselected Sources` | How blocked platforms appear in the customer's picker | Off | Advanced View only. When on, blocked platforms disappear from the picker instead of showing greyed out. |
The Stripe path: Pricing & Billing
The `Pricing & Billing` tab is only rendered once your Stripe account is connected via `Business -> Billing & Revenue -> Connect Stripe`.
The core fields are `Monthly Stripe Price ID` and `Yearly Stripe Price ID`, each with a `Create` button for in-app price creation. The currency comes from your platform currency setting and is shown read-only. A plan counts as a Stripe plan if at least one price ID is set, and IDs are validated against your connected account.
Additional location pricing lives here too: `Monthly Add-on Price ID` and `Yearly Add-on Price ID` bill each location beyond the plan's `Max Locations`. If you configure Tiered Pricing (volume discounts by location count), it overrides the simple add-on price IDs.
- Platform commission: a 1.9% application fee applies to customer payments
- The fee is waived for lifetime-deal agencies
- The fee is silently dropped for BRL, INR, MXN, MYR, SGD, and THB currencies
A plan with no price IDs at all is treated as billed externally — see the non-Stripe path below. Setting even one price ID (monthly or yearly) makes it a Stripe plan.
Payment Links vs Checkout Sessions
This distinction matters more than any other on the Stripe path. Payment Links, created on the plan, are for brand-new signups only. They create a new Stripe customer at checkout — so sending one to an existing customer creates a duplicate Stripe customer and breaks their billing portal.
Existing customers are billed from `Business -> Customers -> Manage Customers` using Checkout Sessions instead. A Checkout Session binds to the customer's existing Stripe customer, has a `Plan to bill` dropdown that defaults to their current plan, and its link expires in 24 hours.
- New signup, no Stripe history: share the plan's Payment Link
- Existing customer, upgrade or first payment: generate a Checkout Session from Manage Customers
- Both honor coupons (`allow_promotion_codes`) and the plan's trial settings
If a customer ends up with two Stripe customers, their billing portal stops reflecting reality. Never send a Payment Link to someone who already exists in your Stripe account.
Trials and what happens when a subscription ends
`Trial Days` sits on the Pricing tab. It is hidden for Free plans and forced to 0 when the plan is free. When a Stripe trial ends, Stripe takes over billing.
When a subscription fully ends, the plan's Subscription End Behavior decides what happens next: `Use default`, `Do nothing` (block access), or auto-switch the customer to a chosen free plan. Note that the auto-downgrade clears all per-customer overrides.
When a customer's trial expires or their subscription lapses, the dashboard redirects them to your subscriptions page — or to a subscription-required page when billing is hidden or Stripe is absent. Campaign sending and review syncing stop. Their public feedback forms and QR links show a branded 'page paused' notice (HTTP 402) rather than a broken 404, so end customers scanning a QR code never hit a dead page.
- `Trial Days` is hidden for Free plans and forced to 0 when the plan is free
- Subscription End Behavior options: `Use default`, `Do nothing` (block access), or auto-switch to a chosen free plan
- Auto-downgrade to a free plan clears all per-customer overrides — re-apply any you still want
The non-Stripe path: billing externally
A plan with no price IDs is billed externally, and the plan list badges it `Billed Externally`. The `Free Plan` toggle marks a genuinely free plan — free-plan customers always keep access, even when paused.
Non-Stripe, non-free customers stay active until their platform trial date passes. You assign plans manually via the customer's Switch Plan modal.
Credits on free and non-Stripe plans renew monthly per the plan's limits — independently per channel, and respecting the `No Credits During Trial` option.
- Customers without your Stripe see a reduced Billing menu: `Credit usage` only, plus `Buy credits` when you sell credit products with external payment URLs
- Pause is available for non-Stripe customers only, from Manage Customer, and stops access unless the plan is free
Warning: pausing wipes the customer's trial date, and resuming does not restore it. Do not pause a trialing customer you intend to resume unless you are prepared to reset their access manually.
Per-customer overrides and credit timing
The same Features & Options editor appears on each customer's Manage Customer page. Anything you set there overrides the plan for that customer only, and overrides store only the differences from the plan — clearing an override re-inherits the plan value.
Timing is the important part. Editing limits on a specific customer expires and re-grants their credits immediately. Editing the plan template does not touch existing subscribers' credits until their next monthly renewal.
- Use the plan editor for changes that should roll out to everyone at renewal
- Use the per-customer editor for changes that should take effect right now
- The per-customer editor has no price-recommendation step — it saves options directly
- Remember that an auto-downgrade at subscription end clears all per-customer overrides
Plan lifecycle: create, copy, hide, delete, reorder
- Create: requires an Agency-tier EMR plan; a new plan starts from the defaults listed in the tables above
- Copy: duplicates everything except Stripe price IDs and payment links — reconnect billing on the copy. It does copy the `Default Plan` flag, so un-default one of the two afterwards
- Hide: retires a plan without deleting it — existing subscribers keep it and you can still assign it from the Switch Plan modal
- Delete: a soft delete, blocked while any customer is assigned to the plan — including cancelled and free ones — with the error 'You have active subscribers on this plan'. Move customers off first
- Reorder: drag plans in the list to change their display order
Every agency starts with a seeded set: Starter, Professional (the default), and Enterprise. All three are created without Stripe price IDs — connect prices before selling them.
Gotchas: the ones agencies actually hit
Every item below is a behaviour that has surprised real agencies. Skim this list before and after any plan change — most support tickets about custom plans trace back to one of these.
- Hiding a feature is not retroactive. Configuration customers already enabled (for example video collection on a feedback form) keeps working until you edit the form — audit existing records after downgrading a plan
- `Advanced View` resets off each visit. If you cannot find Platform Mode, API Access, or the widget filter options, flick the switch
- The plan editor's save opens a price-recommendation dialog — options only persist after you click `Save Plan Options` there
- `Campaigns Section` hides navigation but not direct URLs
- Setting `API Access` to `Upgrade` still 404s the API docs page — only fully `Enabled` unlocks the docs
- NFC is hidden by default and the customer nav additionally requires a real NFC order before the item appears
- The 1.9% commission is silently waived for BRL, INR, MXN, MYR, SGD, and THB — revenue reports will not show a fee for those currencies