---
title: Track dynamic variables - Android
description: Learn how to implement dynamic variable tracking to enrich your analytics data in your Android application with the CSQ SDK
lastUpdated: 09 October 2025
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-android/experience-analytics/track-dynamic-variables/
  md: https://docs.contentsquare.com/en/csq-sdk-android/experience-analytics/track-dynamic-variables/index.md
---

## General principles

### Usage

*Dynamic variables* are additional information on the session that can be used to *segment sessions*.

For example, they can include information on the A/B Test variations displayed to the current user.

### Limits

#### On the server side

* It is possible to save up to 40 distinct *dynamic variable keys* per screenview. If more are received, only the first 40 keys will be kept.
* If you are using the same key twice on the same screenview, the last value associated with the key will be collected.

#### On the SDK side

* Every dynamic variable is composed of a pair of key (max. 50 characters) and value (max. 255 characters string or number of type `Long` between 0 and 232 - 1). In case these maximums length are reached, the SDK will automatically trim the exceeding characters.
* If key or value are empty, the SDK will instead send the literal string "cs-empty".

## Defining dynamic variables

To define and send a dynamic variable, directly use the key and String/Long value:

* Kotlin

  ```kotlin
  CSQ.addDynamicVar("cart_value", 123)
  CSQ.addDynamicVar("user_account_status", "premium")
  CSQ.addDynamicVar("ab_test_variant", "control")
  CSQ.addDynamicVar("session_id", 456789)
  ```

* Java

  ```java
  CSQ.addDynamicVar("cart_value", 123);
  CSQ.addDynamicVar("user_account_status", "premium");
  CSQ.addDynamicVar("ab_test_variant", "control");
  CSQ.addDynamicVar("session_id", 456789);
  ```

**Type of the value** — The value can be either a **whole number** or a **string**. For each case, available features won't be the same in the Contentsquare app:

* For **whole numbers**, you will be able to do some algebra. Example: *sessions with dynamic variable key = "numberOfFriends" and value >= 10*
* For **strings**, auto-completion and Regular Expression will be available. Example: *sessions with dynamic variable key = "accountType" and value = "Premium"*

## Sending a dynamic variable for each session

You may want to send a dynamic variable for each session (like the user's country or store). While **triggering the dynamic variable at app launch will cover most cases, it will not be enough**. A session can start when the app is put in foreground, after staying in background for more than 30 minutes. See [Session definition](../data-collection/#session-definition) section for more information.

That is why we also recommend **sending such dynamic variable every time the app enters foreground**.

You can use the [`ProcessLifecycleOwner` Class ↗](https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner) to detect foreground and trigger a dynamic variable.
