What the Play Store actually checks
Google Play's automated review for web app packages checks four things:
- Target API level — must be 35 (Android 15) for all new apps and updates in 2026.
- Minimum functionality (policy 4.3) — the app must do something useful. A single-screen static page fails; a multi-screen app, a SaaS dashboard, or a content platform passes.
- Data Safety form — you must declare what data your app collects (even if it's just analytics). Required for all submissions since 2023.
- Valid signature — the .aab must be signed with a keystore. The same keystore must be used for every future update of that package name.
TWA vs Capacitor: picking the right build for your web app
The build method you choose affects app size, PWA feature access, and Play Store compatibility. Both produce a valid .aab — the difference is what happens at runtime.
| Criterion | TWA | Capacitor |
|---|---|---|
| PWA manifest required | Yes (≥192px icon, HTTPS, service worker) | No — any HTTPS URL works |
| App size | ~2–5 MB | ~15–30 MB |
| Rendering | Chrome browser (shares cookies/cache) | System WebView (isolated) |
| Push notifications | Via web manifest | Native Firebase (more reliable) |
| Native plugins | No | Camera, biometrics, shortcuts |
| API level 35 | ✓ (via Bubblewrap) | ✓ (via Capacitor CLI) |
| Offline support | Requires service worker in your app | Can inject SW or use native cache |
The practical rule: if your PWA score is ≥ 80 and you have a service worker, TWA gives you a smaller, lighter app that shares the user's Chrome session. If your app is missing a service worker or you want native push notifications, use Capacitor. SaasToStore auto-selects based on your PWA check result — you don't have to decide manually.
Step-by-step: from web app URL to Play Store
1. Run a PWA check
Paste your URL into a free PWA checker. This tells you your manifest score, whether you have a service worker, and whether TWA or Capacitor is the right build path. Takes 10 seconds.
2. Configure your app identity
Set a package name in reverse-domain format (com.yourcompany.appname). This is permanent — it identifies your app in Play Store forever. Set it once; never change it. Also choose an app name (≤ 30 chars for Play Store) and upload a 512×512px icon.
3. Build the signed .aab
SaasToStore generates a signed Android App Bundle with a fresh keystore encrypted with a password only you receive by email. The build targets API level 35 automatically. Build time: ~5 minutes.
4. Create a Play Console account
Register at play.google.com/console and pay the one-time 25$ developer fee. Identity verification is required (Google checks ID against the account). Approval usually takes 1–2 days.
5. Create a new app and upload
In Play Console, create a new app → Production track → upload the .aab. Complete the required sections: app content, target audience, Data Safety declaration, content rating questionnaire, privacy policy URL. Then submit for review.
2026 compliance: what changed
Target API level 35
RequiredAll new submissions and updates must target Android 15 (API 35). Older target levels fail validation before review.
Play Integrity API
Deadline passedThe old SafetyNet Attestation API is deprecated. If your web app or backend calls SafetyNet, migrate to Play Integrity API.
Data Safety section
RequiredYou must accurately declare all data your app collects (even via third-party SDKs like analytics). Mismatches between your declaration and app behaviour trigger removal.
Identity verification
RequiredAll developer accounts now require identity verification (personal or organisation). Required for new accounts and some existing accounts.
Common rejection reasons for web app packages
- Policy 4.3 (minimum functionality) — your site must have real interactivity. A marketing landing page with one CTA gets rejected. A SaaS dashboard, a productivity app, a content platform all pass.
- Broken deep links — if tapping a link inside your app opens the system browser instead of staying in-app, reviewers flag this as low quality. Keep all navigation inside the WebView shell.
- Wrong keystore on update — updating an existing app with a different keystore causes an upload error. Always store your keystore securely and reuse it for every update.
- Missing privacy policy — required for all apps. Link a public URL in your Play Console listing.
- Digital goods sold outside Play Billing — if your app sells in-app digital content (not a web subscription), Play Billing is mandatory. SaaS subscriptions billed on the web are exempt.
Keeping the app up to date
One of the main advantages of a web app wrapper: your content is always live. When you deploy a fix or a new feature to your website, every user sees it immediately — no Play Store update required. You only rebuild and resubmit when:
- — You change the app name, icon, or splash screen
- — You add a native capability (push notifications, biometric auth)
- — Google raises the minimum target API level (next bump: API 36, expected 2027)
- — Your package version code needs to increment for a store policy reason
For everything else — UI changes, new pages, feature releases — deploy to your website and the app updates itself.
Beyond Google Play
The same build session that produces your Google Play AAB can also generate a Windows .msi, macOS .dmg, and Linux .AppImage — published to the Microsoft Store, the Snap Store, Flathub, and GitHub Releases. If you're going to package your web app once, there's no marginal cost to reaching all 7 stores in the same build.
Check if your web app is store-ready
Free PWA check — manifest score, service worker status, build path recommendation. 10 seconds.
Check my app →