Quotas & Limits

How SitePulse enforces plan quotas — Redis atomic counters, the 80% soft warning, 100% hard block, and how to check current usage.

SitePulse enforces plan quotas using atomic Redis counters scoped to each organization and billing period. Quotas reset at the start of each billing period (calendar month for monthly plans; plan anniversary for annual plans).

Quota types

QuotaWhat it tracksResets
max_url_auditsURL + competitor + GitHub auditsMonthly
max_sitemap_auditsSitemap audits (parent + all children)Monthly
max_projectsTotal active projectsAlways enforced (not monthly)

How quotas are enforced

Quotas are checked at audit creation time, before the audit job is queued. The check is atomic — two simultaneous audit creations at the limit cannot both succeed.

Soft warning (80%): When usage reaches 80% of the quota, API responses include two headers:

X-Usage-Current: 80
X-Usage-Limit: 100

A banner also appears in the app: "You've used 80% of your URL audit quota for this month."

Hard block (100%): When the quota is reached, audit creation returns:

{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Monthly URL audit limit reached. Upgrade to run more audits."
  }
}

HTTP status 403 Forbidden.

Checking current usage

Go to Settings → Billing → Usage to see current usage for the billing period:

  • URL audits used / limit
  • Sitemap audits used / limit
  • Active projects
  • Progress bars with 80% warning indicator

The usage data is also available via API:

GET /api/v1/billing/usage
Authorization: Bearer <token>

Response:

{
  "period_start": "2026-05-01",
  "period_end": "2026-05-31",
  "url_audits": { "used": 45, "limit": 100 },
  "sitemap_audits": { "used": 3, "limit": 10 }
}

Quota keys

Redis quota keys use the format:

quota:{org_id}:{limit_type}:{period_start}

The period_start is the ISO date of the first day of the current billing period (e.g. 2026-05-01). The key's TTL is set to expire at the end of the period, so old counters are automatically cleaned up.

What counts against quotas

  • max_url_audits: URL audits, competitor audits, GitHub audits (all single-target audits)
  • max_sitemap_audits: Each sitemap audit counts as 1, regardless of how many child URLs are in the sitemap

GEO Visibility probe runs do not count against audit quotas — they are tracked separately and are not currently quota-gated.

Audit wisely on the free plan

On the Free plan, you have 5 URL audits per month. Run them on your most important pages rather than re-auditing the same page repeatedly. Use Scheduled Audits (Agency+) to automate regular audits without consuming manual quota unnecessarily.

Last updated: 2026-05-13