How PWAStore verifies apps
A listing is a claim that an app installs and behaves like an app. PWAStore checks that claim with a real browser, bounded crawling, and scheduled re-crawls.
- The manifest loads, parses, and declares a name, app ID, start URL, and display mode.
- The start URL opens successfully in a real headless browser session.
- A manifest icon of 512px or larger is fetched and decoded.
- A manifest description and screenshot are present and usable.
- The page renders on a 390px mobile viewport without serious horizontal overflow.
- Only public HTTP and HTTPS targets are accepted; local and private address ranges are rejected before a request is made.
- Each crawl has a bounded timeout, response size, and redirect budget.
- Fetched icons and screenshots are treated as untrusted input and normalized before upload.
- No submitted page can direct the crawler to internal services or arbitrary file paths.
Listed apps are re-crawled on a schedule. A re-crawl can refresh derived metadata and screenshots only after the crawl completes and is verified.
If an app stops serving an installable manifest or its start URL stops working, the app is removed from the public catalogue.
Apps in 18+ categories stay hidden from browse, category, and search results until a visitor confirms they are an adult. The detail pages remain indexable so search engines can still read the app description and metadata.
Age confirmation is a browsing preference. It does not change stored app data, and it is not used to verify a visitor's identity.
App-Grade is awarded when every required manifest, icon, screenshot, and mobile-render check passes.
Fast uses Chrome UX Report field data. LCP, INP, and CLS must all meet PWAStore's thresholds at the 75th percentile. Missing field data is neutral, never a failure.
Modern Install marks a detected modern installation integration. It does not prove that a visitor completed an install.
Read the full quality standard for every check and threshold.