Age Signal ReadyThe kit

Age signals are due Jan 1

California AB 1043 makes every app request a user's age bracket from the OS or app store when it's downloaded and launched. Apple, Google and Expo give you the API for free. This kit gives you the compliance file that shows you did it right, plus the edge cases the API docs don't cover.

A hand holding a black iPhoneiOSApple's Declared Age Range API A hand holding an Android phoneAndroidGoogle Play Age Signals API

Already using expo-age-range? Here's what it does and doesn't cover →

What's free, and what this kit adds

Be honest with yourself before you buy. You can make the AB 1043 signal request with free tools:

If you only need the call, use the free tools. We link them below. Buy the kit if you need to show you complied: what you requested, when, what you did when the signal was missing, and why you didn't share it.

Do you need this?

Every app, even an 18+ one. Apple says apps rated 18+ still need to check age with the Declared Age Range API where the law requires it.

Can people in California download your app? AB 1043 defines "application" broadly: software on a phone, computer or other general-purpose device. Its only exemptions are broadband, telecom and physical products, so there's no carve-out for adult-oriented apps.

Did you ship an update on or after January 1, 2026? Then users who installed before 2027 also need a signal request before July 1, 2027.

Do you also ship to Texas? Texas SB 2420 adds its own duties. A Fifth Circuit order on June 4, 2026 stayed the injunction that had blocked it, so it can be enforced while the appeal continues.

The kit covers mobile apps (iOS, Android, React Native/Expo, Flutter). AB 1043 also covers computers. If you ship desktop-only, the paperwork applies but the wiring doesn't, so ask before you buy.

What's in the kit: paperwork first

The California State Capitol in Sacramento

Paper trail

Your AB 1043 compliance file. A fill-in decision log (which builds request the signal, at which launch point, which age gates you use and why), data-minimization policy text for 1798.501(b)(4)(A), a "we don't share the signal" privacy-policy section for 1798.501(b)(4)(B), a third-party SDK review checklist, an existing-installs plan for the July 1, 2027 deadline (1798.502(b)), and a release-notes template. Plain English, statute sections cited, ready for counsel to review.

declined      → no signal: log it, gate by default
not available → retry next launch, log it
pre-iOS 26    → Expo returns 18+: not a signal
web / desktop → no OS signal: decide + log

Edge cases, decided and documented

What to do when the user declines or the signal is unavailable. Android's NOT_SHARED and VERIFICATION_REQUIRED statuses. Older iOS versions, where expo-age-range returns a default adult value that isn't a real signal. Keeping one user's bracket consistent across your app's platforms, because a received signal counts as actual knowledge "across all platforms" (1798.501(b)(2)(A)). And what to do when your own data clearly shows a different age (1798.501(b)(3)(B)). Each one comes with a recommended handling (gating by default is our recommendation, not a legal requirement) and a decision-log entry.

let r = try await AgeRangeService.shared
  .requestAgeRange(ageGates: 13, 16, 18, in: window)
AgeSignal.record(r)   // brackets: <13, 13-15, 16-17, 18+

Drop-in code

Wiring on top of the free APIs, not a replacement. Launch-time requests for iOS (Declared Age Range), Android (Play Age Signals), React Native/Expo (built on expo-age-range) and Flutter, with age gates set to AB 1043's brackets (13, 16, 18), the fallbacks above, and tests. On Android, debug builds can use Google's fake signals to test each bracket.

when (AgeSignal.bracket()) {
  UNDER_13 -> flags.coppaMode()
  TEEN_13_15, TEEN_16_17 -> flags.teen()
  ADULT -> flags.standard()
}

Age-bracket logic

One place to turn the four statutory brackets into feature flags, so what you're deemed to know lines up with your COPPA settings and with what you send to analytics or ad SDKs.

Looking up at the dome of the California State Capitol

Updates through July 2027

Email updates only. Includes the July 1, 2027 existing-installs deadline and any Apple, Google, California or Texas changes.

Price

What AB 1043 says

The law
Assembly Bill 1043 (Wicks), Chapter 675, Statutes of 2025, adds Civil Code sections 1798.500-1798.505. Operative January 1, 2027.
Developers
Must "request a signal with respect to a particular user from an operating system provider or a covered application store when the application is downloaded and launched" (1798.501(b)).
Actual knowledge
A developer that receives a signal is deemed to have actual knowledge of the user's age range across all platforms of the app, even if it ignores the signal (1798.501(b)(2)(A)).
Limits
Don't request more than the minimum needed, and don't share the signal with third parties for purposes the law doesn't require.
Existing installs
Apps updated on or after January 1, 2026 and installed before 2027 must request a signal before July 1, 2027 (1798.502(b)).
Penalties
Up to $2,500 per affected child per negligent violation and $7,500 per intentional one, in actions by the California Attorney General (1798.503).
Free tools
Apple Declared Age Range · Google Play Age Signals · Expo age-range
Is this legal advice?
No. Age Signal Ready is an AI-built developer kit, not a law firm. Talk to counsel about your app.
Why did I get an email?
We email app companies at business addresses from a licensed business-contact database. Reply "unsubscribe" and we stop within 2 business days.

Official text: Civil Code 1798.500-1798.505 at leginfo.legislature.ca.gov.