← Blog
SaaSMulti-TenancyPricingCRM

SaaS Plan Limits and Feature Gates: Designing CRM Tiers

SaaS plan limits and feature gates for a CRM: which quotas to meter, why staff seat caps punish growth, and how to gate modules without a crippled tier.

A tenant on your starter tier hires a fourth salesperson and runs into a three-seat cap. They do not upgrade. They hand the new hire the office manager’s login, and from that afternoon your per-user audit trail means nothing. No movement in MRR, no churn signal, no upgrade prompt - just a support ticket eight months later asking why two people keep getting logged out of the same session. That is what badly chosen SaaS plan limits and feature gates actually cost: not a lost customer, but a customer who grew and paid you nothing for it.

We build and sell multi-tenancy modules for Perfex CRM and Concord CRM, plus two multi-tenant SaaS platforms of our own, so weigh the recommendations accordingly. The tenancy engines we ship all expose the same two levers, and most operators reach for the wrong one first.

SaaS plan limits and feature gates are two different tools

A limit is a number: 1,000 contacts, 5 staff, 10,000 leads. It meters consumption and is meant to be hit - that is the point, because hitting it is the upgrade trigger.

A feature gate is a boolean: this tier has API access, that one does not. It is meant never to be hit, because a tenant who wanted the feature bought the tier that carries it.

Confusing them fails in both directions. Metering what should be a gate - charging per API call to buyers who cannot forecast their own call volume - makes your pricing unquotable and stalls procurement. Gating what should be metered leaves money on the table from the tenants growing fastest. The plan builders we ship put both levers side by side, which makes it easy to grab whichever is nearest rather than the one that fits.

Pick the one meter that grows with the customer’s success

Usage based pricing for a CRM works when the counter you meter is one the tenant is pleased to see rise. Contacts, deals, leads and invoices all qualify: every increment means their business is working. Storage, API calls and staff seats do not. Those are your costs, not their outcomes, and asking a customer to pay more for a number they were trying to keep down is a negotiation you lose before it starts.

The SaaS module for Concord CRM frames the mechanism plainly: plans define limits on any CRM entity, including contacts, deals and your own custom modules. That “any entity” flexibility is as much a trap as a feature: the temptation is to switch on everything the engine offers.

Pick one headline meter for the pricing page. Everything else is a guardrail, set generously, there to stop abuse rather than to price value. The test: if a prospect cannot tell which tier they need in ten seconds, you have two headline meters and should delete one.

Seat limits vs usage limits: why staff caps backfire

A seat cap taxes the precise behaviour you want. The tenant hiring their fifth account manager is your best expansion candidate, and the cap lands mid-onboarding, when they are already irritated by paperwork. Their rational response is not an upgrade, it is a shared login, which costs you the per-user audit log, per-user notification routing and any seat-based forecasting you had.

There is an honest exception. Where a seat maps to a licensed professional who bills - an accountancy practice, a clinic, a legal firm - the seat is the value metric, and seat pricing is fair and easy to explain. Outside that shape, seats are a proxy for value rather than value itself.

If you do cap seats, cap them late and warn early. LeadHub sends plan-limit alerts as tenants approach lead, seat and storage caps, with a friendly upgrade prompt when a team-size cap bites; FeedbackPulse fires usage alerts on the same approach. A cap seen coming three weeks out is an upgrade conversation with a finance approval behind it. A cap discovered at 17:40 on a Friday while a new hire waits is a support ticket with a bad mood attached.

The quota audit: what to meter, what to leave unlimited

The SaaS module for Perfex CRM exposes twelve counters - staff members, customers, invoices, projects, leads, proposals, estimates, contracts, tasks, tickets, expenses and credit notes - with an unlimited option on any of them. Twelve counters is not a shopping list. Every one you switch on is a number support has to explain, a place enforcement can be wrong, and another permanent row in the entitlement matrix.

CounterGrows with the tenant’s successMeter it?
Customers / contactsYesYes - the safe default headline meter
LeadsYesHeadline meter for marketing-led buyers
DealsYesHeadline meter for sales-led buyers
InvoicesYesOnly for billing-led products; watch the reset period
Projects, proposals, contractsLooselyGuardrail only, set high
Staff membersOnly as headcountOnly where a seat is genuinely the value
Tasks, expenses, credit notesNoNever

