PERFORMANCE · APPS · OPS · 19 MARCH 2026 · 7 MIN READ
App performance budgets: making vendors prove it
Shopify already publishes the budget every app had to pass to get listed. Almost nobody re-runs that test after install, which is why the app that was fast in review is the one slowing you down now.
Use the budget Shopify already published rather than inventing one. To be listed, an app "shouldn't reduce Lighthouse performance scores by more than 10 points", measured before and after install across three page types that Shopify weights as home 17%, product details 40% and collection 43%. Shopify also publishes asset guidance: a minified JavaScript bundle "should ideally be 16 KB or less", and an app entry point should be "less than 10KB of JavaScript and less than 50KB of CSS on a page". That is a complete, vendor-authored budget you can quote back. Hold apps to it the way you would any supplier commitment: test during the trial, before you pay; re-test quarterly, because the app updates without asking you; and remove the ones that fail rather than negotiating with them.
IN SHORT
- Shopify's App Store requirement is that an app "shouldn't reduce Lighthouse performance scores by more than 10 points", so a budget already exists and you do not need to invent one.
- Shopify tests that impact across weighted page types — home 17%, product details 40%, collection 43% — which tells you exactly which three pages to measure and how much each should count.
- Shopify's asset guidance is specific: a minified JavaScript bundle "should ideally be 16 KB or less", and an app entry point should be "less than 10KB of JavaScript and less than 50KB of CSS on a page".
- App Store approval is a point-in-time test. Nothing re-runs it when the vendor ships an update to your store, which is why an app can pass review and still be your worst offender a year later.
- Shopify notes that "Lighthouse scores can vary between runs" and recommends averaging across a few consecutive tests — a single before-and-after pair is not evidence either way.
- The budget only works if somebody is allowed to act on it, which means the authority to remove a paid app has to be agreed before the test is run, not after.
The budget already exists, and the vendor already agreed to it
Performance budget conversations usually stall on the question of what the number should be. On Shopify, that question is already answered, and it is answered by the platform the vendor sells through.
Shopify's app requirements state that an app "shouldn't reduce Lighthouse performance scores by more than 10 points". The test method is published with it: Lighthouse scores before and after installation, across three page types weighted home 17%, product details 40% and collection 43%. The same 10-point threshold applies to Built for Shopify status, so a vendor advertising that badge has explicitly signed up to it.
Two things follow. The first is that you have a measurement protocol you did not have to design — the same three pages, the same before-and-after, the same weighting. The second is rhetorical and more useful in practice: when you ask a vendor to demonstrate their app's impact, you are not imposing a bespoke hurdle. You are asking them to repeat a test they already passed, on your store rather than a demo one.
The asset guidance underneath it is equally quotable. Shopify recommends a minified JavaScript bundle of "16 KB or less", an entry point of "less than 10KB of JavaScript and less than 50KB of CSS on a page", loading non-critical resources on interaction, and using defer where execution order matters and async where it does not. If you want a technical question that separates vendors quickly, ask for their entry-point size against that 10 KB figure.
Why the app that passed review is still slowing you down
App Store review is a point-in-time test of a specific version on a test store. That is a reasonable thing for a marketplace to do and it is not a guarantee about your site next quarter, for three reasons.
- The app changes after you install it. Vendors ship features, and features ship JavaScript. Nothing re-runs the 10-point test against your store when they do, and you will not be told.
- Budgets do not compose. Nine apps each costing well under ten points can still ruin a page between them, because they compete for the same main thread and the same bandwidth. Per-app compliance says nothing about the total.
- Your store is not the test store. The review store had a clean theme and a handful of products. Yours has a 900-product collection page, a personalisation script, and a hero image somebody uploaded at full resolution. Impact measured there does not transfer.
The measurement, done in a way you can defend
The temptation is to buy a monitoring tool first. Do that later, if at all. The test that answers the question you actually have is the one Shopify already specifies, and you can run it on a preview theme in an afternoon.
Take a theme preview without the app, and the same theme with it installed and configured as you would actually use it. Run Lighthouse against the home page, a real product page and your largest collection page, several times each in the same conditions, and compare the averages using Shopify's weighting. Shopify's own caution applies: "Lighthouse scores can vary between runs. Consider running these tests frequently during your development, and averaging your scores across a few consecutive Lighthouse tests." One pair of numbers is an anecdote.
Lighthouse is a laboratory test, so treat it as the pre-purchase gate rather than the whole picture. Once the app is live, the question changes to what real visitors experience, and field data on the Core Web Vitals is what answers that. The two are complementary: lab data tells you whether to install it, field data tells you whether to keep it.
Two details that catch people out. Configure the app the way you will really run it — an app measured with every feature switched off is a measurement of nothing. And check the collection page hardest, since Shopify weights it most heavily and it is where an app that injects per-product markup does the most damage.
Putting the budget in the commercial relationship
A budget that lives in an engineer's notes is a preference. A budget that lives in the procurement process is a constraint, and the difference is whether anyone is allowed to act on a failure.
The cheapest place to enforce it is the trial. Every app worth having has one, and the trial is the only period in which removing the app costs you nothing and embarrasses nobody. Run the test in week one, not week four. An app that has been in production for a month has acquired a champion in your business, and the conversation stops being about milliseconds.
For anything significant, ask for the numbers in writing before you install: entry-point JavaScript and CSS sizes, which pages the app loads on, whether it can be limited to specific templates, and what it does when their API is slow or down. A vendor who has done the work answers these in a paragraph. A vendor who cannot is telling you something useful.
Then write the standard down where the next person can find it: apps are tested during trial against Shopify's 10-point threshold, re-tested quarterly, and a named person can remove one that fails. That last clause is the one that matters — without it the test produces a report nobody acts on, which is worse than not testing, because now you can prove you knew.
When an app fails, in order of preference
Failing the budget is not automatically a removal. It is a decision with four options, and taking them in order avoids most of the arguments.
- Scope it. Many apps load everywhere by default and are only needed on one template. Restricting a size-guide app to product pages can bring the weighted impact inside budget without losing anything.
- Configure it down. Disable the features you are not using. This is free, reversible, and surprisingly often sufficient.
- Replace it. Another vendor in the same category may be an order of magnitude lighter. Test the replacement the same way before committing, or you have swapped a known cost for an unknown one.
- Remove it and rebuild the one thing you needed. Frequently the app was installed for a single feature that is a small piece of theme work. This is the most expensive option up front and the cheapest to own, and it is the right answer more often than teams expect.
- Accept it, explicitly. Some apps earn their cost — a reviews platform or a subscription engine may be worth ten points. Write down that you decided this and why, so the next performance review does not relitigate it.
The version of this that actually gets done
Most performance governance fails because it is too heavy. The minimum viable version is one recurring calendar entry per quarter and one spreadsheet: app name, owner, what it is for, the measured weighted Lighthouse delta, and the date last tested. Five columns.
Run it against the three page types, average a few runs, and look at the total as well as the individual rows. If the whole stack is costing you more than the sum you would tolerate from any one app, the problem is the number of apps, not the worst one — and that is a different project. Untangling it is most of what a [speed optimisation](/services/optimize/shopify-speed-optimization) engagement does, and the spreadsheet is how you know it is needed before the traffic tells you.
The honest note to end on: a performance budget is a decision-making tool, not a moral position. Its job is to make the trade explicit — this app costs this much speed and delivers this much value — so the answer is a choice somebody made rather than an accumulation nobody noticed.
Questions this raises
What is a reasonable performance budget for a Shopify app?
Start with Shopify's own: an app "shouldn't reduce Lighthouse performance scores by more than 10 points", measured before and after install across home, product and collection pages weighted 17%, 40% and 43%. It is defensible precisely because it is the standard the vendor already agreed to in order to be listed.
How do I test an app's performance impact before buying it?
Install it on a duplicate theme, configure it as you would really use it, and run Lighthouse on the three weighted page types with and without it — several runs each, averaged, since Shopify notes that scores vary between runs. Do this during the trial, while removing it is free.
Is Lighthouse enough, or do I need real user monitoring?
Lighthouse is the right gate for a buying decision because it is repeatable and controlled. It does not tell you what real visitors on real networks experience, which is what field Core Web Vitals data is for. Use the lab test to decide whether to install; use field data to decide whether to keep.
Each of our apps is within budget but the site is still slow. What now?
Per-app compliance does not add up to a fast site — nine compliant apps still compete for one main thread and one connection. Measure the whole stack against a clean theme rather than app by app, and treat the total as the number that matters. If the total is the problem, the fix is fewer apps, not a better one.
What should I ask a vendor before installing their app?
Their entry-point JavaScript and CSS sizes against Shopify's 10 KB and 50 KB guidance, which pages the app loads on, whether it can be restricted to specific templates, how it behaves when their service is slow or unavailable, and whether they will show a before-and-after Lighthouse comparison. Clear answers indicate a vendor who has measured; vague ones indicate one who has not.
Should we rebuild app features in the theme instead?
Sometimes, and not as a reflex. It is usually right when you installed an app for one small feature and are carrying its whole payload for it. It is usually wrong for anything with real ongoing complexity — reviews, subscriptions, tax — where you would be taking on permanent maintenance to save a few points.
NEXT STEP
Free store audit
A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.
