Skip to content

Feature Engagement

Feature Engagement measures how players interact with specific UI elements and game features. Use this to detect unused mechanics, optimize tutorials, and find opportunities for engagement improvements.

Engagement events are triggered when players interact with buttons, menus, or features. Send them using QuestData.track():

# Track button clicks
QuestData.track("engagement_interaction", {
"feature_id": "shop_button",
"interaction_type": "click",
"section": "main_menu"
})
# Track menu opens
QuestData.track("engagement_interaction", {
"feature_id": "settings_menu",
"interaction_type": "open",
"duration_seconds": 45
})
# Track feature usage
QuestData.track("engagement_interaction", {
"feature_id": "daily_challenge",
"interaction_type": "view",
"completed": true
})
MetricDescription
ImpressionsTimes a feature was shown to players
InteractionsTimes players clicked/opened a feature
CTRClick-Through Rate (interactions ÷ impressions)
Avg DurationAverage time spent in feature
Dead Content %Features with <5% CTR

Use the QuestButton helper node to automatically track button clicks:

extends Control
@onready var shop_button = $VBoxContainer/ShopButton
func _ready():
QuestData.setup_button(shop_button, {
"feature_id": "shop_button",
"section": "main_menu"
})

The helper automatically sends engagement_interaction events with interaction_type: "click".

Pages with <5% CTR are highlighted in red. These features might be:

  • Poorly placed on screen
  • Unclear button labels
  • Features players don’t need
  • Hidden behind menus
Terminal window
curl "https://api.questdata.io/v1/stats/engagement?from=2026-01-01&to=2026-04-01" \
-H "x-game-api-key: YOUR_API_KEY"

Response:

{
"features": [
{
"feature_id": "shop_button",
"impressions": 1000,
"interactions": 150,
"ctr": 15.0,
"avg_duration_seconds": 30
},
{
"feature_id": "daily_challenge",
"impressions": 500,
"interactions": 15,
"ctr": 3.0,
"status": "dead_content"
}
]
}