> ## Documentation Index
> Fetch the complete documentation index at: https://docs.saytics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Event Properties and User Traits in Saytics

> Properties add context to events and user profiles in Saytics. Learn about property types, best practices, and how to filter and segment data.

Properties are key-value pairs attached to events or user profiles that give your data meaning beyond a name and a timestamp. Without properties, you know that users completed orders; with properties, you know how much those orders were worth, what currency was used, and how many items were included. Properties are what make segmentation, filtering, and analysis possible.

## Two types of properties

**Event properties** describe what happened during a specific event. They are passed as the second argument to `Saytics.track()` and only apply to that one event instance.

**User traits** describe who the user is. They are set using `Saytics.identify()` and persist on the user's profile. Traits are available for segmenting any event that user performs. See [user profiles](/concepts/users) for details.

## Property types

Saytics supports the following property value types:

| Type    | Example value               | Notes                  |
| ------- | --------------------------- | ---------------------- |
| String  | `"plan": "pro"`             | Max 256 characters     |
| Number  | `"amount": 49.99`           | Integer or float       |
| Boolean | `"trial": true`             | `true` or `false` only |
| Date    | `"joined_at": "2024-01-15"` | ISO 8601 format        |
| Array   | `"tags": ["web", "api"]`    | Max 25 elements        |

## Code example

The following event uses several property types together:

```js theme={null}
Saytics.track('Subscription Started', {
  plan: 'pro',           // string
  amount: 79.00,         // number
  trial: false,          // boolean
  started_at: '2024-03-01', // date (ISO 8601)
  features: ['sso', 'api', 'exports'] // array
});
```

## Best practices

<AccordionGroup>
  <Accordion title="Use consistent naming">
    Saytics recommends `snake_case` for property names (e.g., `order_id`, `item_count`). Mixing naming styles — camelCase in some events, snake\_case in others — creates duplicate-looking properties in your dashboard and makes queries harder to build. Pick one convention and apply it everywhere.
  </Accordion>

  <Accordion title="Avoid PII in event properties">
    Do not pass personally identifiable information such as email addresses, passwords, or full names as event properties. Event properties are broadly accessible across your workspace. If you need to associate a user's email or name with analytics data, use `Saytics.identify()` to set those values on the user's profile instead, where access is more controlled.
  </Accordion>

  <Accordion title="Keep property counts manageable">
    Each event can carry many properties, but we recommend a maximum of **20 properties per event**. Exceeding this makes events harder to understand and slows down query performance. If you find yourself adding dozens of properties, consider whether some belong on the user profile instead.
  </Accordion>
</AccordionGroup>

<Tip>
  Pre-plan your properties before you start tracking. Renaming or removing properties after data is collected is difficult — existing historical data will still use the old property names, which can create inconsistencies in your charts and segments.
</Tip>
