Profile building
Data activation gives you a live, complete view of each person who interacts with your site or app. A user profile combines identifiers, traits, and behavior from multiple sources and keeps them updated in real time as new events arrive.
Sources of profile data
Profiles are built from two kinds of inputs:
-
Tracked data: The tracking endpoint records interactions such as page views, goal completions, and custom events. This data becomes the behavioral layer of the user profile, producing a record of how a person navigates and interacts with your site or app.
-
Enrichment data: Data activation can pull extra user context from your other systems through import APIs, including the profile attributes import endpoint and import webhooks. This mechanism lets you incorporate third-party data, such as CRM traits, billing status, or offline purchases, into your user profiles.
Note: Event dimensions and product dimensions are not stored in user profiles.
Profile components
Each user profile is more than just a record of visits. It brings together identifiers, traits, and behaviors that define how a person interacts with your business. These components work together to create a complete, flexible picture of each user:
Identity and core identifiers
Profiles store identifiers that link activity across sessions and devices, such as cookie ID and user ID. Learn more: Identity resolution.
User profile attributes
User profiles auto-populate attributes from tracked events: consent management settings, browser and device details, last activity time, and marketing data (channel, campaign, etc.). Each attribute includes a default aggregation, so values are useful without extra setup. Learn more: Profile attributes.
Custom dimension attributes
You can define custom dimension attributes to reflect your own business needs. They let you analyze user behavior in ways that go beyond the default attributes. You set them up in the Analytics module, for example, to track industry-specific metrics or custom categories.
Once you add a session dimension in Analytics, the custom dimension attributes automatically appear in user profiles as unique string lists. [Learn more about data types and aggregation methods.] (#data-types-and-aggregation-methods).
Custom attributes
Custom attributes let you capture any type of data that goes beyond the user profile attributes or custom dimension attributes. They also give you the option to reuse predefined attributes but apply different aggregation methods, so you can control how data is stored and analyzed. You can fill custom attributes with data from many sources, such as web tracking, import APIs, SDKs, offline purchases, or other customer touchpoints.
Data types and aggregation methods
Every attribute has a data type and an aggregation that decides how new values update the stored value.
Chronological aggregations
These aggregation methods focus on the order of values:
-
First: Keeps the earliest recorded value.
-
Last: Keeps the most recent value.
-
First & Last: Stores both the earliest and the most recent values.
List aggregations
These are useful when you want to keep a sequence of values:
-
List: Stores up to 1000 values in chronological order.
-
Unique list: Stores up to 1000 values in order, but removes duplicates.
Mathematical aggregations
Useful for numeric comparisons and totals:
-
Minimum: Stores the smallest value.
-
Maximum: Stores the largest value.
-
Sum: Adds values together into a cumulative total.
Data type compatibility matrix
Not every aggregation works with every data type. The table below shows which combinations are supported:
Data Type | First | Last | First & Last | List | Unique List | Min | Max | Sum |
---|---|---|---|---|---|---|---|---|
String | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Number | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Boolean | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Datetime | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
IP | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Legend: ✅ = Supported, ❌ = Not Supported
Aggregation examples
The examples below show how different aggregation methods update a profile when new events are received. Each one compares the profile before and after an event.
Initial profile state
Before diving into examples, here’s what a newly created, empty profile looks like:
Initial Profile |
---|
Empty Profile
cookie_id: A
No attributes yet
|
Chronological aggregation examples
First value aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
referrer_first: google.com
|
Event
cookie_id: A
referrer: facebook.com
|
→ |
Profile
cookie_id: A
referrer_first: google.com
unchanged - first value kept
|
Last value aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
device_last: mobile
|
Event
cookie_id: A
device: desktop
|
→ |
Profile
cookie_id: A
device_last: desktop
updated to latest value
|
First and last value aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
utm_source_first: email
utm_source_last: social
|
Event
cookie_id: A
utm_source: search
|
→ |
Profile
cookie_id: A
utm_source_first: email
utm_source_last: search
last value updated
|
List aggregation examples
List aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
page_urls: [/home, /products]
with timestamps
|
Event
cookie_id: A
page_url: /checkout
|
→ |
Profile
cookie_id: A
page_urls: [/home, /products, /checkout]
new value appended
|
Unique list aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
categories_unique: [electronics, books]
|
Event
cookie_id: A
category: electronics
|
→ |
Profile
cookie_id: A
categories_unique: [electronics, books]
duplicate ignored
|
Mathematical aggregation examples
Sum aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
total_order_value: 125.50
|
Event
cookie_id: A
order_value: 75.25
|
→ |
Profile
cookie_id: A
total_order_value: 200.75
125.50 + 75.25
|
Minimum value aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
min_order_value: 60.00
|
Event
cookie_id: A
order_value: 45.00
|
→ |
Profile
cookie_id: A
min_order_value: 45.00
new minimum found
|
Maximum value aggregation
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
max_order_value: 60.00
|
Event
cookie_id: A
order_value: 75.00
|
→ |
Profile
cookie_id: A
max_order_value: 75.00
new maximum found
|
Combined aggregation example
This example shows how multiple attributes with different aggregation methods work together in a single profile:
Profile Before | Event | Profile After | |
---|---|---|---|
Profile
cookie_id: A
utm_source_first: email
utm_source_last: email
page_urls: [/home]
total_order_value: 25.00
|
Event
cookie_id: A
utm_source: social
page_url: /products
order_value: 50.00
|
→ |
Profile
cookie_id: A
utm_source_first: email
utm_source_last: social
page_urls: [/home, /products]
total_order_value: 75.00
multiple aggregations updated
|
Profile merging
If two or more profiles share any identifier (such as a user ID or cookie ID) during event processing, data activation automatically merges them into one profile:
The profile merging process works in a few steps:
-
Primary profile selection:
The oldest profile (by creation date) is kept as the main one. Others are treated as secondary. -
Attribute merging:
Data from secondary profiles is merged into the primary profile, following each attribute’s aggregation rule. For example, “first” keeps the earliest value, “last” replaces it with the most recent, lists are combined (with duplicates removed for unique lists), and numeric fields like “sum”, “min”, or “max” are recalculated. -
Identifier consolidation:
All unique identifiers from the merged profiles are combined into the primary profile, ensuring that future events with any of these identifiers will be associated with the unified profile. -
Profile cleanup:
Secondary profiles are deleted to avoid duplication. -
Audience and activation updates:
Audience membership is recalculated, and activation history from all merged profiles is combined.
Limits (broken profiles)
A profile is considered broken if:
- It contains more than 1000 identifiers (user IDs, cookie IDs), or
- The total profile size exceeds 512 KB.
When a profile becomes broken, it is automatically removed from the system to maintain performance and data integrity. Any subsequent tracking data that uses identifiers from the removed (broken) profile will result in the creation of a new profile. This keeps performance stable and data manageable.
Profile retention
Profile retention is based on the time elapsed since the profile was last updated, with different retention periods depending on the type of identifier present:
- Profiles with a user ID are kept for 13 months after the last update, since a user ID usually represents a known person.
- Profiles without a user ID (cookie ID only) are deleted after 1 month of inactivity, because cookies can expire or be cleared more often.
Privacy and consent
The profile collection follows strict privacy and consent rules to stay compliant with data protection laws.
Consent settings: You decide which consents are needed for each personalization or activation.
Anonymous tracking: If tracking is set to anonymous, profiles aren’t created.
Updated 1 day ago