The bottom row matters most. Never meter a record whose absence corrupts the data. A tenant who cannot raise a credit note because they hit a cap does not upgrade - they issue a wrong invoice, correct it by email, and now your product holds a financial record everyone involved knows is untrue. Tasks and expenses are the same: residue of work already paid for, and capping them buys you nothing but bad data.

One more distinction hides in that table: a limit on a stock (contacts stored) behaves nothing like a limit on a flow (invoices issued this month). Stocks only trend upwards, so they push tenants up tiers and keep them there. Flows are seasonal, so a flow-metered tenant upgrades in December, downgrades in January and resents both. Meter the stock where you have the choice.

Per plan module access and hiding whole sections

Per plan module access is the gate that costs nothing to enforce and does the most for how the cheap tier feels. The Perfex module enables or disables any module per plan, including third-party ones, and can let tenants activate or deactivate the modules available to them - worth turning on, because it converts a support request into a self-service preference. Concord does the same at provisioning, setting module availability per plan when the tenant is created.

LeadHub goes further. Plan feature flags can hide entire admin sections from the tenant admin - Reports, Brand and Domain, Communications, Advanced, Tools and Templates - so a starter tier does not render navigation for things it cannot use.

The rule worth writing on the wall: the bottom tier should look like a smaller product, not a broken one. A sidebar of greyed-out padlocks reminds every starter tenant, on every screen, that they bought the cheap one.

The honest cost is that hiding kills discovery: a tenant who never sees Reports never wants Reports. So move discovery off the daily interface and into the usage alert that fires as a limit approaches and the onboarding email sequence. Hide at the bottom, tease in the middle, never both.

Enforcement: what happens at the ceiling

A limit can block the create action, allow it and bill an overage, or allow it and warn. Most CRM tenancy engines block, and enforcement is cron-driven rather than instantaneous: in the Perfex module, cron-based automation enforces plan limits alongside recurring billing and tenant database deployment. So your counters are eventually consistent: a tenant can cross a boundary and sit above it until the next run. Treat every limit as a boundary with a tolerance, and never bill on a count you assume was exact at the moment of the write.

Downgrades need a written answer before the first one happens, because the Perfex module processes upgrades and downgrades on cron with no human in the loop. A tenant holding 5,000 contacts lands on a 1,000-contact plan overnight. Three options: refuse the downgrade until they are under the limit (annoying but honest), accept it and freeze creation while leaving everything readable (best), or delete (never, for any tier).

Read-only degradation is also the right default for non-payment. Concord suspends tenant accounts automatically when payment is overdue, and both our Laravel platforms run escalating dunning ending in suspension. Suspension should mean creation stops and public surfaces go dark, not that the data is gone. FeedbackPulse lets a tenant pause a subscription without losing data, which recovers more than any cancel-flow survey: a paused account is a customer with a reason to come back.

How to structure SaaS plans: the build order

  1. Write the value metric in one sentence before opening the plan builder. If the sentence needs an “and”, you have two metrics and a confusing pricing page.
  2. Set every counter to unlimited, then re-enable only what you can justify. Add guardrails where you have seen abuse, not where you can imagine it.
  3. Decide seats separately and generously. Cheap to add, not a tier boundary, unless a seat is a billing professional.
  4. Split gates into value gates and cost gates. White-label, custom domains and API access are value gates agencies pay for. AI, webhook quota and API rate limits are cost gates - bound them per plan (LeadHub defaults to 60 requests per minute per tenant, configurable per plan) and keep the product complete without them. Both our AI-capable platforms keep AI optional and plan-gated, so a tenant without it still gets manual scoring, tagging and sequence building - an upgrade, not a ransom.
  5. Hide rather than grey out at the bottom tier, and put the upsell in the usage alert.
  6. Instrument before you re-price. Plan distribution, top-performing plans, which trial users upgrade, MRR, ARR and churn are all reported by these engines. Re-pricing without them is guessing with extra steps.
  7. Use coupons, not new plans, for promotions. Percentage or fixed discounts with usage limits, expiry dates, per-plan rules and trial extensions cover launch offers, referral codes and win-back campaigns without a permanent row in the entitlement matrix. Three plans and twenty coupons is a business; nine plans is a maintenance project.

Start with step two this week. Open the plan builder, count the counters currently switched on, and set every one you cannot justify in a single sentence back to unlimited. Every tier that ends up feeling mean got there one reasonable-sounding counter at a time.