Skip to main content
NinjaNext
Mobile apps

Why Google Play Rejected Your App, and How to Get It Approved

Most Play Store rejections are not about your code. They are about what you declared, what you asked permission for, and what a reviewer could not reach. Here are the ones that catch people repeatedly.

By NinjaNext TechnologiesPublished 4 min read

Key takeaways

  • The most common rejection is a mismatch between what your app does and what you declared it does.
  • Every permission you request must be justified by a feature a reviewer can find and use.
  • If your app has accounts, it needs a way to delete them, reachable without installing anything.
  • Reviewers reject what they cannot test, so blocked test credentials fail even when the app is fine.

A Google Play rejection arrives as a short message with a policy name attached, and the gap between that message and knowing what to change is where most of the frustration lives. We have put several apps through review, including MuslimApp, Qibla Compass, One Move Left, One Room Left and MoodCanvas, so this is the list we work through.

The pattern worth internalising first: review is mostly about declarations and access, not code quality. An app can be beautifully built and still fail, because the reviewer could not get in, or because what you said about data did not match what the app does.

The data safety form does not match the app

This is the most common cause we see. You complete the data safety declaration from memory, honestly, and get it subtly wrong, because the declaration is about what your app and every library inside it actually transmit, not what you intended.

Analytics and crash reporting collect data. An advertising library collects data. A sign-in provider collects data. If any of those are in your build, they belong in the declaration, even though you did not write the code that sends it.

The most reliable fix is to check what your app actually sends rather than what you remember adding. For apps that genuinely need nothing, the strongest position is to remove internet access entirely, which is what we did on MoodCanvas: an app that cannot reach the network cannot be wrong about what it transmits.

A permission with no visible reason

Every permission you request needs a feature behind it that a reviewer can find. Permissions that arrive by accident, inherited from a library or left over from an experiment, are a frequent rejection, because from the outside an unexplained permission looks like a request for data you have no reason to want.

The sensitive ones get particular scrutiny: location, especially in the background, anything touching contacts or storage, and the permission to schedule exact alarms. The last one is a good example of how this works in practice. Prayer times genuinely need exact alarms, because approximately on time is wrong, so on MuslimApp that permission is justified by an obvious feature. The same permission in an app with no scheduled events would be a problem.

Before submitting, list every permission in your built app and write one sentence per permission naming the feature that needs it. Anything you cannot complete should be removed.

Accounts without a way out

If people can create an account in your app, you must give them a way to delete it and the data attached to it. Crucially, that route has to be reachable from outside the app as well, on the web, so that someone who has already uninstalled can still ask.

This catches a lot of first submissions, because deletion is the feature nobody builds until something forces it. It is also not merely a form: you need to decide what deletion actually means for records that are entangled with other people's, such as orders or messages, and that decision is easier made deliberately than in a hurry during review.

The reviewer could not get in

Reviewers reject what they cannot exercise. If your app requires a login, you must supply working credentials, and they must still work days later when review actually happens.

  • A test account that expires, locks after failed attempts, or sits behind a code sent to your phone.
  • Features reachable only after an approval step a reviewer cannot trigger.
  • Content gated to one country when review happens elsewhere.
  • A build that crashes on a device or Android version you never tested.

Give an account that bypasses two-factor, mention it in the review notes, and say plainly how to reach the parts that are not obvious. The notes field is underused and costs nothing.

The requirements that move

Some requirements change on a schedule rather than staying fixed. The minimum Android version your app must target rises every year, and apps that do not keep up eventually stop being updatable and then stop being visible to new users. Policy wording around sensitive permissions is revised regularly too.

We are deliberately not printing the current numbers here, because they change annually and a stale figure is worse than none. Check the current requirement in the Play Console before each release rather than trusting a blog post, including this one.

This is also the argument for releasing regularly rather than once. An app updated every few months absorbs these changes as small chores. An app untouched for two years meets all of them at once, usually under deadline.

What to do when it happens

Read the policy name in the message rather than the summary line, and fix the actual cause rather than resubmitting hopefully. Repeated resubmission without changes is itself a signal, and at the extreme it puts the developer account at risk, which is a far worse problem than a rejected build.

If you disagree, the appeal process works, but it works best with specifics: what the feature does, why the permission is needed, and where to find it. The whole release path, from signing to store listing, is covered step by step in shipping an app to Google Play.

If you are stuck in a rejection loop and would rather hand it to someone who has been through it, tell us what the message says and we will tell you what it usually means.

Let's build it

Want help putting this into practice?

Tell us what you are building and where you are stuck. We will reply with questions, a suggested approach and next steps.