---
title: Track events manually - 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: 04 May 2026
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
---

> Documentation index: https://docs.contentsquare.com/llms.txt
> Use this file to discover all available pages before exploring further.

In addition to autocaptured events, use the `CSQ.trackEvent()` API to send custom events and attach properties to them for use in Product Analytics.

```kotlin
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
val properties = mapOf(
  "property1" to "sample value",
  "property2" to 10,
  "property3" to 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
val globalProperties = mapOf(
  "property1" to "sample value",
  "property2" to 10,
  "property3" to 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
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
CSQ.clearEventProperties()
```
