LogoStacked
Concepts

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: 1850
  • favorite_class: "warrior", difficulty: "hard"
  • cards_collected: 87, boss_defeats: 12

Behavioral Metrics

Calculated patterns

  • sessions_per_week: 14, avg_session_min: 45
  • social_interactions: 28, help_requests: 3
  • engagement_score: 85, churn_risk: 0.2

Feature Flags

Access control

  • beta_features: 1 (use numbers for booleans)
  • early_access: 1, experimental_ui: 0
  • ab_test_group: "variant_b"

External Data

Other systems

  • crm_segment: "high_value", support_tickets: 2
  • community_score: 95, forum_posts: 45
  • twitch_subscriber: 1, discord_member: 1

Operators

OperatorUsageExample
==Equalsfavorite_class == "warrior"
!=Not equalsstatus != "inactive"
>Greater thanwins > 10
>=Greater or equalpvp_rating >= 1800
<Less thanlosses < 5
<=Less or equalrank <= 100
hasString containstags has "vip"
not_hasString doesn't containtags not_has "banned"

Combining Conditions

Multiple dynamic field conditions can be linked together:

AND - All conditions must be true

score >= 10 AND level == 2

OR - Any condition must be true

score >= 10 OR level == 2

AND NOT - First true, second false

score >= 10 AND NOT banned == 1

Example: 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_score not score
  • 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.