---
title: Track events manually - React Native
description: Learn how to implement custom event tracking in your React Native app with the CSQ SDK for capturing user interactions and business events
lastUpdated: 16 March 2026
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-react-native/product-analytics/track-events-manually/
  md: https://docs.contentsquare.com/en/csq-sdk-react-native/product-analytics/track-events-manually/index.md
---

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

## Tracking Custom Events

```javascript
import { CSQ } from "@contentsquare/react-native-bridge";


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.

```javascript
import { CSQ } from "@contentsquare/react-native-bridge";


const properties = {
  property1: "sample value",
  property2: 10,
  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()`.

```javascript
import { CSQ } from "@contentsquare/react-native-bridge";


const globalProperties = {
  property1: "sample value",
  property2: 10,
  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.

```javascript
import { CSQ } from "@contentsquare/react-native-bridge";


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()`.

```javascript
import { CSQ } from "@contentsquare/react-native-bridge";


CSQ.clearEventProperties();
```
