This article will help you:
  • Connect your first and third-party data sources to Optimizely
  • Create a single, unified view of your customers
  • Customize Audience conditions based on behavioral targeting, as well as online and offline data about your customers

A Dynamic Customer Profile (DCP) is a single, actionable view of your customer built from a combination of first and third-party customer data. It enables you to deliver consistent, personalized web and mobile experiences for your most valuable customers, and measure the impact of those experiences.

Here are a few examples of the data sources that you can connect to Optimizely through DCP:

  • Customer Relationship Management software

  • Email Service Providers

  • Data Warehouses

  • Analytics platforms

  • Point-of-Sale Systems

  • Data Management Platforms

For example, use DCP in combination with behavioral targeting to create a personalized experience based on a visitor’s browsing behavior during a session, as well as frequent flyer account information, favorite airports, and average purchase amount. 

Other first and third-party data that you can leverage through DCP include:

Below are a few key terms to help you get started. If attributes, data sources, and data management platforms are intuitive to you, jump straight into setup.

Attributes describe what you know about your individual customers: their favorite products, lifetime value scores, VIP or loyalty memberships, gender, and other historical data. These attributes help you create tightly tailored experiences for every known customer who comes to your site.

Data source
A data source such as your CRM, Email Service Provider, data warehouse, or DMP stores individual customer attributes under corresponding customer IDs. To use these attributes to personalize your customers’ experiences on your site, connect your data sources to Optimizely’s DCP Service.

DCP Service
Optimizely’s DCP Service collects and handles the data that you use to deliver personalized messaging. The third-party data that you send to Optimizely is stored here.

Optimizely uses a method called “aliasing” to connect all the attributes kept in different data sources to a single Optimizely User ID. This single ID allows Optimizely to deliver customized experiences based on the data you have on individual customers across different data sources. Read more about aliasing in our developer docs. 


Dynamic Customer Profiles are available with the Personalization Professional plan. To learn more, check out Optimizely Personalization.

You can also read more about DCP on the Optimizely blog.


Remember, your terms of service prohibit you from collecting or sending any personally identifiable information (such as names, social security numbers, email addresses, or any similar data) to Optimizely's services or systems through Dynamic Customer Profiles or any other feature.

Please read the article on PII to learn more about sending data to Optimizely and handling personally identifiable information.

Currently even when we provision or upgrade an account to Personalization Professional, DCP is not automatically included.  You need to separately whitelist DCP as a standalone feature by following the process outlined on the Wiki. The same is true for your own free employee account.

1. Create a DCP Service

To set up Dynamic Customer Profiles, first create a DCP Service in Optimizely. A DCP Service collects, stores, and processes the customer data that you’ll use to deliver personalized messaging.

  1. Navigate to Account Settings.

  2. Select the DCP Services tab.

    screen shot - dcp tab

  3. Name your new DCP Service > click Create DCP Service.

    screen shot - add new DCP service

  4. Add the Optimizely projects that you’d like to associate with this DCP Service. You can add multiple projects to the same service at any time.

    screen shot - add a project

2. Add a datasource

Next, connect a datasource to your DCP Service to port your data into Optimizely.

  1. Navigate to the Audiences dashboard.

  2. Select the Attributes tab and click Create New Attribute. Select External Attributes from the drop-down list.

    screen shot - adding attribute

  3. Next, specify whether Optimizely should be looking for these attributes in an existing datasource, or in a new datasource.

    screen shot - new external attributes

  4. Next, tell Optimizely how your datasource is organized in the Configure Datasource dialog. Fill in the name of your datasource and identify how your web page stores customer IDs for this data source: in a cookie, JavaScript variable, query parameter, or not at all (if the data source uses Optimizely User IDs).

    screen shot - configure datasource

  5. Select your source in the drop-down menu and enter the name of the identifier.

    screen shot - configure datasource
    In the example above, the customer IDs for the data source “test_datasource” are stored in a JS variable called “locator_name”.

Optimizely syncs the IDs in your new data source with Optimizely User IDs, so you don’t have to worry about managing identity. As your visitor data updates, Optimizely’s DCP Service automatically connects and adds this information to your customer profiles.

Sometimes, customer IDs are stored in multiple locations. For example, IDs may be stored in cookies on some pages and as JavaScript variables on others. In this situation, use our REST APIs to alias this information. Learn more about this process in our developer docs.

3. Define attributes

Next, identify the customer attributes that you’d like Optimizely to receive from this data source. Is the attribute stored as text, a boolean value, a number, or a date? Define this value type in the drop-down menu.

Check the Content-enabled box next to any values that you’d like to be able to display directly in the browser. For example, if you’d like to show a visitor her “gold” level membership as part of a personalized experience on your site, check the Content-enabled box for the “membership level” attribute.

Above, we identify “membership level” and “purchased in store” as attributes we’ll use in Optimizely. We’ve also made the membership level value available for display in the browser.

Enter as many attributes as you like by clicking Add an Attribute.


Attribute names are case sensitive, so “membership level” and “Membership level” register as two different attributes.

4. Upload your data

There are two ways to connect your data source to the DCP Service. The REST API lets you stream the data, one visitor at at time. You can also upload data in bulk as a CSV. Every datasource is provisioned an Amazon S3 bucket. When you drop CSVs here, we will automatically begin uploading them into our system.

screen shot - upload data

Learn how to set up a streaming API or the bulk CSV upload in our developer docs.


The Data Upload page for each datasource contains a link to download a pre-configured CSV file you can use as a template for uploads to that datasource. This is a great place to start if you're having trouble with the header formatting!

If you’re still having trouble, make sure your CSV file is formatted as follows:

  • Each column in the header row must be a registered attribute name. A CSV may contain a subset of the registered attributes
  • The header row must include a customerId column. All rows must contain a valid customer ID under this column
  • If a column header does not correspond to a registered attribute name, the upload will fail
  • If an attribute value does not respect the attribute's datatype/format, the upload will fail

Check that your upload is successful by navigating to Audiences. Open the Attributes tab and select a data source.

Click the Actions icon () and select Upload History.

The Data Upload History dialog provides a chronological view of your upload attempts.

If your latest upload wasn’t successful, check the formatting of your CSV and try again.

Common mistakes include:

  • Uploading a .xlsx file instead of a .csv or .tsv

  • Forgetting to register attributes before uploading data

  • Not having a column labeled “customerId” - remember, ALL IDs must take this format

  • Having “,” within an Attribute Value and saving the file as a .csv instead of .tsv

5. Create an Audience

Now, you’re ready to create an Audience using the customer attributes you’ve added to your DCP Service.

In the Audiences dashboard, click Create New Audience.

In the Create New Audience dialog, click to select a data source. To add an attribute from the data source, drag and drop it into Audience Conditions. Use logical conditions to create your new Audience. You can use DCP attributes alongside behavioral conditions, such as click events or page views, to create granular Audiences.

For example, you can add a “user_id” attribute and define the conditions that a visitor must meet (equals “103885”) to qualify for the Audience.

6. Build a Campaign

Congratulations! You’re ready to create a personalization campaign with your new audience, powered by your dynamic customer profiles.

Learn more about creating a campaign in this article on campaign setup

To add 1-to-1 personalization to your campaigns, read this article on exposing content attributes with DCP.