Skip to main content


Optimizely Knowledge Base

List attributes vs table attributes: Use cases and features

relevant products:
  • Optimizely X Web Experimentation
  • Optimizely X Web Personalization

  • Understand the differences between list attributes and table attributes
  • Identify appropriate use-cases for each type of external attribute

List attributes and table attributes are the two types of external attributes currently supported by Optimizely. In general, you'd use a list attribute when you've already defined a group of users in an external system and want an easy way to target that audience with an experience, while a table attribute would be more appropriate when you want to target multiple audiences using a combination of attributes.

Differences between list attributes and table attributes

The main difference between these features is where the conditions that constrain a visitor’s membership in an audience are defined. If you have defined your audiences in an external system and just want to target visitors who qualify for those audiences, use list attributes.  However, if you want to define your audiences in Optimizely’s audience builder using attributes that reside in an external system, use table attributes instead.

With list attributes, Optimizely does not know anything about how you define your audiences. It receives a list of IDs for visitors who qualify for these audiences and instructions on where to check for a matching ID.

With table attributes, you can combine conditions that check the attributes' values together to create entirely new audiences that are not defined elsewhere. Because Optimizely has direct access to these underlying values and the definitions of Optimizely audiences, it can determine a visitor’s membership in the audience.

Another significant difference between list and table attributes is the way they handle updates. Uploading fresh data to an existing list will overwrite the previous data contained in the list. Uploading fresh data to an existing table will append to previous data contained in the table. Only values for rows that existed in the table previously will be overwritten. Any rows that are not present in the fresh data will remain unchanged in the table (in other words, failing to provide values for a given row will not delete the row).

This has implications for the most suitable use cases for each type of attribute:

  • Lists are often better suited to integrations with other vendors, where it can be difficult to understand what has changed since the last time data was uploaded.  

  • Tables are usually better suited to integrations with owned datasources, where it is easier to understand which records have changed since the last time data was uploaded.


List Attributes

Table Attributes

Max file size



Max attributes per file



Key types supported

Cookie, query parameter, global JS variable, ZIP code

Cookie, query parameter, Global JS variable, Optimizely End User ID

Upload methods

Bulk: In-browser, Amazon S3, HTTP PATCH

Bulk: In-browser, Amazon S3

Single-record: HTTP POST

Update type

Replace (full list overwrite)

Upsert (insert new rows, update existing rows)

Supported campaign types

Experiments and personalization campaigns

Experiments and personalization campaigns

Use case example

Suppose you want to target all users who belong to a particular list that you have defined in your email marketing platform. Users can qualify or disqualify for the list in real-time, and you can only see the current state of the list: you have no way of seeing past revisions or understanding which users may have been qualified for the list in the past but currently are not qualified. You will upload data to Optimizely once each day, and you want to make sure that only users who are currently in the email list are targeted.

In this case, list attributes are the better option because you only need to upload the current list. Optimizely will overwrite whatever data was uploaded previously, ensuring that users who no longer qualify for the list will not be targeted. If you use a table attribute, you will have to keep track of which users were disqualified since the last update and explicitly overwrite your data.