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.
Tracking Engagement Events
Section titled “Tracking Engagement Events”Engagement events are triggered when players interact with buttons, menus, or features. Send them using QuestData.track():
# Track button clicksQuestData.track("engagement_interaction", { "feature_id": "shop_button", "interaction_type": "click", "section": "main_menu"})
# Track menu opensQuestData.track("engagement_interaction", { "feature_id": "settings_menu", "interaction_type": "open", "duration_seconds": 45})
# Track feature usageQuestData.track("engagement_interaction", { "feature_id": "daily_challenge", "interaction_type": "view", "completed": true})Dashboard Metrics
Section titled “Dashboard Metrics”| Metric | Description |
|---|---|
| Impressions | Times a feature was shown to players |
| Interactions | Times players clicked/opened a feature |
| CTR | Click-Through Rate (interactions ÷ impressions) |
| Avg Duration | Average time spent in feature |
| Dead Content % | Features with <5% CTR |
QuestButton Helper
Section titled “QuestButton Helper”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".
Finding Dead Features
Section titled “Finding Dead Features”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
API Reference
Section titled “API Reference”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" } ]}