Google Play Compliance

Google Play UGC Policy Compliance

Ship UGC features that pass Google Play review. Vettly covers every user generated content requirement - moderation, in-app reporting, user blocking, and timely enforcement - with a single API integration.

What Google Play requires for UGC apps

01

Define objectionable content

Your app must publish terms of use or community guidelines that define what content and behavior is not allowed, and users must accept them before creating or uploading UGC.

02

Ongoing content moderation

Google Play requires robust, effective, and ongoing moderation of user-generated content, consistent with your published user policies.

03

In-app reporting

Users must have an easily accessible, in-app mechanism to report objectionable content to you.

04

Block abusive users

Your app must be able to remove or block users who repeatedly violate your terms, and act on reports in a timely manner.

Compliance Checklist

Requirement
What Google Checks
Vettly Feature
Status
Content moderation
UGC is screened before or shortly after it is displayed
POST /v1/check
✓
In-app reporting
Users can flag objectionable content from the app
POST /v1/reports
✓
User blocking
Abusive users can be blocked or removed
POST /v1/blocks
✓
Timely enforcement
Reports are triaged and decisions are auditable
decisionId on every response
✓

Play Console description template

Adapt this for your store listing or reviewer notes. Replace the [bracketed] placeholders with your app-specific details.

Reviewer notes
User-generated content moderation: This app uses Vettly (https://vettly.dev) for UGC moderation.
- Moderation: All UGC is screened via the Vettly API before display
- Reporting: Users can flag content in-app via [describe your report flow]
- Blocking: Users can block other users via [describe your block flow]; abusive accounts are removed
- Community guidelines: [link to your terms / community guidelines]
- Contact: [[email protected]]

Code Examples

ContentCheck.kt
Kotlin
suspend fun checkContent(text: String): Boolean {
val client = OkHttpClient()
val body = """{"content": "$text", "policy": "default"}"""
.toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("https://api.vettly.dev/v1/check")
.addHeader("Authorization", "Bearer vettly_live_...")
.post(body)
.build()
val response = client.newCall(request).execute()
val json = JSONObject(response.body!!.string())
return json.getString("action") != "block"
}
moderation.ts
React Native
import { Vettly } from '@vettly/sdk';
const client = new Vettly('vettly_live_...');
// Check content before posting
const result = await client.check({
content: userInput,
policy: 'community-safe',
});
if (result.action === 'block') {
Alert.alert('Content blocked', 'Please review our community guidelines.');
return;
}
// Report objectionable content (Google Play requires an in-app mechanism)
await client.reports.create({
contentId: post.id,
reason: 'offensive',
reportedBy: currentUser.id,
});
// Block an abusive user (required for repeat violators)
await client.blocks.create({
userId: abusiveUser.id,
blockedBy: currentUser.id,
});

Ship compliance before your next Play review

Get started with Vettly's free tier: 15,000 decisions per month across text, image, and video. No credit card required.

Get started free