Methodology
How LeakBrief finds one revenue leak per Shopify store
LeakBrief runs ten checks on public Shopify storefront pages, scores every finding by weight, severity and confidence, and keeps only the strongest one.
Which checks does LeakBrief run?
10 checks, each tied to a revenue lever such as availability, shipping costs, trust or speed, and each triggered only by a measurable signal.
| Check | What triggers it | Category | Weight |
|---|---|---|---|
| Sold-out variants | At least 25% of at least 30 catalog variants show as sold out. | Merchandising | 0.90 |
| Shipping cost not visible | Neither the home page nor the sampled product page shows a shipping cost, a flat rate or a free-shipping threshold before the cart. | Checkout friction | 0.85 |
| Free-shipping threshold gap | The free-shipping threshold is 1.3 to 4 times the median product price. | Order value | 0.80 |
| No reviews on the product page | The sampled product page shows neither a star rating in its structured data nor a review widget once rendered. | Trust | 0.75 |
| Returns not mentioned | The median product costs at least 60 in the store's currency, and the sampled product page never mentions returns or exchanges. | Trust | 0.70 |
| Products with one image | At least 25% of catalog products have one image or none. | Product page content | 0.60 |
| No pay-later option at a high price | The median product costs at least 100 in the store's currency, and the sampled product page shows no pay-in-instalments message. | Payment | 0.60 |
| Thin product copy | At least 40% of descriptions are under 150 characters, and the sampled product page shows under 400 characters of copy. | Product page content | 0.55 |
| Slow mobile loading | Google's real-user data puts mobile Largest Contentful Paint above 2.5 seconds at the 75th percentile. | Speed | 0.65 |
| Script weight | Without real-user speed data, the home page loads scripts from at least 15 third-party domains or weighs at least 1500 KB. | Speed | 0.45 |
Which data does a scan read?
Only public storefront pages and Google's real-user speed data, within the limits LeakBriefBot publishes.
- robots.txt, read first, before any other page
- The home page
- /meta.json, for the store name, currency and country
- The first page of the public product catalog, /products.json?limit=250
- Up to two product pages
- The shipping, refund and terms of service pages, to see whether each one answers
- The home page and one product page, rendered once in a headless browser at mobile size, with stylesheets and scripts but no images, media or fonts
- Google PageSpeed Insights for the home page's real-user speed data, a request to Google, not to the store
How does LeakBrief pick the one finding?
It scores every check that fires and keeps the highest score, as long as that score reaches 0.20.
Score = weight × severity × confidence factor × specificity bonus
- Severity grows with how pronounced the signal is on the store, from 0 to 1.
- The confidence factor is 1.00 for high, 0.75 for medium and 0.45 for low confidence. Checks that look for something missing on a page need the rendered page to reach medium confidence.
- Evidence that holds a number specific to the store, such as a share, a price or a load time, multiplies the score by 1.20.
- A low-confidence finding never leads while a medium or high one exists.
- The script weight check is a rough proxy, so it leads only when it is the only check that fires.
- Up to 2 more findings scoring at least 0.10 appear in the unlocked brief, never in the first line.
- Below 0.20, the brief has no finding and no credit is used.
How do illustrative ranges work?
Each check maps to a fixed band from public benchmarks, shown as a range and always labelled illustrative, never as a measurement of a store's revenue.
| Check | Metric | Range | Basis |
|---|---|---|---|
| Sold-out variants | Orders at risk | 1 to 4% | Out-of-stock impact studies (Source being confirmed) |
| Shipping cost not visible | Conversion rate uplift | 1 to 5% | Baymard 2025: 40% cite extra costs, 12% total cost not visible |
| Free-shipping threshold gap | Average order value uplift | 3 to 8% | Free-shipping threshold testing case studies; Baymard 2025 (Source being confirmed) |
| No reviews on the product page | Conversion rate uplift | 2 to 6% | Public benchmarks on reviews and conversion (Source being confirmed) |
| Returns not mentioned | Conversion rate uplift | 1 to 3% | Baymard 2025: 13% cite the returns policy |
| Products with one image | Conversion rate uplift | 1 to 3% | Public benchmarks on product imagery and conversion (Source being confirmed) |
| No pay-later option at a high price | Average order value uplift | 2 to 6% | Public benchmarks on buy now pay later and order value (Source being confirmed) |
| Thin product copy | Conversion rate uplift | 0.5 to 2% | Public benchmarks on product description quality (Source being confirmed) |
| Slow mobile loading | Conversion rate uplift | 1 to 4% | Google Core Web Vitals 2.5 s LCP threshold (Source being confirmed) |
| Script weight | Conversion rate uplift | 0.5 to 2% | Public benchmarks on third-party script weight (Source being confirmed) |
Illustrative range based on public benchmarks and public storefront data; not a measurement of your store's revenue.
What are the limits of a scan?
A scan is a snapshot of a few public pages at one moment, so it can miss what changes later, varies by visitor or loads after the page.
- It samples at most two product pages, so a product-page finding may not hold for the whole catalog.
- It renders pages once at mobile size; content behind a click, a location prompt or a late-loading app can be missed.
- Catalog checks need the public products.json; when a store turns it off, those checks are skipped.
- Speed data comes from Google's real-user report; without enough traffic, the speed check falls back to script weight or is skipped.
- Ranges come from public benchmarks, not from the store's analytics.
- It makes no legal, policy or accessibility findings and gives no score or grade.