You built the thing, you tested the flows, and now the submit button is staring at you. "Will it pass?" is the wrong question to obsess over, because no one can promise a yes — but there is a smaller, answerable question underneath it: have I left any obvious, self-inflicted reasons for a rejection lying around? That part you can check. Most first-submission rejections come from a short list of missing or misconfigured things on your app's public surface — the pages, notices, and files an anonymous visitor (or an automated check) can see without logging in.
This is a pre-flight checklist for that surface, spanning the App Store, Google Play, and the EU AI Act. It groups the items a reviewer or a scan actually looks at, maps each one to what they see, and points you at LaunchTrust's free scan as the fast way to run most of it. Think of it as the ten-minute pass before you commit, not a guarantee — it reports signals, not a verdict.
What review actually looks at (and what a scan can and can't see)
Two very different things review your app. Human and automated store reviewers read your listing, your linked policy pages, and your binary; regulators care about what users in their market are shown and told. Both of them start with things that are visible from the outside: is there a privacy policy, is AI use disclosed, does a config file leak. A scanner sees roughly the same public HTML they do.
What a scan — or this checklist — cannot see matters just as much. It can't judge whether your store data-use answers are honest, whether your notice wording is legally sufficient, or how your app behaves once installed. So treat the checklist below as two layers: the public-surface signals a scan covers, and the human-judgment items only you can get right.
The pre-submission checklist
Work top to bottom before you submit. Each item is phrased as something you can confirm, and the linked detector or framework tells you whether the signal is present on your public surface.
1. AI disclosure — if your app uses AI
- Users are told, in context, that they are interacting with an AI — on the chat or assistant screen itself, not only in a buried legal page. → maps to AI interaction disclosure
- The notice is plain-language and visible to logged-out and first-time visitors, since that is what a reviewer and an automated scan see first. A bare "AI-powered" marketing label does not count.
- AI-generated media and AI text published to inform the public are marked or disclosed where the rules expect it. → see the EU AI Act Article 50 checklist and Apple's guideline expectations in the App Store 5.1.2 AI-rejection checklist
2. Privacy policy and terms
- A privacy policy exists, is reachable without a login, and is linked from your app and listing. → maps to privacy policy
- It describes any AI processing — what user input goes to the model, which third-party model providers you use, and how inputs are handled.
- A terms of service sets expectations for AI output: that it can be wrong and is not professional advice.
3. Data use — the part only you can get right
- Your App Store privacy "nutrition label" and Google Play Data safety answers match what your app actually collects — including what your analytics and third-party SDKs send. An inconsistency between your policy, your labels, and your real behavior is a common rejection cause.
- You've accounted for every SDK's data flow, not just your own code. A tracker you forgot is still your disclosure to make.
4. Security surface — exposed secrets and headers
- No secret key (an LLM, cloud, payment, or database key) is sitting in your page or a script the browser downloads. → maps to exposed API key in frontend
- No config or repo file —
/.env,/.git/HEAD,/.git/config— is publicly reachable and returning real contents. → maps to exposed .env / .git files - Your core security headers (Content-Security-Policy, X-Frame-Options or a CSP
frame-ancestors, X-Content-Type-Options, Referrer-Policy) are present, and the site is served over HTTPS.
If you can tick the AI-disclosure and privacy/terms items and the security surface is clean, you have addressed the parts of review most likely to bounce a first submission for a reason you could have caught yourself.
What LaunchTrust checks for this pre-flight
LaunchTrust does not decide whether your app "passes" — no scanner can. What it does is fetch your public page (and, for secrets, a handful of same-origin scripts) and report the observable signals a reviewer looks at first:
- The
ai_disclosuredetector reports detected when it finds a disclosure snippet or plain disclosure-directed wording, and not detected when a bare "AI-powered" label is all that's present. - The privacy policy and terms detectors report whether those documents appear present and linked.
- The
secret_leakdetector matches high-confidence key patterns (Stripesk_live_, OpenAIsk-, AWSAKIA…, and similar) in the page and its same-origin bundles, and theexposed_filesdetector probes/.envand/.gitpaths — counting a hit only when the response body genuinely matches the shape of that sensitive file.
Each result is a signal, not a judgment. "Detected" for a disclosure means the wording is on the page — not that it is worded or placed sufficiently. "Not detected" for a leaked secret means these patterns were not seen on the page scanned — not that nothing sensitive exists anywhere in your deployment.
Check this in 30 seconds
Run your URL through LaunchTrust's free scanner. In one fetch it reports whether an AI disclosure, privacy policy, and terms are detected, whether a secret key or exposed .env/.git path is present, and whether your core security headers are set — each as detected, not detected, or unable to determine. No signup for the basics, and no crawl of private pages: it reads the same public HTML your visitors and reviewers get, so you can catch the avoidable signals before they do. When you're ready to track this across releases, the paid tiers keep a running record.
FAQ
Will this checklist guarantee my app passes review? No. Nothing can guarantee approval — reviewers apply judgment, guidelines change, and a lot of review turns on things a checklist can't see, like your actual data handling or in-binary behavior. This is a pre-flight for the public-surface signals reviewers and regulators commonly look at first. Clearing them removes the avoidable, self-inflicted rejections; it does not certify your app.
How long does the pre-submission check take? The public-surface part — AI disclosure, privacy policy, terms, security headers, and exposed files like a stray .env — is roughly a ten-minute pass, and LaunchTrust's free scan runs most of it in one fetch. The items it can't see from outside, like your data-use accuracy in the store's privacy questionnaire, take longer because only you know what your app actually collects.
Does a clean LaunchTrust scan mean my app is compliant? No. A clean scan means the specific signals the scanner reads were present or absent on the page it fetched. It reports signals, never a verdict — it does not confirm your notices are worded sufficiently, that your data-use answers are accurate, or that your app meets any given law. LaunchTrust is a compliance aid, not legal advice or certification.
I found an exposed key or .env file in the scan — what now? Treat any shipped or committed secret as compromised. Rotate the key in the provider's dashboard first, since removal alone does not invalidate a key someone already copied, then move the call server-side and purge the value from your build. For a publicly reachable .env or .git path, block it at the server or host so those paths stop returning file contents, and re-scan to confirm.
Compliance aid, not legal advice. LaunchTrust reports signals, not a verdict or certification.