# Contact attributes

Store custom customer details and use them in segments, personalisation and journey triggers.

Attributes store customer details beyond standard fields such as name, email and phone. Use a plan, city, loyalty tier or birthday to build relevant segments, personalise messages and trigger journeys.

## Attribute types

| Type | Example |
| --- | --- |
| **Text** | `city`: "Lisbon" |
| **Number** | `orders_count`: 12 |
| **Yes / no** | `vip`: yes |
| **Date** | `birthday`: 1990-04-18, or `--04-18` for a date with no year |
| **List** | `diet`: vegetarian, gluten-free |

Dates are calendar dates written as `YYYY-MM-DD`, or `--MM-DD` when the year doesn't matter. Date attributes can start [date-based journeys](/docs/guides/journeys/how-journeys-work), such as a birthday treat or a renewal reminder.

## How attributes get onto contacts

You don't need to create attributes in advance. They're added as data arrives:

- **Imports**: map a column to **Keep on the contact**. See [Import contacts](/docs/guides/contacts/import-contacts).
- **Signup forms**: a form field can save to an attribute.
- **By hand**: open a contact, choose **Edit**, and add or change values under **Custom attributes**.
- **Your app**: a developer can set attributes through the API. See the [API quickstart](/docs/api/quickstart).
- **Journeys**: an **Action** step can set an attribute, or add to or remove from a list. See [Build a journey](/docs/guides/journeys/build-a-journey).

To remove an attribute from one contact, edit the contact and remove it.

## See every attribute in your workspace

Go to **Data index** and switch to **Attributes**. You'll see every attribute your contacts have, with its type. If contacts hold different kinds of value under the same name, the type shows as **Mixed**. Keep each attribute to one type so segments and personalisation behave as you expect.

A single contact's attributes are on their profile, in the **Attributes** panel.

## Use attributes

**In segments.** Add a **Profile attribute** condition, for example *loyalty_tier equals gold*, or *birthday is within the last 7 days*. See [Segments](/docs/guides/contacts/segments).

**In messages.** Add an attribute as a merge tag in an email or push, with a fallback for contacts who don't have it:

```
Hi {{ contact.firstName | fallback: "there" }}, your {{ contact.attributes.favourite_dish | fallback: "favourite dish" }} is back on the menu.
```

The email designer has a picker for these, so you don't have to type them. See [Merge tags and personalisation](/docs/guides/email-designer/merge-tags-and-personalisation).

**In journeys.** Start a journey when an attribute changes, or when a date in an attribute arrives. Filters and splits inside a journey can check attributes too.

## Hide sensitive attributes from members

The owner can hide attributes, such as a date of birth or an internal score, from people with the **Member** role.

1. Open **Settings**, then **People**.
2. Under **Hidden attributes**, enter the attribute's name as it appears on a contact.
3. Choose **Hide from members**. You can hide up to 50 attributes.

Members then see the value as **Hidden** and can't use it in conditions. In their previews and test sends, the merge tag's fallback shows instead. Admins, the owner, API keys, exports and real sends still use the real value.

> **Warning:** Showing a hidden attribute to members again can't undo what they've already seen.