FlutterFlow integrates with Firebase Analytics out of the box. Enable it in Project Settings, and auto-tracked events like screen views and first opens start flowing immediately. Log custom events for key actions using the Log Event action in Action Flows, set user properties to segment audiences, and use Crashlytics for crash reporting. BigQuery export gives you raw event data for advanced analysis.
Firebase Analytics in FlutterFlow: From Auto-Events to Conversion Funnels
FlutterFlow has built-in support for Firebase Analytics — once you enable it, the SDK automatically tracks over 20 events including first_open, session_start, screen_view, app_update, and os_update without any additional configuration. Custom events let you track what matters most for your specific app: purchases, signups, feature activations, and conversion steps. The most common mistake is logging too many events — every button tap, scroll, and hover — which floods the dashboard with noise and makes it impossible to identify the events that actually drive decisions. This tutorial shows how to select the right events, set up user properties for audience segmentation, and use Crashlytics and BigQuery to complete your analytics stack.
Prerequisites
- FlutterFlow project with Firebase connected
- Firebase project with Analytics enabled (it is on by default for new projects)
- Google Analytics property linked to your Firebase project
- FlutterFlow project published at least once to generate real device data
- Firebase console access for viewing reports
Step-by-step guide
Enable Firebase Analytics in FlutterFlow Project Settings
Enable Firebase Analytics in FlutterFlow Project Settings
In FlutterFlow, open Settings (gear icon, top-left) > Firebase > Firebase Config. Confirm your google-services.json (Android) and GoogleService-Info.plist (iOS) are connected — these files contain your Firebase project credentials including the Analytics measurement ID. Next, go to Settings > App Details and enable the Firebase Analytics toggle if present. In most FlutterFlow projects Firebase Analytics is included automatically once Firebase is connected. To verify it is working, run your app on a real device or Android emulator, navigate between pages, then open Firebase console > Analytics > DebugView. Within 30 seconds you should see events appearing in real time with the device listed in the debug devices panel. Note that Analytics data in the main dashboard has a 24-hour delay — DebugView is the only place to see real-time events.
Expected result: Firebase console DebugView shows screen_view events as you navigate between pages in the app.
Identify the right events to log (do not log everything)
Identify the right events to log (do not log everything)
Before adding any Log Event actions in FlutterFlow, write down the 5-10 most important user actions in your app. These are the moments that indicate value delivery or conversion: completing signup, publishing a post, making a purchase, inviting a friend, reaching a key feature for the first time. Map each to an event name. Use Firebase's recommended event names when they match (e.g., sign_up, purchase, share, tutorial_complete) because they automatically populate pre-built Firebase reports and audience segments. For custom events, use snake_case, keep names under 40 characters, and make them verb-noun pairs (e.g., document_created, export_completed, paywall_viewed). Document your event taxonomy in a shared spreadsheet before implementing — retrofitting event names after launch requires a new app version.
Expected result: A documented event taxonomy spreadsheet with 5-10 events mapped to FlutterFlow actions, before any code changes.
Add Log Event actions in FlutterFlow Action Flows
Add Log Event actions in FlutterFlow Action Flows
In FlutterFlow, select a widget that represents a key conversion action — for example, a Publish button on a post creation page. Open its Action Flow and add a Log Event action (found under Firebase Analytics). Set the Event Name to your chosen event name (e.g., post_published). Add Event Parameters by clicking the + icon: add parameters like post_type (string, from a page state variable), word_count (integer, from a Custom Function that counts characters), and has_image (boolean). Parameters let you filter and segment events in Firebase. Each event can have up to 25 parameters, each with a name under 40 characters and a value under 100 characters. Repeat this for each event in your taxonomy.
Expected result: After triggering the action in the app, the Firebase DebugView shows the custom event with all parameters attached.
Set user properties to segment your audience
Set user properties to segment your audience
User properties are attributes that describe the user rather than a single event — subscription tier, account type, preferred language, or onboarding cohort. In FlutterFlow, use the Set User Property action (also under Firebase Analytics). Call this action once after sign-in and whenever the property changes: e.g., set plan_type to 'free' after signup, then set it to 'pro' after a successful purchase. In Firebase console > Analytics > Audiences, you can create audience segments filtered by user properties. These audiences sync to Google Ads and Firebase A/B Testing. User properties are capped at 25 per project. Common properties: plan_type, onboarding_completed (true/false), app_language, signup_source.
Expected result: Firebase console > Analytics > User Properties shows your custom property with values grouped by the distinct values set in the app.
Enable Crashlytics for crash reporting
Enable Crashlytics for crash reporting
In Firebase console, open Crashlytics and click Enable Crashlytics for your project. In FlutterFlow, go to Settings > Firebase > enable the Crashlytics toggle (if available), or add firebase_crashlytics to pubspec.yaml in the exported project. Crashlytics auto-captures all uncaught Flutter errors and Dart exceptions. To log non-fatal errors (caught exceptions you still want to track), add a Custom Action that calls FirebaseCrashlytics.instance.recordError(error, stackTrace, fatal: false). In FlutterFlow Action Flows, place this call in the error branch of API calls and database operations. Crashlytics reports appear in Firebase console within minutes of a crash, grouped by issue, showing the exact stack trace and the events that led up to the crash.
Expected result: A test crash (FirebaseCrashlytics.instance.crash()) appears in the Firebase Crashlytics dashboard within 2 minutes.
Export raw event data to BigQuery for advanced analysis
Export raw event data to BigQuery for advanced analysis
Firebase's built-in dashboards cover standard reports, but for custom SQL queries, cohort analysis, or connecting to data warehouses, link BigQuery. In Firebase console > Project Settings > Integrations > BigQuery, click Link. This requires a Google Cloud project (usually the same project as Firebase). Enabling the link starts a daily export of all raw events to BigQuery tables named events_YYYYMMDD. In BigQuery, query total events per day, time-to-conversion funnels, or retention curves using standard SQL. The daily export is free up to 10GB/month. For real-time streaming export (events appear within seconds in BigQuery), enable Streaming Export in the same panel — this has per-row BigQuery streaming insert costs.
Expected result: BigQuery console shows an analytics_[property_id] dataset with events tables after the first daily export (may take up to 24 hours after linking).
Complete working example
1import 'package:firebase_analytics/firebase_analytics.dart';2import 'package:firebase_crashlytics/firebase_crashlytics.dart';34final _analytics = FirebaseAnalytics.instance;56/// Log a custom event with optional string/number/boolean parameters.7Future<void> logAppEvent(8 String eventName,9 Map<String, dynamic> parameters,10) async {11 // Convert parameters to the format Firebase expects12 final Map<String, Object> cleanedParams = {};13 parameters.forEach((key, value) {14 if (value is String || value is num || value is bool) {15 cleanedParams[key] = value as Object;16 }17 });18 await _analytics.logEvent(name: eventName, parameters: cleanedParams);19}2021/// Set a user property for audience segmentation.22Future<void> setUserProperty(String name, String value) async {23 await _analytics.setUserProperty(name: name, value: value);24}2526/// Identify the user in Analytics and Crashlytics.27Future<void> identifyUser(String uid, String email) async {28 await _analytics.setUserId(id: uid);29 await FirebaseCrashlytics.instance.setUserIdentifier(uid);30 await FirebaseCrashlytics.instance.setCustomKey('email', email);31}3233/// Log a screen view manually (useful for custom navigation).34Future<void> logScreenView(String screenName) async {35 await _analytics.logScreenView(screenName: screenName);36}3738/// Record a non-fatal error to Crashlytics.39Future<void> recordNonFatalError(40 dynamic error,41 StackTrace stackTrace,42 String reason,43) async {44 await FirebaseCrashlytics.instance.recordError(45 error,46 stackTrace,47 reason: reason,48 fatal: false,49 );50 // Also log an analytics event so you can correlate errors with user journeys51 await logAppEvent('non_fatal_error', {52 'error_type': error.runtimeType.toString(),53 'reason': reason,54 });55}5657/// Log a purchase event using Firebase's recommended e-commerce schema.58Future<void> logPurchase({59 required String transactionId,60 required double value,61 required String currency,62 required String planName,63}) async {64 await _analytics.logPurchase(65 transactionId: transactionId,66 value: value,67 currency: currency,68 items: [69 AnalyticsEventItem(itemId: planName, itemName: planName),70 ],71 );72}Common mistakes
Why it's a problem: Logging every UI interaction as a custom event — button taps, scroll positions, field focuses
How to avoid: Log only 5-15 events that represent key conversions or funnel steps. Use Firebase's automatic events (screen_view, session_start, etc.) for general engagement data.
Why it's a problem: Checking analytics data in the Firebase dashboard immediately after testing
How to avoid: Use Firebase DebugView (Firebase console > Analytics > DebugView) for real-time event verification. Standard reports are for trend analysis, not immediate debugging.
Why it's a problem: Not setting user properties until long after they become relevant
How to avoid: Set user properties before logging any events that depend on them. Set plan_type to 'pro' as the first action in the purchase confirmation flow, before logging the purchase event.
Best practices
- Use Firebase's recommended event names (sign_up, purchase, tutorial_complete) wherever they match — they automatically populate pre-built dashboards and Google Ads audiences.
- Document your event taxonomy in a spreadsheet before implementing anything — event names cannot be deleted or renamed once registered.
- Always test events in DebugView on a real device before publishing — simulator data may not always appear correctly.
- Set user properties immediately after sign-in and after any plan or status change so audience segments stay accurate.
- Enable Crashlytics alongside Analytics — crash data is essential context for understanding why conversion metrics drop.
- Link BigQuery for any analysis beyond what the Firebase dashboard provides — SQL on raw event tables is far more powerful than built-in reports.
- Rate-limit or sample analytics calls if your app has extremely high event volume (e.g., logging game frame events) to avoid hitting Firebase quotas.
- Use the conversion events feature in Firebase (mark key events as conversions) so they appear prominently in reports and funnel analytics.
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I am building a FlutterFlow app with Firebase Analytics. I want to track a conversion funnel: onboarding_started, onboarding_step_completed (with a step_number parameter), profile_created, and first_post_published. Write the Firebase Analytics event logging code in Dart for each step, including the recommended parameter names. Also suggest which of these should be marked as conversion events in Firebase and why.
In FlutterFlow I have an Action Flow on a Subscribe button. The user just completed a purchase. Build the action sequence that: sets the plan_type user property to 'pro', logs a purchase event with the plan name and price as parameters, logs the Firebase purchase event using the recommended e-commerce schema, records the purchase in a Firestore subscriptions collection, then navigates to the home page.
Frequently asked questions
Why does my Firebase Analytics dashboard show no data even though I have active users?
Standard Firebase Analytics reports have a 24-48 hour processing delay. This is by design. Use DebugView in the Firebase console (Analytics > DebugView) to confirm events are being logged in real time. If DebugView shows events but the main dashboard does not after 48 hours, check that your google-services.json has the correct Analytics measurement ID.
Does FlutterFlow automatically track screen views, or do I need to add that manually?
FlutterFlow generates standard Flutter navigation, and the Firebase Analytics SDK automatically tracks screen_view events when you use FlutterFlow's built-in navigation actions. If you use a Custom Action for navigation, you should manually call logScreenView to ensure screen tracking continues to work.
Can I use Mixpanel or Amplitude instead of Firebase Analytics in FlutterFlow?
Yes, but it requires a Custom Action. Add the Mixpanel or Amplitude Dart SDK to pubspec.yaml in the exported project, initialise the SDK in main.dart, then create Custom Actions that call the SDK's track() method. FlutterFlow's visual Action Flow does not have a built-in Mixpanel node, so all calls go through Custom Actions.
How do I set up a conversion funnel in Firebase Analytics?
In Firebase console > Analytics > Funnels (under Explore), click Create new funnel. Add each step as an event in sequence. Firebase shows the drop-off percentage between each step. For the funnel to work, you need to have logged each step event with a consistent event name — for example onboarding_step_1, onboarding_step_2, onboarding_complete.
Is Firebase Analytics free?
Yes, Firebase Analytics is free with no volume limits on events collected or users tracked. You pay only if you enable BigQuery streaming export (per-row insert costs) or if you exceed BigQuery's free tier (10GB storage/month). The standard Firebase Analytics dashboard and reports are completely free.
What is the difference between a Firebase event parameter and a user property?
Event parameters describe a specific event instance — the post_type for a post_created event, or the value for a purchase event. User properties describe the user across all sessions — their subscription tier, account age, or preferred language. Use event parameters for per-event context and user properties for audience segmentation across all events.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation