Attributes vs Fields
Attributes and fields serve fundamentally different purposes. Mixing them up is the single most common setup mistake, and it causes silent issues — wrong segmentation, broken personalization, or missing data in copy.
Attributes = User Data
Section titled “Attributes = User Data”Attributes describe who the user is. They’re used for segmentation and decisioning — JustAI uses them to decide which variant to serve a given user.
Examples: locale, gender, plan_type, lifecycle_stage
Attributes are configured at the org level and auto-populate across all templates. They support four types:
- String — e.g.
locale: "en-US" - List — e.g.
interests: ["fitness", "nutrition"] - Numeric — e.g.
days_since_signup: 14 - Date — e.g.
created_at: "2025-06-01"
Fields = Content Data
Section titled “Fields = Content Data”Fields are content-specific variables that get pulled directly into copy via Liquid syntax. They represent data about the product, listing, or offer — not the user.
Examples: shop_name, price, discount, product_name
Fields map to connected content variables in your CRM. They show up in variant copy as {{ product_name }} or {{ price }}.
Side-by-Side Comparison
Section titled “Side-by-Side Comparison”| Attributes | Fields | |
|---|---|---|
| What they represent | User characteristics | Content/listing data |
| Used for | Segmentation, decisioning | Dynamic copy insertion |
| Configured at | Org level | Template level |
| Example | locale, plan_type | product_name, price |
| How they appear in copy | They don’t (used behind the scenes) | As Liquid variables: {{ field_name }} |
| Auto-populate? | Yes, across all templates | No, set per template |
CRM Mapping
Section titled “CRM Mapping”How your CRM’s terminology maps to JustAI:
| CRM | CRM Concept | JustAI Equivalent |
|---|---|---|
| Braze | Custom attributes ({{custom_attribute.${attr_name}}}) | Attributes |
| Braze | Connected content variables | Fields |
| Customer.io | Customer attributes ({{customer.attr_name}}) | Attributes |
| Customer.io | Event/trigger data | Fields |
| Iterable | User profile fields ({{attr_name}}) | Attributes |
| Iterable | Event/catalog data | Fields |
Common Mistakes
Section titled “Common Mistakes”Setting product_name as an attribute. Product data changes per message, not per user. It belongs as a field. If you set it as an attribute, JustAI will try to use it for segmentation, which produces nonsensical results.
Setting locale as a field. Locale describes the user, not the content. If you set it as a field, JustAI can’t use it to personalize variant selection — it’ll just appear as a Liquid variable in copy.
Forgetting to map CRM accessor syntax. Each ESP formats attribute references differently. Make sure your CRM’s attribute syntax is correctly mapped during integration setup so JustAI can resolve values at send time.