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):

MetricMetric TypeThreshold TypeThreshold Value
Backend (TTFB)SyntheticAbsolute1s
Backend (TTFB)SyntheticRate of Change20%
Start RenderSyntheticAbsolute2s
Start RenderSyntheticRate of Change20%
Largest Contentful Paint (LCP)SyntheticAbsolute2.5s
Largest Contentful Paint (LCP)SyntheticRate of Change20%
Cumulative Layout Shift (CLS)SyntheticAbsolute0.1
Cumulative Layout Shift (CLS)SyntheticRate of Change20%
JS Total Blocking Time (TBT)SyntheticAbsolute200ms
JS Total Blocking Time (TBT)SyntheticRate of Change20%

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.