---
title: Timed Events
description: Learn how to track the duration of events.
url: https://docs.tealium.com/platforms/getting-started-mobile/timed-events/
---
## Supported Platforms

The following platforms support timed events:

- [Android (Kotlin)](https://docs.tealium.com/platforms/android-kotlin/)
- [iOS (Swift v2.x)](https://docs.tealium.com/platforms/ios-swift/)

## How It Works

A timed event measures the duration of an event or the time between two events and is set with automatic or manual triggers. When a timed event is complete it sends an event named `timed_event` to Tealium EventStream with the name of the timed event and the timing details.

Use automatic triggers to measure the duration between Tealium events that are already tracked in your app. A timed event is triggered automatically when the specified start event occurs and stops when the specified stop event occurs.

Use manual triggers to measure the duration between events that are not tracked by Tealium or that involve a complex sequence of events. A timed event is triggered manually by starting and stopping the timed event in the app code based on your custom logic.

Each timed event has a name that is set to the event attribute `timed_event_name`. An event name may be reused after the timed event has ended, but multiple concurrent timed events may not use the same name.

Timed events are not persistent and are discarded if the app terminates before the event ends.

Learn how to use timed events for:

- [Android Kotlin](https://docs.tealium.com/platforms/android-kotlin/track/#timed-events)
- [iOS (Swift v2.x)](https://docs.tealium.com/platforms/ios-swift/track/#timed-events)

### Automatic Triggers

To track a timed event with an automatic trigger, specify the start and stop Tealium event names. These events must already be tracked in your app. The name of an automatic timed event is generated by joining the start and stop event names with two colons (`::`). For example, when you set an automatic trigger to track the duration between the `cart_add` event and the `purchase` event, the event attribute `timed_event_name` is set to `cart_add::purchase`.



```kotlin
val config = TealiumConfig(…).apply {
   timedEventTriggers = mutableListOf(EventTrigger.forEventName(
        "cart_add",
        "purchase"))
}
```


```swift
let config = TealiumConfig(...)
config.timedEventTriggers = [TimedEventTrigger(
    start: "cart_add",
    stop: "purchase")]
```



The resulting timed event from an automatic trigger:  

```bash
{
  "tealium_event": "timed_event",
  "timed_event_name": "cart_add::purchase",
  "timed_event_start": "1605645967299",
  "timed_event_end": "1605645968401",
  "timed_event_duration": "1102"
}
```

### Manual Triggers

To track a timed event with a manual trigger, specify a name for the timed event then start and stop the timed event manually in your app code. For example, to manually track the time a user spends viewing a product, start the timed event when the product screen is loaded, then stop the timed event when the user leaves the product screen. The name you use for the timed event is set to the value of the event attribute `timed_event_name`.

Start a timed event manually:
  
```swift
tealium.startTimedEvent(name: "TimeSpentViewingProduct")
```

Stop a timed event manually:

```swift
tealium.stopTimedEvent(name: "TimeSpentViewingProduct")
```

The resulting timed event from a manual trigger:  

```bash
{
  "tealium_event": "timed_event",
  "timed_event_name": "TimeSpentViewingProduct",
  "timed_event_start": "1605645967299",
  "timed_event_end": "1605645968401",
  "timed_event_duration": "1102"
}
```

## Data Layer

Timed events are tracked with the event name `timed_event` and the following attributes:

| Attribute Name          | Data Type | Value |
| ---------------------- | --------- | ------------------------------------ |
| `tealium_event`        | `String`  | `"timed_event"` |
| `timed_event_name`     | `String`  | The name of the timed event (defaults to `"start_event_name::stop_event_name"` for automatic triggers)  |
| `timed_event_start`    | `String`  | Timed event start time (UNIX time in milliseconds) |
| `timed_event_end`      | `String`  | Timed event end time (UNIX time in milliseconds)   |
| `timed_event_duration` | `String`  | Duration of the timed event (total milliseconds: `timed_event_end` - `timed_event_start`)   |

The following is an example of a timed event:  

```bash
{
  "tealium_event": "timed_event",
  "timed_event_name": "cart_add::purchase",
  "timed_event_start": "1605645967299",
  "timed_event_end": "1605645968401",
  "timed_event_duration": "1102"
}
```
