
How trackagoat enforces per-organization and per-user limits based on plan tier, and how limits surface in the UI and API.
trackagoat enforces per-organization limits based on your plan tier. This page explains what each limit does, how they're enforced, and what happens when you hit one.
These values are read live from the current plan configuration, so they always reflect the limits in force today. Tier upgrades are handled manually — email support@trackagoat.com with your org name and the tier you'd like.
| Limit | What it caps |
|---|---|
max_creators_per_org | Active tracked creators across all projects |
max_tracked_videos_per_org | Individually tracked videos across all projects |
max_projects_per_org | Projects in your org |
max_members_per_org | Team members in your org |
max_campaigns_per_project | Campaigns per project |
max_campaign_items_per_campaign | Items per campaign |
max_api_keys_per_org | Active API keys |
max_api_requests_per_day | v1 API requests per UTC calendar day |
max_manual_scrape_triggers_per_day | Manual "Update Now" triggers per UTC day |
max_payout_methods_per_org | Payout methods (built-in + custom) per org |
max_payout_structures_per_project | Payout structures per project |
min_video_stats_hours | Minimum hours between video stats updates |
min_discover_videos_hours | Minimum hours between video discovery runs |
min_creator_profiles_hours | Minimum hours between creator profile updates |
stats_history_retention_days | Days of stats history retained before pruning |
Count limits (creators, projects, members, etc.) are enforced atomically: two concurrent requests cannot both succeed past the cap. You'll see a modal in the UI explaining which limit was hit.
Daily limits (API requests, manual updates) reset at UTC midnight. If you hit your daily API limit, requests return HTTP 429.
Update frequency floors (min_*_hours) set a minimum interval between scheduled updates: your configured frequency is clamped to no lower than the tier minimum. These floors do not apply to manual "Update Now" triggers, which are governed instead by max_manual_scrape_triggers_per_day. See How scraping works for a full breakdown of manual vs. automatic data collection.
Stats retention: a daily background job prunes history older than your retention window. Ultra tier has unlimited retention.
In the dashboard: A modal appears with the limit key, your current count, and the cap. If your org is retroactively over a limit (e.g., after a tier downgrade), a banner appears at the top of every page until the org is back within limits.
In the API: Count limits return HTTP 402:
{
"data": null,
"error": "Limit reached: max_creators_per_org",
"meta": {
"code": "limit_reached",
"limitKey": "max_creators_per_org",
"current": 5,
"max": 5
}
}Daily rate limits return HTTP 429:
{
"data": null,
"error": "Rate limit exceeded",
"meta": {
"code": "rate_limit_exceeded",
"retryAfter": 3421
}
}retryAfter is seconds until UTC midnight when the counter resets.
One limit applies per user rather than per org:
| Limit | Description |
|---|---|
max_orgs_per_user | Maximum orgs a user can belong to |
The default is 6. If you need to belong to more orgs, contact support.
Limits are adjusted by the trackagoat team. There is no self-serve upgrade path yet.
To request a raise:
We'll apply a per-org override. Overrides take effect immediately with no restart required.
| Tier | Creators | Tracked videos | Projects | Members | API requests/day | Manual updates/day | Stats retention |
|---|---|---|---|---|---|---|---|
| Free | 5 | 10 | 1 | 2 | 0 | 0 | 90 days |
| Starter | 50 | 100 | 3 | 5 | 1,000 | 1 | 365 days |
| Ultra | 300 | 3,000 | 10 | 50 | 50,000 | 3 | Unlimited |