Quota limits per plan

Reference of Wevion's seven quota dimensions: seats, ad accounts, fan pages, pixels, catalogs, competitor watchlists, ad-spend cap.

Written By Salvatore Sinigaglia

Last updated About 5 hours ago

Reference of Wevion's seven quota dimensions: seats, ad accounts, fan pages, pixels, catalogs, competitor watchlists, ad-spend cap.

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

DimensionField on plan modelWhat it counts
Seatsmax_usersTeam members in the workspace (active + pending invites)
Ad accountsmax_ad_accountsSum across Meta + Google + TikTok + Taboola + Snapchat + Outbrain connected accounts
Fan Pagesmax_fan_pagesMeta Pages connected
Pixelsmax_pixelsSum across Meta + TikTok + Taboola + Google + Snapchat pixels
Catalogsmax_catalogsProduct catalogs (Meta + Google Merchant Center)
Competitor watchlistsmax_competitor_watchlistsWatchlists in Strategic Intelligence
Ad-spend capmax_ad_spend_centsRolling 30-day tracked spend in USD cents; crossing 110% sets the workspace read-only (see spend caps)

A NULL value on any dimension = unlimited. Plus, 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 hit
  • requireUserQuota(): blocks new invites when seat quota is hit
  • requireActiveSubscription(): blocks writes on past_due or unpaid subscriptions
  • requireFreemiumLimit(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 (or used / 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:

  1. Check /settings/team/billing β†’ Usage to confirm which dimension is full
  2. Either 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)                 + outbrain.count(connected=true)

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_link with status = 'validated')
  • TikTok: pixels with status = 'ACTIVE'
  • Taboola: pixels with connected: true
  • Google: conversion actions with connected: true
  • Snapchat: 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. Measured over a rolling 30-day window: 100-109% triggers a warning; crossing 110% sets the workspace read-only (spend_exceeded). It does not pause your live ads.

When you hit a quota

ResourceBehavior at limit
SeatsCannot send new invitations until you free a seat or add extras / upgrade
Ad accountsCannot connect a new ad account; existing ones keep syncing
Fan PagesCannot connect new Pages
PixelsNew pixels not imported until quota freed; existing pixels keep collecting events
CatalogsCannot import new catalogs
Competitor watchlistsCannot create new watchlists
Ad-spend cap100-109% β†’ warning notification; β‰₯110% (rolling 30 days) β†’ workspace read-only until you upgrade; your live ads keep running

How to free quota space

ResourceFree space by
SeatsRemoving members from /settings/team/people
Ad accountsDisconnect unused accounts in /connect/{platform}
Fan PagesDisconnect unused Pages in /connect/meta/fan-pages
PixelsDisconnect unused pixels in /pixels
CatalogsDisconnect unused catalogs in /catalogs
Competitor watchlistsDelete 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.

FAQ

What quotas does Wevion enforce per plan?

Wevion enforces seven quota dimensions per plan: seats, ad accounts (across Meta, Google, TikTok, Taboola, Snapchat, and Outbrain), fan pages, pixels, catalogs, competitor watchlists, and the ad-spend cap. Each plan sets a numeric value, or NULL meaning unlimited. Plus, Demo, and Enterprise plans typically have NULL across the board. The ad-spend cap is enforced over a rolling 30-day window (read-only at 110%). Check your current values and usage at /settings/team/billing β†’ Usage.

Where do I see how much of my quota is used?

Go to /settings/team/billing β†’ Usage in Wevion. It shows a bar per dimension displaying used / max (or used / unlimited), turning yellow at 80% and red at 95%. Each row links to the relevant management page, so the ad accounts row links to /connect. This page is the authoritative count if a dashboard widget disagrees.

Why is a "Connect" button greyed out?

You have likely hit a resource quota. Wevion's plan-guard checks quotas before write operations and blocks new connections once the limit is reached, showing "Plan limit reached β€” upgrade or remove unused [resource]". Confirm which dimension is full at /settings/team/billing β†’ Usage, then upgrade or remove unused resources.

How do I free up quota space?

Remove the resource that is at its limit: remove members from /settings/team/people for seats, disconnect unused ad accounts in /connect/{platform}, disconnect Pages, pixels, or catalogs from their management pages, or delete unused competitor watchlists in Strategic Intelligence. Removing a resource frees the quota immediately, with no Stripe action needed.

Can I temporarily exceed a quota for a launch?

No. Quotas are hard limits, so you cannot temporarily exceed them β€” plan ahead by upgrading or freeing space before your launch. The ad-spend cap works differently but is still enforced: it's measured over a rolling 30-day window, warns you at 100-109%, and sets the whole workspace read-only once you cross 110% (until you upgrade). Your live ads keep running throughout β€” only Wevion write actions are blocked.