Skip to main content

What FluentAI collects

Local inference means your conversations are processed on your device and are never transmitted. It does not mean the app is silent. Below is every category the app sends on its own, in the background — which SDK sends it, why it exists, and whether you can turn it off. Features you actively choose, such as cloud providers or the free starter chat, send your messages to that service; those messages are not listed here.

Never collected in the background

Benchmark publishing — only when you ask for it

If you run a benchmark and choose to publish it, the app sends that single measurement to us so it can appear on the public benchmark table: your device model and chip, the model and settings you ran, and the resulting speed and memory figures.

It is listed separately from the categories below because it is not background telemetry — nothing is sent unless you tap Publish, and the app shows you the exact data first. It contains no chats, prompts, documents or model output.

Crash and stability reports

firebase_crashlytics

  • Stack traces from crashes and non-fatal errors
  • Device model, OS version and app version at the time of the crash
  • Breadcrumb logs we write ourselves — screen names and operation names, never message text

Why: On-device inference can hard-crash the process from native code, and without stack traces those failures are invisible to us and unfixable for you.

No in-app control today

Feature usage analytics

firebase_analytics

  • 84 event types covering which features are opened and whether they succeed — for example app_open, chat_create, model_selected, benchmark_completed
  • Message events carry metadata only: model name, model type, a character count, and whether an image or attachment was attached — never the text itself
  • Performance figures: tokens per second, response duration, token counts
  • Four user properties: device tier, device RAM, inference mode, premium status

Why: It tells us which models and features people actually use, so limited development time goes to the paths that matter rather than the ones we assume matter.

No in-app control today

Advertising

google_mobile_ads

  • Your device's advertising identifier
  • Ad impressions and interactions

Why: Ads fund the free tier. The one-time premium upgrade removes them entirely.

Controlled by your device's ad settings

Account, only if you sign in

firebase_auth

  • Email address and an account identifier
  • Sign-in method and timestamps
  • While you are signed in, your account identifier is attached to analytics events and crash reports

Why: Signing in is optional and only needed to sync settings and premium entitlement across devices.

No in-app control today

Device attestation

firebase_app_check

  • A Play Integrity attestation token, sent only when you use the free hosted onboarding chat

Why: It proves a request came from a genuine install of this app, which is what lets us offer the free trial chat without shipping an API key inside the app.

No in-app control today

Feature flags

firebase_remote_config

  • An app instance identifier, sent when fetching which features are enabled

Why: It lets us turn a broken feature off for everyone without shipping an emergency release.

No in-app control today

Verifying it yourself

You do not have to take our word for any of this. We publish a reproducible procedure for putting the app behind an intercepting proxy and confirming that a local chat sends no prompt or response anywhere. Read the offline verification procedure.