Launch6 min read
App Store privacy labels and the Google Play Data safety form, filled in for a typical Flutter app
By Sannan MalikPublished
Short answerFor a Flutter app with email login, Firebase Analytics, Crashlytics and push, you would typically declare email address and user ID for app functionality, device or installation IDs, product interaction and coarse location for analytics, and crash and performance data for app functionality, all linked to the user, with no tracking unless you add advertising features. Both stores hold you responsible for what your SDKs collect, so check this example against your own setup.
You answer for every SDK in the build
Both forms ask about your app. That includes code you did not write.
Apple's App Privacy page says you need to identify all the data you or your third-party partners collect, and it names analytics tools, advertising networks and third-party SDKs as partners. Google's Data safety help page says the same about libraries and SDKs, and adds that you alone are responsible for complete and accurate declarations. Every app published on Google Play has to complete the form, even one that collects nothing, and a privacy policy link is required either way.
In a Flutter project this catches people out. A single plugin line in pubspec.yaml can pull in a native Firebase or Google SDK on both platforms. So before opening either form, I would list every plugin and the native SDKs it brings in, and check each one's own disclosure guidance. Firebase publishes that guidance for both stores, which is where most of the example below comes from.
The example app and what its SDKs collect
The app is ordinary: users sign up with email and password through Firebase Authentication, Google Analytics for Firebase records screens and sessions, Crashlytics reports crashes, and Firebase Cloud Messaging sends push notifications. No ads, no in-app purchases, no location permission.
Firebase's own pages say what each SDK collects. Authentication always collects identifiers for sign-in, and collects email address and a generated user ID when you use email login. Analytics collects an app-instance ID, a masked IP address used to derive coarse location, and screen view and session events; on Android it also collects the Advertising ID unless you turn that off. Crashlytics collects stack traces, app state and device and OS details at crash time, plus an installation UUID. Cloud Messaging on iOS collects the APNs token linked to an installation ID, plus device model, language, time zone, OS version and app version.
This is a worked example, not legal advice. Your answers change with your configuration, and Firebase's pages say so directly.
How I would fill in both forms for that app
The table maps each piece of data to Apple's data types and Google's categories. Apple asks whether each type is linked to the user and used for tracking. Google asks whether it is collected or shared, and why.
| Data | Comes from | Apple App Privacy | Google Play Data safety |
|---|---|---|---|
| Email address | Firebase Authentication | Contact Info: Email Address. Linked. Not tracking. App Functionality | Personal info: Email address. Collected. Account management, App functionality |
| User ID | Firebase Authentication | Identifiers: User ID. Linked. Not tracking. App Functionality | Personal info: User IDs. Collected. Account management, App functionality |
| Installation and push IDs (plus the Advertising ID on Android) | Analytics, Cloud Messaging, Crashlytics | Identifiers: Device ID. Linked. Not tracking. Analytics, App Functionality | Device or other IDs. Collected. Analytics, App functionality |
| Screens and sessions | Google Analytics for Firebase | Usage Data: Product Interaction. Linked. Not tracking. Analytics | App activity: App interactions. Collected. Analytics |
| Coarse location from masked IP | Google Analytics for Firebase | Location: Coarse Location. Linked. Not tracking. Analytics | Location. Collected. Analytics |
| Crash reports and device state | Crashlytics | Diagnostics: Crash Data, Performance Data. Linked. Not tracking. App Functionality | App info and performance: Crash logs, Diagnostics. Collected. App functionality |
Linked, tracking and shared: the three answers people get wrong
Linked is the default. Apple treats data as linked to the user unless it is de-identified before collection, and you must not try to link it back afterwards. An app with accounts is usually linked across the board. If you call Crashlytics with a user ID, crash data is linked for certain.
Tracking is narrower than most people think. Apple defines it as linking data from your app with third-party data for targeted advertising or advertising measurement, or sharing it with a data broker. Analytics for your own product is not tracking on that definition. That answer changes if you turn on Google Ads linking or Google signals in Analytics, which Google's Analytics help page says can add collection or sharing.
Shared, on Google's form, has exceptions. Transfers to a service provider that processes data only on your behalf are not counted as sharing. My reading is that Firebase used this way falls under that exception, so the example answers collected but not shared. Check that against your own contracts and settings before you rely on it.
- Apple lets you skip a data type only when it meets every optional-disclosure condition, such as a one-off feedback form the user fills in each time. Ongoing collection after a permission prompt never qualifies.
- Google's form asks if data is encrypted in transit. Google's Analytics help page says the Analytics SDK sends its data over TLS; confirm the same for your own backend.
- Google's form asks how users can request deletion. An in-app option, a contact form or an email address all count.
- Google lets you mark data as optional only if every user can decline it and still use the app's core features.
Privacy manifests on iOS
Apple also wants a privacy manifest from many common SDKs. Its third-party SDK requirements page lists FirebaseAuth, FirebaseCore, FirebaseCrashlytics, FirebaseMessaging and Flutter itself, along with plugins such as flutter_local_notifications, path_provider and url_launcher. You must include the manifest for a listed SDK when you submit a new app that uses it, or an update that adds it. Listed SDKs used as binary dependencies also need a signature.
In practice that means keeping Flutter and the plugins current, since the manifests ship with the SDKs. A manifest does not fill in your labels for you. Firebase's Apple page says its manifests cover data that is always collected or collected by default, and that keeping your labels accurate is your job. Its own example: if you store push tokens in Firestore, you may need to declare identifiers that the Firestore manifest does not list.
Apple lets you change your App Privacy answers at any time without shipping a new build. Google asks you to update Data safety whenever your practices change, and says misrepresentation can lead to blocked updates or removal. I would review both every time a new SDK goes in.
Where this sits in my packages
Every package includes help with store submission, and both forms are part of a submission. Launch ($999) includes sign-up and login, so the email and user ID rows apply from day one. Growth ($1,699) adds your own Node.js backend and PostgreSQL database, which means your server's data handling has to match the answers too. Scale ($2,500) includes push notifications where supported, which brings the push token row in.
I can map what the app's code and SDKs collect into both forms with you. Your privacy policy is a legal document, so have a lawyer review it. Specialised compliance work is quoted separately, and approval stays Apple's and Google's decision.
Questions
- Do I have to fill in Data safety if my app collects no data?
- Yes. Google's help page says all apps published on Google Play must complete the form, including apps that collect no user data, and they still need a privacy policy link. Apps active only on internal testing tracks are one of the few exemptions.
- Does Firebase Analytics count as tracking on Apple's label?
- Not on its own. Apple's definition of tracking is about combining your data with other companies' data for advertising, or sharing it with data brokers. If you enable advertising features or link Analytics to ad platforms, review that answer again.
Sources
Platform rules and fees in this article were checked against these official pages on 9 November 2026. They change, so confirm before you rely on them.
- Apple Developer: App privacy details on the App Store
- Apple Developer: Third-party SDK requirements
- Play Console Help: Provide information for Google Play's Data safety section
- Firebase: Prepare for Google Play's data disclosure requirements
- Firebase: Prepare for Apple's App Store data disclosure requirements
- Analytics Help: Prepare for Google Play's data disclosure requirements
Sannan Malik is a software architect and product builder with 8+ years in software, CEO of Alpha Notic FZC and a Certified Scrum Product Owner. He builds mobile apps and business software for companies in the UAE, UK and US.