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
| Quota | What it tracks | Resets |
|---|---|---|
max_url_audits | URL + competitor + GitHub audits | Monthly |
max_sitemap_audits | Sitemap audits (parent + all children) | Monthly |
max_projects | Total active projects | Always 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.