---
title: Manually track events - Android
description: Learn how to implement custom event tracking in your Android app with the CSQ SDK for capturing user interactions and business events
lastUpdated: 18 December 2025
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-android/product-analytics/track-events-manually/
  md: https://docs.contentsquare.com/en/csq-sdk-android/product-analytics/track-events-manually/index.md
---

## Tracking Custom Events

In addition to autocaptured events, Product Analytics also supports manual tracking of custom events using `CSQ.trackEvent()` API.

* Kotlin

  ```kotlin
  import com.contentsquare.CSQ
  CSQ.trackEvent("purchase_completed")
  ```

* Java

  ```java
  import com.contentsquare.CSQ;
  CSQ.trackEvent("purchase_completed");
  ```

It doesn't matter what you call your event, there are ways in Product Analytics to cross-track events regardless of name. See our [guide on combo events ↗](https://help.heap.io/hc/en-us/articles/37271999013009-How-to-combine-events-using-a-combo-event) to learn more.

## Adding Properties to Custom Events

Custom events can be enhanced with a set of properties that will correspond to the tracked event when passed into the `CSQ.trackEvent()` API call.

* Kotlin

  ```kotlin
  val properties = mapOf(
    "property1" to "sample value",
    "property2" to 10,
    "property3" to false
  )
  CSQ.trackEvent("custom_event_with_properties", properties)
  ```

* Java

  ```java
  Map<String, Object> properties = new HashMap<>();
  properties.put("property1", "sample value");
  properties.put("property2", 10);
  properties.put("property3", false);
  CSQ.trackEvent("custom_event_with_properties", properties);
  ```

## Adding Properties to All Events

In some cases, you might want to add a property, or a collection of properties, to all events tracked by Product Analytics. Adding a global event property can be accomplished using `CSQ.addEventProperties()`.

* Kotlin

  ```kotlin
  val globalProperties = mapOf(
    "property1" to "sample value",
    "property2" to 10,
    "property3" to false
  )
  CSQ.addEventProperties(globalProperties)
  ```

* Java

  ```java
  Map<String, Object> globalProperties = new HashMap<>();
  globalProperties.put("property1", "sample value");
  globalProperties.put("property2", 10);
  globalProperties.put("property3", false);
  CSQ.addEventProperties(globalProperties);
  ```

Properties that are added using the `CSQ.addEventProperties()` API will be attached to all events tracked by Product Analytics, including any events that are automatically tracked by a CSQ autocapture SDK.

## Removing a Property

Once a property is no longer needed in the global collection, use `CSQ.removeEventProperty()` to remove properties one at a time.

* Kotlin

  ```kotlin
  CSQ.removeEventProperty("property1")
  ```

* Java

  ```java
  CSQ.removeEventProperty("property1");
  ```

## Removing All Properties

On the other hand, if you want to remove all properties added with `CSQ.addEventProperties()` at once, you can achieve this by using `CSQ.clearEventProperties()`.

* Kotlin

  ```kotlin
  CSQ.clearEventProperties()
  ```

* Java

  ```java
  CSQ.clearEventProperties();
  ```
