Pre-submission checklist for Google Play Console - catches common rejection reasons
Validates Google Play Console configuration before submission to catch common rejection reasons.
/plugin marketplace add rahulkeerthi/expo-toolkit/plugin install expo-toolkit@withqwerty[package_name or play_console_url]haikuValidate Google Play Console configuration before submission to catch common issues and policy violations.
Before running checks, gather information about the user's setup using AskUserQuestion:
AskUserQuestion({
questions: [
{
question: "What is your app's monetisation model?",
header: "Monetisation",
options: [
{
label: "Freemium (IAP/Subscriptions)",
description: "Free download with in-app purchases or subscriptions",
},
{
label: "Paid Upfront",
description: "One-time purchase price to download the app",
},
{
label: "Free (No IAP)",
description: "Completely free with no monetisation",
},
],
multiSelect: false,
},
{
question: "Is this your first submission to Google Play?",
header: "First Release",
options: [
{
label: "Yes, first time",
description: "App has never been published to Play Store",
},
{
label: "No, updating existing app",
description: "App already exists on Play Store",
},
],
multiSelect: false,
},
{
question: "What testing track will you use?",
header: "Testing Track",
options: [
{
label: "Internal testing",
description: "Up to 100 testers, instant availability",
},
{
label: "Closed testing",
description: "Limited testers, requires review",
},
{
label: "Open testing",
description: "Anyone can join, requires review",
},
{
label: "Production",
description: "Public release to all users",
},
],
multiSelect: false,
},
{
question: "Do you want me to use browser automation to check Play Console?",
header: "Browser",
options: [
{
label: "Yes, use browser (Recommended)",
description: "I'll navigate Play Console and verify each item",
},
{
label: "No, walk me through manually",
description: "I'll provide a checklist for you to verify",
},
],
multiSelect: false,
},
],
});
| Monetisation | Skip These Checks |
|---|---|
| Free (No IAP) | IAP validation, RevenueCat cross-check, Subscription checks |
| Paid Upfront | IAP validation, RevenueCat cross-check, Subscription checks |
| Freemium | Run all checks |
| First Release | Additional Checks |
|---|---|
| Yes | Verify manual AAB upload guidance, 14-day testing requirement (personal accounts) |
| No | Check version code increment, existing listing updates |
If browser automation selected:
// Test Claude in Chrome MCP connectivity
mcp__claude-in-chrome__tabs_context_mcp({ createIfEmpty: true });
If this fails, STOP IMMEDIATELY and display:
šØ CLAUDE IN CHROME MCP NOT AVAILABLE
The android-preflight command requires browser automation via Claude in Chrome.
To fix:
1. Ensure Chrome is running
2. Verify Claude in Chrome extension is installed and enabled
3. Check MCP server is connected in Claude Code settings
Cannot proceed without browser access. Re-run with manual walkthrough option.
After navigating to Play Console, verify the user is logged in:
If login screen detected, STOP and display:
š GOOGLE PLAY CONSOLE LOGIN REQUIRED
Please log in to Google Play Console in your browser, then run this command again.
URL: https://play.google.com/console
Accept either:
https://play.google.com/console/u/0/developers/.../app/.../...com.yourcompany.yourappExtract package name and construct base URL if needed.
Navigate to: Play Console ā Your app
Basic Verification:
Navigate to: Grow ā Store presence ā Main store listing
App Details:
Graphics:
Categorisation:
Navigate to: Grow ā Store presence ā Store settings
Contact Details:
Navigate to: Policy and programs ā App content ā Content rating
Rating Questionnaire:
Navigate to: Policy and programs ā App content ā Target audience and content
Target Age:
Navigate to: Policy and programs ā App content ā Privacy policy
Privacy Configuration:
Navigate to: Policy and programs ā App content ā Data safety
Data Safety Form:
Navigate to: Policy and programs ā App content ā Ads
Ads Configuration:
Navigate to: Policy and programs ā App content ā App access
Demo Credentials:
Navigate to: Monetize ā Products ā In-app products / Subscriptions
Product Status:
Subscription-Specific:
If RevenueCat MCP available:
const apps = mcp__revenuecat__mcp_RC_list_apps({ project_id: "proj..." });
const products = mcp__revenuecat__mcp_RC_list_products({ project_id: "proj..." });
Cross-Validation:
If RevenueCat MCP not available: Navigate to RevenueCat dashboard via browser and verify:
Navigate to: Release ā Testing ā [Internal/Closed/Open testing]
For First Release (Personal Accounts):
Track Configuration:
Navigate to: Release ā Production
Release Requirements:
If this is the first submission:
š± FIRST RELEASE REQUIREMENTS
------------------------------------------
For your first Android release:
1. AAB Upload: You must manually upload your first AAB file
- Build: eas build --platform android --profile production
- Download AAB from EAS dashboard
- Upload to Play Console ā Release ā Production ā Create release
2. After first upload, EAS --auto-submit will work for future releases
3. Personal Account Testing Requirement:
- Personal developer accounts (not organisation accounts)
- Must run closed testing with 12+ testers for 14+ days
- Before production access is granted
- This is Google's fraud prevention policy
4. Review Timeline:
- First submission: 7+ days typical
- Updates to existing apps: 1-3 days typical
Test that all configured URLs are reachable:
WebFetch({
url: privacyPolicyUrl,
prompt: "Does this page load successfully? Return YES or NO.",
});
URLs to validate:
Search codebase for compliance with Google Play requirements:
// Check for restore purchases implementation
Grep({ pattern: "restorePurchases|restoreTransactions", type: "ts" });
// Check for privacy policy link in-app
Grep({ pattern: "privacy|privacyPolicy|privacy-policy", type: "ts" });
// Check for billing client
Grep({ pattern: "BillingClient|useIAP|react-native-iap|revenuecat", type: "ts" });
Required in Code:
Generate a structured report:
============================================
GOOGLE PLAY CONSOLE PRE-FLIGHT CHECK
============================================
App: {app_name}
Package: {package_name}
Track: {testing_track}
Date: {date}
š« BLOCKING ISSUES (will cause rejection)
------------------------------------------
- [Area]: [Specific issue]
- [Area]: [Specific issue]
ā ļø WARNINGS (may cause rejection or delays)
------------------------------------------
- [Area]: [Issue description]
ā
PASSED CHECKS
------------------------------------------
- Store listing complete
- Content rating configured
- Privacy policy accessible
- [etc.]
š MANUAL VERIFICATION NEEDED
------------------------------------------
- Demo account credentials work
- Screenshots accurately represent app
- Data safety responses accurate
- [etc.]
š± FIRST RELEASE NOTES (if applicable)
------------------------------------------
- Remember: First AAB must be manually uploaded
- Testing requirement: [status]
============================================
RECOMMENDATION: [Ready to submit / Fix X issues first]
============================================
| Policy Area | Common Issue | How to Fix |
|---|---|---|
| Deceptive behavior | Misleading app functionality | Ensure description matches actual features |
| User data | Privacy policy missing/inaccessible | Add accessible privacy policy |
| Malicious behavior | Requesting unnecessary permissions | Remove unused permissions |
| Impersonation | Using trademarked content | Remove trademarked material |
| Inappropriate content | Age rating mismatch | Re-submit content rating questionnaire |
| Issue | Cause | Fix |
|---|---|---|
| Version code conflict | Same version already exists | Increment versionCode in build |
| Signing key mismatch | Different upload key | Use correct keystore |
| Target API level | API level too low | Update targetSdkVersion to meet requirements |
| 64-bit requirement | Missing arm64 support | Ensure build includes 64-bit libraries |
| Issue | Cause | Fix |
|---|---|---|
| Missing graphics | Required assets not uploaded | Upload all required screenshots/graphics |
| Description violations | Prohibited content in text | Review and update description |
| Keyword stuffing | Excessive keywords | Use natural language in description |
https://play.google.com/console/u/0/developers/{dev_id}/app/{app_id}.../store-listing.../content-rating.../data-safety.../managed-products.../subscriptions.../tracks/{track_id}.../productionhaiku model for fast validationIf user selected manual walkthrough instead of browser automation, provide this checklist:
š GOOGLE PLAY CONSOLE MANUAL CHECKLIST
============================================
Open Play Console: https://play.google.com/console
Navigate to each section and verify:
ā” STORE LISTING (Grow ā Store presence ā Main store listing)
ā” App name, short description, full description filled
ā” App icon (512x512) uploaded
ā” Feature graphic (1024x500) uploaded
ā” At least 2 phone screenshots uploaded
ā” Screenshots show actual app functionality
ā” STORE SETTINGS (Grow ā Store presence ā Store settings)
ā” Developer email provided
ā” Privacy policy URL configured and accessible
ā” CONTENT RATING (Policy and programs ā App content ā Content rating)
ā” Rating questionnaire completed (not "Unrated")
ā” TARGET AUDIENCE (Policy and programs ā App content ā Target audience)
ā” Target age group selected
ā” DATA SAFETY (Policy and programs ā App content ā Data safety)
ā” Data safety form completed
ā” APP ACCESS (Policy and programs ā App content ā App access)
ā” If login required: Demo credentials provided
ā” IN-APP PRODUCTS (If applicable - Monetize ā Products)
ā” Products in "Active" status
ā” Product IDs match app code
ā” RELEASE (Release ā Production/Testing)
ā” All setup tasks show green checkmarks
ā” AAB uploaded (manual for first release)
ā” Release notes provided
Let me know which items pass or fail, and I'll help resolve any issues.
If a section fails to load or is inaccessible:
If logged out: