Quota limits per plan
Last updated: May 19, 2026
Quota limits per plan
Wevion enforces seven quota dimensions per plan: seats, ad accounts, fan pages, pixels, catalogs, competitor watchlists, and ad-spend visibility cap. Each plan sets a numeric value (or NULL = unlimited). Check /settings/team/billing → Usage for your current values + current usage.
Who is this for
Admins planning capacity for an upcoming launch, comparing plans for an upgrade, or wondering why a "Connect" button is greyed out.
The seven dimensions
Dimension | Field on plan model | What it counts |
|---|---|---|
Seats |
| Team members in the workspace (active + pending invites) |
Ad accounts |
| Sum across Meta + Google + TikTok + Taboola + Snapchat connected accounts |
Fan Pages |
| Meta Pages connected |
Pixels |
| Sum across Meta + TikTok + Taboola + Google + Snapchat pixels |
Catalogs |
| Product catalogs (Meta + Google Merchant Center) |
Competitor watchlists |
| Watchlists in Strategic Intelligence |
Ad-spend visibility cap |
| Monthly tracked spend in USD cents (see spend caps) |
A NULL value on any dimension = unlimited. Demo and Enterprise plans typically have NULL across the board.
How quotas are enforced
The backend has a plan-guard middleware (apps/backend/src/plugins/external/11.plan-guard.ts) that checks before write operations:
requireResourceQuota(type): blocks new connections (ad account / fan page / pixel / catalog) when the quota is hitrequireUserQuota(): blocks new invites when seat quota is hitrequireActiveSubscription(): blocks writes on past_due or unpaid subscriptionsrequireFreemiumLimit(type): limits free-tier behavior (e.g. campaign launches)
When you hit a quota, the UI shows a clear error: "Plan limit reached — upgrade or remove unused [resource]".
Where to check your current values
From the UI
/settings/team/billing → Usage shows a bar per dimension:
used / max(orused / unlimited)The bar turns yellow at 80%, red at 95%
Each row links to the relevant management page (e.g. ad accounts row links to
/connect)
From your perspective as admin
If a teammate gets a "quota exceeded" error, they'll come to you. You can:
Check
/settings/team/billing → Usageto confirm which dimension is fullEither upgrade (acc-103) or remove unused resources to free space
Counting rules
Ad accounts
Only connected: true accounts count. Disconnected or deleted accounts don't count.
ad_accounts_used = meta.count(connected=true)
+ google.count(connected=true)
+ tiktok.count(connected=true)
+ taboola.count(connected=true)
+ snapchat.count(connected=true, deleted_at=null)
Fan Pages
Only Meta Pages with connected: true. Pages on other platforms are not counted (they don't exist in the same way).
Pixels
Sum across platforms:
Meta: distinct validated pixels (
pixel_ad_account_linkwithstatus = 'validated')TikTok: pixels with
status = 'ACTIVE'Taboola: pixels with
connected: trueGoogle: conversion actions with
connected: trueSnapchat: pixels with
connected: true, deleted_at: null
Catalogs
Meta catalogs (Commerce Manager) + Google Merchant Center feeds, both with connected: true.
Competitor watchlists
Created via Strategic Intelligence module. Counts active watchlists.
Seats
max_users + extra_user_slots (purchased add-ons). Counts active members + pending invitations. See add extra team member slots for raising the cap on a fixed plan.
Ad-spend cap
Special — see the dedicated article understanding spend caps. Not a hard block; a visibility cap.
When you hit a quota
Resource | Behavior at limit |
|---|---|
Seats | Cannot send new invitations until you free a seat or add extras / upgrade |
Ad accounts | Cannot connect a new ad account; existing ones keep syncing |
Fan Pages | Cannot connect new Pages |
Pixels | New pixels not imported until quota freed; existing pixels keep collecting events |
Catalogs | Cannot import new catalogs |
Competitor watchlists | Cannot create new watchlists |
Ad-spend cap | Spend over-cap hidden from analytics until next month; ads continue running |
How to free quota space
Resource | Free space by |
|---|---|
Seats | Removing members from |
Ad accounts | Disconnect unused accounts in |
Fan Pages | Disconnect unused Pages in |
Pixels | Disconnect unused pixels in |
Catalogs | Disconnect unused catalogs in |
Competitor watchlists | Delete unused watchlists in Strategic Intelligence |
Removing a resource frees the quota immediately; no Stripe action needed.
Demo and Enterprise plans
Demo: internal plan for partners / POCs.
is_custom: true, hidden from public pricing. Replicates Enterprise limits at $0 (typically NULL on all resource quotas). Managed by Sales.Enterprise: custom contract. Often unlimited quotas (NULL across the board) plus SSO. See enterprise and custom plans.
Common questions
"Why does my count differ from /settings/team/billing?": the page is the authoritative count. If a dashboard widget shows different, refresh — it's a cache.
"Disconnected an ad account but counter didn't drop": ~60s sync delay. Refresh.
"I'm Enterprise but see a number, not unlimited": your contract has a fixed quota (not NULL). Contact your CSM to raise it.
"Can I temporarily exceed for a launch?": No — quotas are hard. Plan ahead.
Related
Wevion plans explained — which plan has which quotas
Add extra team member slots — raise the seat cap without upgrading
Understanding spend caps — the special spend dimension
Upgrade or downgrade your plan — the cleanest way to raise all quotas