Manage customer attributes
UpdatedCustomer attributes represent the things you know about your audience—their name, preferences, email address, etc. You can use them to personalize messages, track people with similar characteristics, trigger campaigns, and more!
What are customer attributes?
Customer attributes are data points about people in your audience: things like first_name, email or product_interests—any information that is important for your marketing workflows.
Every attribute has a name and a value. The name is how you reference the attribute whenever you want to get or set the value. When you want to personalize messages with customer data or group people by shared characteristics, you’ll use the attribute name.
Customer attribute is the umbrella term for a few types of data stored on people:
- Identifiers are how your workspace does just that—identifies people. At least one identifier is required. Learn more in How to identify people.
- Reserved attributes are attributes that have specific meanings in your workspace, where you can’t change the attribute name, but can often change the value. For instance,
created_atis a reserved attribute whose value you can modify but not the name. There’s also an immutable reserved attribute called_created_in_customerio_atthat our system generates when you add a person to your workspace. Check out the list of reserved attributes below. - Subscription preferences: With our out-of-the-box subscription page, people can update their global unsubscribe attribute (whether they are subscribed or not to messages). You can also create a subscription center so people can manage subscription preferences for topics too. Global unsubscribes and subscription preferences are managed by different attributes.
To learn more about setting subscription statuses, check out our overview.
If you send push notifications, people also have device data stored on their profile.
Naming best practices
In general, these are best practices for developing naming conventions of attributes:
- Avoid using spaces, periods or special characters in attribute names because they can complicate what you need to do to personalize messages with liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable
{{customer.first_name}}.. - Don’t start an attribute name with an underscore. This indicates that an attribute is internal and won’t be discoverable or useable throughout your workspace.
_first_nameshould befirst_nameto use it in segments, trigger conditions, search results, etc. - Use one casing convention for attribute names, like camelCase or snake_case.
Attribute names are case sensitive, so we recommend auditing your data to ensure you’re only adding/updating information to one attribute. If you send an attribute for some people as first_name and an attribute labelled First_name for others, you’ll have two different attributes for names in your workspace. This can make it hard to personalize messages with liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable {{customer.first_name}}. or add the right people to segmentsA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions. because not everybody will have the same attribute.
Audit your attribute names in the Data Index
You can use your workspace’s Data Index to identify inconsistencies in your attribute names and identify the sources of your data.
Storing data as JSON
You store attributes using JavaScript Object Notation (JSON). JSON data is a set of keys and values. A key stores a value. For example in the attribute "first_name": "Jack", first_name is the key and Jack is the value.
In JSON, the syntax you use for a value determines what liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable {{customer.first_name}}. filters and operators are available to you. In general, you should understand the difference between string, number, boolean, object, and array types.
Learn more in Storing and using JSON.
Don’t store sensitive data in your workspace
Avoid storing sensitive information in Customer.io
You should limit the personal data you store to what you’ll use in Customer.io. You should not store sensitive data passwords and other tokens in Customer.io. While we take every effort to protect you and your customers’ data, limiting the data you share outside your backend systems limits potential security concerns and helps you respect your customers’ privacy.
You can grant access to our Support and Customer Success teams when you need to troubleshoot issues for a limited time. When you grant access, Customer.io personnel can see your audience’s attributes and the data you store, but only during that timeframe.
List of reserved attributes
Customer.io has reserved attributes to support core functionality in the platform.
| Attribute | Purpose | Required | Data Format |
|---|---|---|---|
id | A unique identifier for people. If the id does not yet exist, we create a new person. | When importing by id | Our default id limit is set to 150 characters. All valid UTF characters are allowed. |
email | A person’s email address. If your workspace uses email as a unique identifier (the default setting for new workspaces), and the email address does not yet exist, we create a new person. The TO line of your email templates is prefilled with this attribute. | When importing by email | Valid RFC 5322 email addresses. |
cio_id | A unique, immutable identifier set by Customer.io, set automatically when you add a person. | Created by Customer.io | string |
created_at | Recommended. Holds the date when a profile was created. This value lets you to take advantage of timestamp operators in segments and helps you determine the age of a person’s profile. | Optional | unix epoch |
_created_in_customerio_at | The date-time when a person was added in Customer.io. This value can be different from created_at. In the API, this value is represented by the timestamp for the cio_id attribute. | Created by Customer.io | unix epoch |
unsubscribed | Determines whether a person is subscribed or unsubscribed from your campaigns and newsletters. (reference) | Optional | We support any case of true (i.e. TRUE, true, tRUe, etc.), 1, or "1" to represent unsubscribed. Any other value is considered “false”, or subscribed. |
mobile_ad_id | Used to record either Apple’s Advertising Identifier (IDFA) or Android’s Advertising ID (AAID). This id can improve match accuracy in Google or Facebook Ads when using Ad Audiences. | Optional | Apple’s Advertising Identifier (IDFA) or Android’s Advertising ID (AAID) |
email_sha256 | To keep your data secure, you can hash your customer email using the SHA256 algorithm before sending it to your account. This field is only used in Ad Audiences and cannot be used to send messages. | Optional | Valid encoded sha256 |
mobile_ad_id_sha256 | To keep your data secure, you can hash the mobile_ad_id using the SHA256 algorithm before sending it to your account. This field is only used in Ad Audiences. | Optional | Valid encoded sha256 |
Customer.io has also reserved these object and relationship attributes:
| Attribute | Purpose | Required | Data Format |
|---|---|---|---|
cio_object_id | A unique, immutable identifier for objects provided by Customer.io. If this does not yet exist in your workspace, we create a new object. | When importing by cio_object_id | |
object_id | A unique identifier for objects. If the object_id does not yet exist, we create a new object. | When importing by object_id | Our default id limit is set to 150 characters. All valid UTF characters are allowed. |
objectId | String | An analog for object_id in some Customer.io integrations. | |
relationship | Used to reference relationships to objects. Cannot be used as the name of an object attribute. | To reference relationships in liquid | |
_relationship | Used in relationship-triggered campaigns to reference audience members who did not trigger the campaign. Cannot be used as the name of a customer attribute. | To reference relationships in liquid | |
created_at | Unix timestamp when the object was first created. Used when listing objects in the UI, for example. | No | Unix timestamp |
timezone | The user’s time zone. Used for sending localized messages. | No | Region Format |
What can you do with customer attributes?
Customer attributes are core to your messaging and workflows. They help you determine who to send to and the type of messaging and content that would engage them.
You can use customer attributes in a variety of ways:
- To personalize messages and webhooks using liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable
{{customer.first_name}}. - To group people together according to shared characteristics through data-driven segmentsA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions.
- To start campaigns using the Attribute or Segment trigger
- To send people down different pathways in campaigns. Learn more about branches.
- To limit who receives specific messages or enters delays through action conditions in campaigns
Review our info on case sensitivity across the platform, so you know how to efficiently search for attributes and include them in conditions in workflows and liquid logic.
Update customer attributes
From a person’s page, you can manage the data you want stored on their profile including their identifiers, custom data, and subscription statuses.
- Go to a person’s profile.
- Click the Attributes tab and then Edit Attributes.
- Update the attribute name or value. Remember that you can’t update the name of reserved attributes, like
id. - Save your changes.
Learn more about updating subscription statuses in these other articles:
- Unsubscribe from all messaging (available out-of-the-box in all workspaces); you’ll store this on the
unsubscribedattribute. - Unsubscribe from topics (only available if you’ve enabled a subscription center)
Remove attributes from a person
You may want to remove attributes so people are no longer a part of certain segments, trigger campaigns, or simply to clean up unnecessary data.
- Go to a person’s profile.
- Click the Attributes tab and then Edit Attributes.
- Click to remove the attribute.
- Save your changes.
Remove an attribute from your workspace
To delete an unwanted attribute from your workspace, you need to remove it from all segments and workflows that use it.
- Go to your Data Index.
- Click to open your attribute.
- Under Usage, go to where it’s used and remove it or archive the workflow.
- Click at the bottom of the attribute’s page in your index. This deletes the attribute from all profiles that use it.
If that attribute is stored on any customer profiles, it may take 24 hours (or longer) for us to fully purge the attribute from your workspace.
