Profile Traits: From Raw Events to Smart Data

Growcado extracts and computes traits from your events — turning chaos into clarity, at the profile level.

🧩 What are Traits?

Traits provide essential information about a customer, including demographic details and business-specific characteristics such as name, region, total orders and favorite product Growcado supports two types of traits:

  1. Custom Traits — pulled directly from event payloads

  2. Computed Traits — calculated using aggregations, logic, or formulas

Once computed, traits are attached to each unified profile and stored in your warehouse for querying, joining, and powering segments.

🔍 Custom Traits

You can extract fields from incoming events and assign them to profiles automatically. These are typically high-signal identifiers or attributes, like:

  • mobile_number

  • email

  • region

  • user_type

  • is_first_time_buyer

Example

Let’s say a user logs in with this event:

{
  "user_id": "user_123",
  "context_traits": {
    "email": "jamie@example.com",
    "region": "north-west"
  }
}

Growcado extracts email and region and attaches them to the profile for user_123. These values are always the latest observed values (or follow a configured merge rule).

🧠 Computed Traits

These go further — you define logic in your YAML config to calculate advanced traits, using your event data and warehouse power.

Supported computation types:

  • aggregation — sum, count, min, max, avg

  • most_frequent

  • derived — custom formulas

  • ⏳ More types soon

🧪 Example YAML Config

computed_traits:
  - name: lifetime_value
    computation_type: aggregation
    aggregation: sum
    field: property_total
    event: OrderCompleted
    type: float
    
  - name: total_disconut_used
    computation_type: aggregation
    aggregation: sum
    field: property_products.$.discount // suport nested properties
    event: OrderCompleted
    type: float
    
  name: most_added_to_cart_product_id
    computation_type: most_frequent
    field: product_id
    event: BkOrderCompleted
    type: string
    filter_expression: "price > 30"

  - name: customer_loyalty_badge
    computation_type: derived
    source_trait: total_orders
    formula: "CASE WHEN source_value > 6 THEN 'gold' WHEN source_value BETWEEN 4 AND 6 THEN 'silver' ELSE 'bronze' END"
    type: string

💡 Key Features

  • Supports aggregation, frequency, and derived logic

  • Can extract from nested fields using $. syntax

  • Allows filters on the data (price > 30)

📦 Where Traits Live

Growcado writes all traits into a normalized traits table, not flattened JSON or blob fields.

computed_traits table structure:

profile_id
trait_name
trait_value
type
kind

profile_123

region

north-west

string

custom

profile_123

lifetime_value

234.50

float

computed

profile_123

total_discount_used

42.90

float

computed

profile_123

customer_loyalty_badge

gold

string

computed

Last updated