Profile building
Learn how Piwik PRO aggregates user data into detailed profiles that support advanced analytics and personalization.
Data Activation (formerly Customer Data Platform) 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 creation
A profile is created when the first event for a given identifier, such as a cookie ID or user ID is processed. Until then, no profile exists for that identifier. After that, any later events with the same identifier update the existing profile.
Profile timestamps: created_at and updated_at
Each profile can include the following timestamps:
- created_at — The time the profile was created. For profiles created from an event,
created_atis set when the system processes the event that creates the profile. - updated_at — The time the profile was last updated. It is set when the system processes the event or other update that last updated the profile.
These timestamps reflect when the system processed the data, not when the user action occurred.
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 5 days ago