Dynamic Fields
Adding custom properties to user profiles for advanced targeting
What are Dynamic Fields?
Dynamic fields are custom key-value pairs stored in user snapshots for app-specific targeting. They allow tracking any data beyond standard fields (levels, currencies, achievements) for advanced surfacing conditions.
Data Types: String or Number values only
Use Case: When standard fields don't capture your app's unique data
Surfacing Only
Dynamic fields are only available for surfacing conditions, not completion conditions.
Common Use Cases
Game-Specific
Unique features
guild_rank: 5,pvp_rating: 1850favorite_class: "warrior",difficulty: "hard"cards_collected: 87,boss_defeats: 12
Behavioral Metrics
Calculated patterns
sessions_per_week: 14,avg_session_min: 45social_interactions: 28,help_requests: 3engagement_score: 85,churn_risk: 0.2
Feature Flags
Access control
beta_features: 1 (use numbers for booleans)early_access: 1,experimental_ui: 0ab_test_group: "variant_b"
External Data
Other systems
crm_segment: "high_value",support_tickets: 2community_score: 95,forum_posts: 45twitch_subscriber: 1,discord_member: 1
Operators
| Operator | Usage | Example |
|---|---|---|
== | Equals | favorite_class == "warrior" |
!= | Not equals | status != "inactive" |
> | Greater than | wins > 10 |
>= | Greater or equal | pvp_rating >= 1800 |
< | Less than | losses < 5 |
<= | Less or equal | rank <= 100 |
has | String contains | tags has "vip" |
not_has | String doesn't contain | tags not_has "banned" |
Combining Conditions
Multiple dynamic field conditions can be linked together:
AND - All conditions must be true
score >= 10 AND level == 2OR - Any condition must be true
score >= 10 OR level == 2AND NOT - First true, second false
score >= 10 AND NOT banned == 1Example: Target engaged non-banned users with high scores
conditions: [
{ key: "score", operator: ">=", compareTo: 10 },
{ key: "engagement", operator: ">", compareTo: 50 },
{ key: "banned", operator: "==", compareTo: 1 }
]
links: ["AND", "AND NOT"]Result: score >= 10 AND engagement > 50 AND NOT banned == 1
Best Practices
Naming:
- Use lowercase with underscores:
preferred_game_mode - Be descriptive:
event_halloween_scorenotscore - Group related:
guild_rank,guild_contribution,guild_name
Data Types:
- Strings for categories (class, mode, difficulty)
- Numbers for metrics (scores, counts, ratings)
- Numbers for booleans (1 = true, 0 = false)
Performance:
- Limit field count (avoid hundreds of fields)
- Group related data when possible
- Batch updates for non-critical fields
Tags vs Dynamic Fields
Use tags for binary segments (has/doesn't have). Use dynamic fields when you need specific values or numeric comparisons.
Stacked