Capacitor plugin that exposes Google Play Age Signals to your app.
npm install @capgo/capacitor-android-age-signals
Capacitor wrapper for the Google Play Age Signals API. Detect supervised accounts, guardian approvals, and verified users directly from your app (Android only).
Compatible with Capacitor 8/7
The only free Capacitor plugin for Google Play's Age Signals API. Implement COPPA and teen safety compliance with:
- Supervised account detection - Identify users with parental controls
- Age verification - Detect 18+ verified users
- Guardian approval tracking - Monitor pending approvals and denials
- Compliant features - Build age-appropriate experiences and comply with regulations
- Same JavaScript API - Compatible interface with paid alternatives
Critical for apps targeting families, children, and teens who need age-gate functionality.
Authoritative docs live inside this repo for now. Explore the TypeScript definitions in src/definitions.ts and the Android implementation under android/ for platform behavior. Run the included example app for an end-to-end walkthrough.
| Plugin version | Capacitor compatibility | Maintained |
| -------------- | ----------------------- | ---------- |
| v8.\.\ | v8.\.\ | ✅ |
| v7.\.\ | v7.\.\ | On demand |
| v6.\.\ | v6.\.\ | ❌ |
| v5.\.\ | v5.\.\ | ❌ |
> Note: The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation (e.g., plugin v8 for Capacitor 8). Only the latest major version is actively maintained.
``bash`
npm install @capgo/capacitor-android-age-signals
npx cap sync android
Google Play Age Signals is available only on Android phones with the Play Store installed.
`ts
import { AgeSignals } from '@capgo/capacitor-android-age-signals';
import { UserStatus } from '@capgo/capacitor-android-age-signals';
const result = await AgeSignals.checkAgeSignals();
if (result.userStatus === UserStatus.Supervised) {
console.info(Supervised user aged between ${result.ageLower} and ${result.ageUpper});`
} else if (result.userStatus === UserStatus.Verified) {
console.info('User is 18+ and verified by Google.');
} else {
console.warn('No definitive age signal returned.');
}
* checkAgeSignals()
* getPluginVersion()
* Interfaces
* Enums
Capacitor interface for retrieving Play Age Signals.
`typescript`
checkAgeSignals() => Promise
Request the current Play Age Signals for the active user.
Only available on Android devices with Google Play installed.
Returns: Promise<CheckAgeSignalsResult>
Since: 0.0.1
--------------------
`typescript`
getPluginVersion() => Promise<{ version: string; }>
Get the native Capacitor plugin version.
Returns: Promise<{ version: string; }>
Since: 1.0.0
--------------------
#### CheckAgeSignalsResult
Structured result returned by {@link AgeSignalsPlugin.checkAgeSignals}.
| Prop | Type | Description | Since |
| ---------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| userStatus | UserStatus | The user's verification status as reported by Google Play. | 0.0.1 |
| ageLower | number | Inclusive lower bound of the supervised user's age range. Present only when userStatus is SUPERVISED, SUPERVISED_APPROVAL_PENDING, or SUPERVISED_APPROVAL_DENIED. | 0.0.1 |ageUpper
| | userStatusnumber | Inclusive upper bound of the supervised user's age range. Present only when is SUPERVISED, SUPERVISED_APPROVAL_PENDING, or SUPERVISED_APPROVAL_DENIED and the user's age is reported as less than 18. | 0.0.1 |mostRecentApprovalDate
| | userStatusstring | Effective date for the most recent significant change that received guardian approval. Present only when is SUPERVISED_APPROVAL_PENDING or SUPERVISED_APPROVAL_DENIED. | 0.0.1 |installId
| | userStatusstring | Identifier assigned to supervised installs in Google Play for revocation notifications. Present only when is SUPERVISED, SUPERVISED_APPROVAL_PENDING, or SUPERVISED_APPROVAL_DENIED. | 0.0.1 |
#### UserStatus
| Members | Value | Description | Since |
| ------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Verified | 'VERIFIED' | The user is over 18 and their age has been verified by Google. | 0.0.1 |
| Supervised | 'SUPERVISED' | The user has a supervised Google Account managed by a guardian. Use ageLower and ageUpper to determine the user's age range. | 0.0.1 |SupervisedApprovalPending
| | ageLower'SUPERVISED_APPROVAL_PENDING' | The supervised user has pending significant changes awaiting guardian approval. Use and ageUpper to determine the user's age range and mostRecentApprovalDate to identify the most recent approved change. | 0.0.1 |SupervisedApprovalDenied
| | ageLower'SUPERVISED_APPROVAL_DENIED' | The supervised user's guardian denied one or more significant changes. Use and ageUpper to determine the user's age range and mostRecentApprovalDate to identify the last approved change. | 0.0.1 |Unknown
| | Empty` | 'UNKNOWN' | The user is not verified or supervised in supported regions. You should prompt the user to resolve their status in the Play Store. | 0.0.1 |
| 'EMPTY' | All other users return this value. | 0.0.1 |