Free Resource
62 checks across metadata, assets, iOS binary, Android binary, privacy, localization, and final pre-flight — the items that actually get apps rejected.
Text fields are the #1 cause of launch-day do-overs. Run every field against the store's live character limits — not the limit you remember from last year.
App name is 30 characters or fewer on the App Store and Google Play (both enforce the same cap as of 2022).
Subtitle (App Store only) is 30 characters or fewer and carries a primary keyword not already in the app name.
Keyword field (App Store) is 100 characters or fewer, comma-separated, no spaces after commas, no duplicates with the app name.
Short description (Google Play) is 80 characters or fewer — this is the text above the fold on the listing.
Full description is 4,000 characters or fewer on both stores and repeats your top 3 keywords at least once.
Promotional text (App Store) is 170 characters or fewer and is updatable without a re-submission.
No superlatives Apple will reject: "#1", "best", "top", "award-winning" — unless you can prove them.
No pricing references in title or subtitle ("free", "$0", "cheap").
No competitor names in any indexed field.
Category selection is final and matches the primary use case, not a bigger-volume adjacent one.
Apple and Google auto-scale missing sizes but reject malformed ones. Generate your largest asset first and let the store do the rest.
App icon is exactly 1024 × 1024, no alpha channel, no rounded corners (the store applies them).
Icon contains no text — it's unreadable at 29 × 29 Settings size.
At least 3 screenshots per required device type on the App Store.
At least 2 phone screenshots on Google Play, plus a feature graphic (1024 × 500).
iPhone 6.9" screenshot set (1320 × 2868) uploaded — Apple scales down for smaller iPhones.
iPad Pro 13" screenshot set (2064 × 2752) uploaded if the app supports iPad.
Google Play phone screenshots are at least 1080 × 1920 with a 16:9 or 9:16 aspect ratio.
App preview videos, if used, are 15–30 seconds, match the current build, and have no real device status bar.
Feature graphic has zero text at the safe-area edges (the store crops for tablets).
Every marketing screenshot's caption is under 50 characters and reads cleanly without the image.
Binary-level rejections are slower to fix than text-level ones — each round-trip through TestFlight burns a day.
Build is uploaded via Xcode 15 or later and includes `PrivacyInfo.xcprivacy` for every third-party SDK that requires one.
Minimum iOS version matches what you claim to support — don't ship iOS 17-only code with a 15.0 deployment target.
Test account credentials are filled in App Store Connect if the app has a login wall.
App Review Information → demo video is linked if the app has a gated flow Apple can't reach.
Age rating questionnaire is re-answered for this version — the answers carry over but the questions sometimes change.
Encryption export compliance answered (ITSAppUsesNonExemptEncryption in Info.plist or the ASC question).
ATT (App Tracking Transparency) prompt is implemented if you use IDFA; purpose string is specific and user-facing.
Push notifications entitlement is only present if the app actually uses push.
Rating and review prompt uses `SKStoreReviewController`, not a custom dialog.
No references to Android, Google Play, or beta-only features in the binary or screenshots.
Google Play's rejections tend to be policy-driven rather than technical. The fastest way past review is to have every policy declaration pre-answered.
Target API level is current (Android 14 / API 34 or newer as of 2026).
AAB (not APK) is uploaded — Google Play mandated AAB for new releases since August 2021.
Content rating questionnaire (IARC) answered for this version.
Data safety form completed and matches your in-app privacy disclosures.
Financial Features declaration filled if you handle money, crypto, or lending.
Health app declaration filled if you claim medical, fitness, or diagnostic functionality.
Permissions declared in the manifest are the minimum set your app actually uses.
Sensitive permission justifications submitted for SMS, Call Log, Location-in-background, or AccessibilityService.
App signing by Google Play is enabled (required for new apps since 2021).
No references to iOS, App Store, or TestFlight in the binary, listing, or screenshots.
Privacy labels and manifests are now a common rejection reason. Pushmyapp's compliance features auto-check this — if you're not using them, triple-check the below manually.
Privacy policy URL is live, public (not gated), and covers the same data types your label claims.
Privacy nutrition label (App Store) matches every SDK's declared usage — including analytics, crash reporting, and ad SDKs.
Data safety form (Google Play) matches the privacy label one-to-one.
Every third-party SDK is on the current App Store "commonly used SDKs" list and has a PrivacyInfo.xcprivacy.
EU Digital Services Act trader status declared in App Store Connect (required for EU distribution).
DMA / trader contact info (name, address, phone, email) filled for the App Store.
If app is offered in the EU, a Privacy Choices URL is present for users to exercise data rights.
If app is for children, COPPA / Designed-for-Families compliance is verified on both stores.
No tracking or analytics SDKs firing before user consent on iOS.
All required consent banners (GDPR, CCPA) fire on the first launch and work in the App Review test environment.
Apple indexes keywords per locale. A good localized listing can unlock entire markets a translated one can't.
Primary language is set correctly in App Store Connect (this is the fallback for every unlocalized locale).
Each target locale has its own app name, subtitle, keyword field, and description — not a machine translation of English.
Keyword field is re-optimized per locale using in-country terms, not just a direct translation.
Screenshots are localized — text overlays are in the local language, not English with captions.
Date, time, and currency formats in screenshots match the locale's convention.
Legal and compliance disclosures (privacy policy, terms) are available in every declared locale.
These are the top rejection reasons across both stores. If any of them applies to you and you haven't fixed it, expect a rejection within 48 hours.
Login flow works end-to-end in the App Review demo environment — test it from a fresh install.
Every purchase uses Apple's in-app purchase or Google Play Billing (no external payment links unless legally exempt).
No "beta", "test", or "demo" labels anywhere in the binary, screenshots, or metadata.
No placeholder Lorem Ipsum or "coming soon" text.
No duplicate entries of near-identical apps under the same developer account.
No references to other mobile platforms, web versions, or products not currently approved.
Push My App includes an 80+ item Pre-Flight Scanner that inspects your binary, your listing, and your privacy manifest — then flags rejections before Apple or Google ever see them.
Start your free trial