Website Performance & Accessibility Tools

Core Web Vitals Budget Calculator

Turn the documented LCP, INP and CLS thresholds into per-phase budgets for mobile and desktop, check measured p75 values against them, and see where the time has to come from.

  • Pass/needs-improvement/poor per metric
  • Phase budget table
  • Headroom and gap
Runs in your browser

Everything you paste, type or drop is processed in this browser tab. It is not uploaded, logged, stored or sent to analytics.

CWV budget workspace

1 Scenario and targets

Examples:
Device segment

Google assesses mobile and desktop separately; plan a budget for each.

Defaults are the published “good” thresholds. A stricter target gives you a safety margin.

2 Measured 75th percentile (optional)

LCP subparts you measured (ms)

From the DevTools Performance panel, the LCP Element Analyzer or a RUM tool. Leave blank to see budgets only.

INP phase split (convention)

web.dev defines the three phases but sets no per-phase budget. 30 / 40 / 30 is an A2Z starting point; change it to suit your app.

3 Budget and verdict

Loading the published thresholds…

What the Core Web Vitals Budget Calculator does

This calculator turns the published Core Web Vitals thresholds - LCP 2.5 seconds, INP 200 milliseconds and CLS 0.1, each judged at the 75th percentile of real page loads - into a working budget, checks your measured p75 values against it, and shows which part of the page load has to get faster.

The LCP target is split into its four subparts using the proportions web.dev recommends, so a vague "make LCP faster" becomes a concrete number of milliseconds per phase. Everything is arithmetic in your browser; nothing you type is sent anywhere.

How to use it

  1. Pick the device segment. Google reports mobile and desktop separately, and mobile is usually the harder budget.
  2. Keep the default targets (the published good thresholds) or set stricter ones to leave a safety margin - for example LCP 2,000 ms.
  3. Enter your measured 75th-percentile LCP, INP and CLS and say whether they come from real users (CrUX, your RUM tool) or from a single lab run.
  4. Optionally open the LCP subparts section and enter the four phase timings from DevTools or the LCP Element Analyzer.
  5. Read the verdict, the headroom for each metric and the phase table: the phase with the largest positive "over" figure is where the time has to come from.

Reading the results

A metric is good when its p75 is at or below the good threshold, and poor when it is above the poor threshold (LCP 4 s, INP 500 ms, CLS 0.25). In between it needs improvement. A page passes the Core Web Vitals assessment only when all three are good.

Headroom is the target minus the measured value. Negative headroom is the amount you must remove, at the 75th percentile - improving the median is not enough if the slowest quarter of visits stays slow.

The LCP phase budget uses web.dev's guidance: roughly 40% TTFB, under 10% resource load delay, about 40% resource load duration and under 10% element render delay. A phase far over its share is the most promising place to work.

The INP split into input delay, processing and presentation is a convention, not a published standard. Use it to agree a working budget with your team, then adjust it.

Worked example: a mobile shop with a slow hero image

A retailer's mobile field data shows LCP 3,400 ms, INP 170 ms and CLS 0.06 at p75. INP and CLS are good; LCP is 900 ms over the 2,500 ms threshold and below the 4,000 ms poor line, so it needs improvement and the page does not pass.

With a 2,500 ms target the phase budgets are 1,000 ms TTFB (40%), 250 ms load delay (10%), 1,000 ms load duration (40%) and 250 ms render delay (10%). The measured subparts are 1,100, 900, 1,000 and 400 ms, which add up to the 3,400 ms LCP.

Load delay is 650 ms over budget - by far the largest gap. The browser is finding the hero image late, typically because it is lazy-loaded, set by script or referenced only in CSS. Fixing discovery alone would bring LCP to about 2,750 ms; trimming 150 ms of render-blocking CSS and 100 ms of server time closes the rest.

Formulas and scoring rules

Rating
good if p75 <= good; poor if p75 > poor; otherwise needs improvementLCP 2,500 / 4,000 ms; INP 200 / 500 ms; CLS 0.1 / 0.25.
Headroom
headroom = target - measured_p75Negative means over target. Shown in ms (CLS to three decimals).
LCP phase budget
phase_budget = LCP_target x share (0.40, 0.10, 0.40, 0.10)Shares follow web.dev's Optimize LCP guidance; displayed to the nearest ms.
INP phase budget
phase_budget = INP_target x split (default 0.30, 0.40, 0.30)The split is an A2Z convention and must add up to 100%.
75th percentile (nearest rank)
p75 = the value at rank ceil(0.75 x n) of n sorted samplesHow to compute p75 yourself from raw RUM samples.

Field data, lab data and why the difference decides the verdict

The assessment uses field data: what real visitors experienced, collected by Chrome (the Chrome UX Report) or by your own real-user monitoring. Lab tools such as Lighthouse run one load on one simulated device. They are excellent for debugging and useless as a verdict, because the 75th percentile of your audience may be on slower phones and networks than the test assumed.

INP in particular cannot be measured in a lab run with no user: it needs real interactions. Total Blocking Time is a lab proxy that correlates with INP but is not the same number. Choose "lab" in the evidence box when that is what you have, and the page will say what the numbers can and cannot tell you.

Limitations: what the result does not prove

  • It checks numbers you provide; it does not measure your site. Use CrUX, PageSpeed Insights field data or your own RUM for p75 values.
  • Subparts measured on one load, or p75 values of each subpart, rarely add up exactly to the p75 LCP. The phase comparison is indicative, not an exact decomposition.
  • Thresholds are Google's current published values, checked on the review date shown on the page. If Google changes them, the file is updated; the page never fetches them live.
  • Passing Core Web Vitals is one small signal among many. It does not guarantee rankings or conversions.

Privacy: where your data goes

Everything you paste, type or drop is processed in this browser tab. It is not uploaded, logged, stored or sent to analytics. Session recording and tag-manager scripts are switched off on this page.

Standards and sources

Frequently asked questions

What are the current Core Web Vitals thresholds?

Largest Contentful Paint is good at 2.5 seconds or less and poor above 4 seconds; Interaction to Next Paint is good at 200 ms or less and poor above 500 ms; Cumulative Layout Shift is good at 0.1 or less and poor above 0.25. Each is judged at the 75th percentile of page loads.

Why is the 75th percentile used instead of the average?

An average hides the slow visits that frustrate people. Requiring three in four page loads to be good means most visitors - including many on mid-range phones - get a good experience, while a few extreme outliers cannot fail the page on their own.

Do I need to pass on both mobile and desktop?

They are assessed separately, so a page can pass on desktop and fail on mobile. Budget each segment on its own; mobile usually needs the tighter LCP and INP plan because of slower CPUs and networks.

How should I split my LCP budget between phases?

web.dev suggests about 40% for TTFB, under 10% for resource load delay, about 40% for resource load duration and under 10% for element render delay. Time spent in the two delay phases, when nothing useful is downloading, is the easiest to remove.

Can a Lighthouse score tell me whether I pass Core Web Vitals?

No. Lighthouse is a lab test of one simulated load and does not measure INP. The pass or fail verdict comes from field data at the 75th percentile, which you can see in PageSpeed Insights or CrUX when your site has enough traffic.

Is a stricter target than the threshold worth setting?

Usually yes. Field p75 values move with traffic mix, releases and third-party scripts, so a page sitting at exactly 2.5 s will slip over it. A target around 2.0 s for LCP gives a margin that absorbs normal variation.

Last reviewed by the A2Z.Tools team against the sources listed above.

Rate this tool

Was this tool useful? Your feedback helps us improve it.

No ratings yet — be the first to rate this tool.
Your rating (required)
0 / 2000

Please do not include passwords, payment details or other sensitive information.

Your feedback is sent privately to the A2Z.Tools team and will not be posted publicly.