---
title: Getting Started with Product Analytics - Flutter
description: Integrate the CSQ SDK for Product Analytics into your Flutter app with step-by-step instructions for installation and configuration
lastUpdated: 02 January 2026
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-flutter/product-analytics/
  md: https://docs.contentsquare.com/en/csq-sdk-flutter/product-analytics/index.md
---

Use this quick start guide to set up a new instance of CSQ's Product Analytics SDK in a Flutter application.

Once you've completed the setup process, the CSQ SDK will capture a wide variety of user interactions in your application with no additional code required.

Upgrading

See our guides to upgrade to the CSQ SDK

* [from the Heap Core SDK](../product-analytics/upgrade-from-heap-core-sdk/)
* [from the Heap Core SDK + Contentsquare SDK](../product-analytics/upgrade-from-heap-and-cs-sdk/)

## Install the SDK

With Flutter CLI:

```shell
flutter pub add contentsquare
```

This will add a line like this to your package's `pubspec.yaml` (and run an implicit flutter pub get):

```yaml
dependencies:
flutter:
  sdk: flutter
contentsquare: ^4.1.0
```

## Start the SDK

1. Import the CSQ SDK in your app:

   ```dart
   import 'package:contentsquare/csq.dart';
   ```

2. Configure the SDK as soon as possible in your app, ideally in the `main()` function.

   Find your environment ID

   `YOUR_ENVIRONMENT_ID` is either provided to you by Contentsquare or you can find it in **Account** > **Manage** > **Projects** > \[Select your project] > **Environments** within the [Product Analytics web app ↗](https://heapanalytics.com/app/).

   ```dart
   import 'package:contentsquare/csq.dart';


   void main() async {
     await CSQ().configureProductAnalytics(
       environmentId: 'YOUR_ENVIRONMENT_ID'
     );
   }
   ```

3. (**Optional**) Add `ProductAnalyticsOptions`. For example if your Product Analytics environment is hosted in the EU, set the `baseURL` option to `https://mh.ba.contentsquare.net`

   ```dart
   import 'package:contentsquare/csq.dart';


   void main() async {
     await CSQ().configureProductAnalytics(
       environmentId: 'YOUR_ENVIRONMENT_ID',
       options: ProductAnalyticsOptions(
         baseUrl: 'https://mh.ba.contentsquare.net',
       ),
     );
   }
   ```

4. Add a call to `CSQ().start()` after the configuration:

   ```dart
   import 'package:contentsquare/csq.dart';


   void main() async {
     await CSQ().configureProductAnalytics(
       environmentId: 'YOUR_ENVIRONMENT_ID',
       options: ProductAnalyticsOptions(
         baseUrl: 'https://mh.ba.contentsquare.net',
       ),
     );
     await CSQ().start();
   }
   ```

5. Start your application, and check logs for this output:

   ```text
   ┌───────────────────────────────────────────────────────────────────────────────
   │ 🔔 IMPORTANT 🔔 (CSLIB 4.1.0)
   ├───────────────────────────────────────────────────────────────────────────────
   │ Contentsquare Flutter SDK 4.1.0 starting in app:
   │ com.example.testapp
   └───────────────────────────────────────────────────────────────────────────────
   ```

6. Recommended To capture screen views automatically, add the `CSQNavigatorObserver` to your app's navigator observers:

   ```dart
   import 'package:contentsquare/csq.dart';


   MaterialApp(
     navigatorObservers: [
       CSQNavigatorObserver(),
     ],
     home: MyHomePage(),
   )
   ```

   More details in [Customize autocaptured screens](https://docs.contentsquare.com/en/csq-sdk-flutter/product-analytics/customize-autocaptured-screens/).

7. Recommended In order to enable automatic capture of user interactions, add the option `enableInteractionsAutocapture: true` to your `ProductAnalyticsOptions` configuration:

   ```dart
   import 'package:contentsquare/csq.dart';


   void main() async {
     await CSQ().configureProductAnalytics(
       environmentId: 'YOUR_ENVIRONMENT_ID',
       options: ProductAnalyticsOptions(
         enableInteractionsAutocapture: true,
       ),
     );
     await CSQ().start();
   }
   ```

## Get user consent

Implement the [`optIn()`](command-reference/#csqoptin) API to forward user consent to the SDK and generate a user ID.

The CSQ SDK treats users as opted-out by default.

It can be done immediately after `start` is called:

```dart
void main() async {
  // ...
  await CSQ().start();
  await CSQ().optIn();
  // ...
}
```

Alternatively, you can call `optIn()` in response to a user action, such as tapping an "I agree" button:

```dart
class UserConsentScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Consent'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            await CSQ().optIn();
          },
          child: Text('Agree with Terms and Conditions'),
        ),
      ),
    );
  }
}
```

## Next steps

Our SDK offers a wide range of features to enhance your implementation, including extended tracking capabilities, and personal data masking.

[Track identity ](track-identity/)Link anonymous and identified user data across sessions and devices for comprehensive analytics

[Track push notifications ](track-push-notifications/)Track mobile notification interactions automatically

[Track events manually ](track-events-manually/)Learn how to track custom events

[Hide sensitive data ](privacy-and-sensitive-data/)Protect sensitive data by disabling text capture, masking specific views, or ignoring interactions

Session Replay and Error Monitoring are both available with the [Experience Analytics Extension](dxae-setup/), which you can purchase separately.

[Set up the Experience Analytics extension](dxae-setup/)
