Store listing & policy forms
0/5 clear
Data safety form matches what the app actually does
The single most common rejection I see.
Blocker
Reviewers diff your declaration against the SDKs in your build. An analytics or ads SDK that collects device IDs while your form says "no data collected" is an instant reject. List every third-party SDK, then declare what each one sends.
Privacy policy URL is live, public and app-specific
Required for every app, not just ones collecting data.
Blocker
It must load without a login, name your app, and cover the data you declared. A 404, a Google Doc set to "restricted", or a generic template with another app's name in it all fail.
Account deletion is offered in-app and on the web
Applies to any app where users can create an account.
Blocker
You need both: a path inside the app, and a publicly reachable URL that works without installing anything. The web URL goes in the Play Console data safety section.
Screenshots show the real app, at the real device size
No mockup frames, no marketing copy pasted over the UI.
Common
Screenshots promising features that aren't in the build get flagged as misleading. Upload plain captures from a real device or emulator, and include tablet sizes if you declare tablet support.
Title and description are free of ranking bait
No "best", no "#1", no competitor names, no keyword walls.
Common
Also drop emoji from the title, and never put "free" or a price in it. Metadata rejections are fast to fix but cost you a full review cycle.
Permissions & declarations
0/4 clear
Every permission in the manifest is actually used
Leftovers from a removed library count against you.
Blocker
Run ./gradlew :app:processReleaseManifest and read the merged manifest — libraries inject permissions you never wrote. Strip the unused ones with tools:node="remove".
Sensitive permissions have a filled-in declaration form
Background location, all-files access, SMS, call log, camera.
Blocker
Each needs its own form in Play Console explaining the core feature that requires it — plus, for most of them, a short demo video showing that feature in use. "Nice to have" is not an accepted reason.
Photo and video access is scoped, not blanket
The photo picker beats broad media permissions.
Common
If a one-off pick is all you need, use the system photo picker and drop READ_MEDIA_IMAGES entirely — broad media access needs a justification form your app probably can't win.
Foreground services declare a type and show a notification
Untyped services fail on modern Android targets.
Common
Set foregroundServiceType on every service, match it to a permission in the manifest, and fill the foreground service use case form in Play Console.
Built from real submissions, not from the policy pages — it's a pre-flight check, not legal advice.
Google's policies change; when the Play Console warns you about something specific, that warning wins.