---
title: Track events manually - iOS
description: Learn how to track custom events in your iOS app using the CSQ SDK
lastUpdated: 04 May 2026
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-ios/product-analytics/track-events-manually/
  md: https://docs.contentsquare.com/en/csq-sdk-ios/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.

```swift
CSQ.trackEvent("custom_event_name")
```

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.

```swift
CSQ.trackEvent("custom_event_with_properties", properties: [
  "property1": "sample value",
  "property2": 10,
  "property3": false,
])
```

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

```swift
CSQ.addEventProperties([
  "property1": "sample value",
  "property2": 10,
  "property3": false,
])
```

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.

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

```swift
CSQ.clearEventProperties()
```

However, neither of these methods will affect events that have already been processed.
