Performance budgets
How to create and edit performance budgets for your RUM and Synthetic metrics
Why use performance budgets?
Performance budgets are essential for monitoring web performance. They help you stay on top of your RUM and Synthetic metrics by alerting you when a metric exceeds or recovers from a defined threshold.
Why alerts matter?
SpeedCurve alerts you when performance budgets are crossed—either above or below the threshold. Alerts are sent via email or webhook (e.g., Slack). This dual-directional alert system notifies you when a performance issue occurs and also helps you confirm when fixes resolve performance issues.
To reduce noise, SpeedCurve only alerts you when the status of a budget changes (e.g., from under to over budget). Repeated overages do not trigger repeated alerts.
Creating a performance budget
To create a budget:
- Go to the Budgets section in SpeedCurve.
- Click Add Budget.
- Complete the Budget Settings form.

Each budget consists of the following components, that you define in the Budget Settings form:
1. Metric
Choose a metric to monitor (including Custom Metrics). Also select the corresponding statistic (e.g., average, p75).
2. Filters
Apply filters to focus the budget on a specific:
- Site
- Page Label
- Region
- Browser
Use the Each option to apply the budget across all supported values within a filter without needing to create multiple budgets.
3. Threshold type and value
Choose one:
- Absolute threshold: A fixed value (e.g., Largest Contentful Paint < 2.5s)
- Rate of change threshold: A relative change compared to previous values
As you set your threshold for your performance budget you'll notice the Preview above the Budget settings form updating. Use this preview as a visual guide to tune your performance budget.
Absolute threshold preview: A red line appears in the preview chart.

Rate of change threshold preview: Red and green zones indicate acceptable/unacceptable changes.

(See How thresholds work below.)
4. Alert settings
Enable alerts and configure how often they trigger. You can delay alerts until a threshold is crossed multiple times, helping to reduce false alarms.
5. Name and description
Optional, but recommended for clarity—especially in team settings.
Click SAVE when done.
How thresholds work
Absolute thresholds
A metric is:
- Over budget if it exceeds the threshold.
- Under budget if it's equal to or below the threshold.
Visualized as a red line in the chart:

Rate of change (relative) thresholds
A metric crosses:
- Over budget when it increases beyond the acceptable percentage.
- Under when it improves beyond the acceptable range.
- No Crossing when it is within the acceptable rate of change.
Red = negative change.
Green = positive change.
For example, in the chart below the rate of change threshold is threshold is 50%. The most recent value on the chart was 33kb and a 36% change from the previous value. This means the most recent value is within the 50% rate of change threshold. So it is not considered over or under budget. We call this budget status no crossing. But if we look at the value on the 12th of May it was 100kb and a 185% change from the previous value. You can see the metric line has run into the red zone. We call this budget status over, because it's above (or over) our acceptable rate of change of 50%.

Larger bucket sizes
The alert “bucket size” is how many tests (Synthetic) or hours (RUM) must consecutively cross the threshold before triggering an alert. This is adjusted using the Alert after input within Budget settings form.
Example:
- Threshold: 20%
- Bucket size: 3
An alert is sent only if all 3 latest values exceed the 20% change from the previous 3 values.

Default Performance Budgets
SpeedCurve provides default budgets when you sign up (follow the links to learn why we think they're good metrics to consider):
Metric | Metric Type | Threshold Type | Threshold Value |
---|---|---|---|
Backend (TTFB) | Synthetic | Absolute | 1s |
Backend (TTFB) | Synthetic | Rate of Change | 20% |
Start Render | Synthetic | Absolute | 2s |
Start Render | Synthetic | Rate of Change | 20% |
Largest Contentful Paint (LCP) | Synthetic | Absolute | 2.5s |
Largest Contentful Paint (LCP) | Synthetic | Rate of Change | 20% |
Cumulative Layout Shift (CLS) | Synthetic | Absolute | 0.1 |
Cumulative Layout Shift (CLS) | Synthetic | Rate of Change | 20% |
JS Total Blocking Time (TBT) | Synthetic | Absolute | 200ms |
JS Total Blocking Time (TBT) | Synthetic | Rate of Change | 20% |
Use these as starting points and customize them based on your site needs. See our full guide to performance budgets for recommendations.
Configuring alerts
Budget alerts are sent to the email addresses and webhooks that are configured in your settings.
You can define budget alert recipients in two places:
1. Account settings
Go to the Alerts section of your account to manage team-wide email and webhook recipients.

2. Budget settings
Within each budget, define:
- Team alert preferences (default)
- Or, Custom emails/webhooks for that budget

Webhooks
Tuning budgets to reduce alert noise
If your metrics frequently fluctuate around the threshold, you may get too many alerts. Adjust the Alert After setting to only trigger alerts after sustained threshold crossings.
Example:
- Set “Alert After” to 3 hours for RUM
- Now alerts only trigger if the threshold is crossed for 3 consecutive hours

This helps prevent over-alerting while ensuring significant regressions are still caught.

Updated 17 days ago