Creator Analytics & API: Understand How Your Apps Perform
New analytics dashboard with engagement metrics, app health monitoring, and trending rank — plus a full API for AI-powered workflows.
What's New
We've upgraded the creator dashboard with three new sections and launched a public API so you can access your app data programmatically.
Enhanced Dashboard
When you open Dashboard > Analytics for any of your apps, you'll now see:
Trending Rank — See your app's trending score and where it ranks among all published apps. The trending algorithm considers recent views, runs, and engagement to surface the best apps.
Engagement Metrics — Beyond views and runs, you can now see:
- Sessions: How many times users opened your app
- Average Duration: How long users spend in your app
- Returning Users: Users who came back for more
App Health — We automatically detect runtime errors in your app (JavaScript errors, network failures, etc.) and show you a health summary:
- Green = no issues in the last 24 hours
- Yellow = a few issues detected
- Red = many issues detected
You can expand the health section to see the top errors by occurrence, including what phase they happened in (runtime, build, etc.) and when they were last seen. No scary stack traces — just clear, actionable info.
Analytics API
You can now access all your analytics data via API using the same Personal Access Token you use for publishing. This is especially useful if you're building with AI coding agents — paste the API reference below into your agent's context and it can help you monitor your apps.
Get your API key: Go to Dashboard > Creator Tools and create a publish key if you don't have one.
Quick Start
# Set your token
export GAPP_TOKEN="gapp_your_token_here"
# Get overview of all your apps
curl -H "Authorization: Bearer $GAPP_TOKEN" \
https://gapp.so/api/user/apps/stats
# Get detailed analytics for a specific app
curl -H "Authorization: Bearer $GAPP_TOKEN" \
https://gapp.so/api/apps/my-app-slug/analytics?period=30d
# Check app errors
curl -H "Authorization: Bearer $GAPP_TOKEN" \
https://gapp.so/api/apps/my-app-slug/errors?time_range=7dWhat Each Metric Means
| Metric | What It Tells You |
|---|---|
| Views | Someone visited your app's landing page |
| Runs | Someone actually opened and used your app |
| Run Rate | % of viewers who run the app (higher = better landing page) |
| Sessions | Individual usage sessions in your app |
| Avg Duration | How long users spend per session |
| Returning Users | Users who came back and used your app again |
| Trending Score | Algorithmic score based on recent activity |
| Health Status | Whether your app is throwing errors |
API Reference (for AI Agents)
The following section is designed to be pasted into AI agent context (Claude, Cursor, etc.) for programmatic access to your gapp.so app analytics.
Authentication
All endpoints accept a Personal Access Token via Bearer auth:
Authorization: Bearer gapp_xxxxxxxx...Tokens are created at /dashboard/settings/creator-tools. The same token works for both publishing and analytics.
GET /api/user/apps/stats
Overview of all your apps.
Response:
{
"success": true,
"summary": {
"total_apps": 5,
"total_views": 12450,
"total_runs": 3200,
"views_today": 45,
"runs_today": 12,
"views_week": 890,
"runs_week": 234,
"views_month": 3400,
"runs_month": 890
},
"apps": [
{
"id": "uuid",
"slug": "my-app",
"title": "My Cool App",
"status": "active",
"version": 3,
"views": 5000,
"runs": 1200,
"views_today": 20,
"runs_today": 5,
"trending_score": 42,
"trending_rank": 12,
"health_status": "healthy",
"errors_24h": 0,
"created_at": "2026-01-15T00:00:00.000Z",
"updated_at": "2026-03-18T00:00:00.000Z"
}
]
}GET /api/apps/{slug}/analytics
Detailed analytics for a single app.
Query Parameters:
| Param | Default | Values |
|---|---|---|
period | 30d | 7d, 30d, 90d, all |
Response:
{
"success": true,
"app": {
"id": "uuid",
"slug": "my-app",
"title": "My Cool App",
"version": 3,
"status": "active",
"createdAt": "2026-01-15T00:00:00.000Z"
},
"summary": {
"total_views": 5000,
"total_runs": 1200,
"unique_views": 4000,
"unique_runs": 1000,
"avg_daily_views": 167,
"avg_daily_runs": 40,
"run_rate": 24
},
"trending": {
"score": 42,
"rank": 12,
"total_ranked": 456
},
"engagement": {
"total_sessions": 890,
"unique_users": 650,
"avg_duration": 165,
"median_duration": 120,
"returning_users": 89
},
"timeseries": [
{
"date": "2026-03-01",
"views": 150,
"runs": 40,
"unique_views": 120,
"unique_runs": 35
}
],
"referrers": [
{ "source": "Direct", "views": 2500, "percentage": 50 },
{ "source": "google.com", "views": 1000, "percentage": 20 }
],
"registrations": {
"total": 45,
"last7d": 5,
"last30d": 18,
"conversion_rate": 1.13
},
"health": {
"status": "healthy",
"errors_24h": 0,
"errors_7d": 2,
"top_errors": [
{
"message": "Cannot read property 'x' of undefined",
"error_code": "CLIENT_JS_ERROR",
"phase": "runtime_client",
"severity": "error",
"occurrence_count": 2,
"last_seen_at": "2026-03-17T10:30:00.000Z"
}
]
},
"period": "30d"
}GET /api/apps/{slug}/errors
Detailed error list for a single app (privacy-safe — no user IDs or stack traces).
Query Parameters:
| Param | Default | Values |
|---|---|---|
phase | all | runtime_client, runtime_server, build, upload, storage |
severity | all | error, warning, info |
time_range | 7d | 24h, 7d, 30d, all |
limit | 20 | max 50 |
offset | 0 | — |
Response:
{
"success": true,
"app": { "id": "uuid", "slug": "my-app", "title": "My Cool App" },
"errors": [
{
"id": "error-uuid",
"phase": "runtime_client",
"severity": "error",
"error_code": "CLIENT_JS_ERROR",
"message": "Cannot read property 'x' of undefined",
"occurrence_count": 8,
"first_seen_at": "2026-03-15T08:00:00.000Z",
"last_seen_at": "2026-03-19T14:30:00.000Z",
"resolved_at": null
}
],
"stats": {
"total_unresolved": 3,
"last_24h": 1,
"last_7d": 5,
"by_phase": { "runtime_client": 3 },
"by_severity": { "error": 2, "warning": 1 }
},
"pagination": {
"total": 3,
"limit": 20,
"offset": 0,
"has_more": false
}
}Error Codes
| Code | HTTP | Meaning |
|---|---|---|
AUTH_REQUIRED | 401 | Missing or invalid token |
FORBIDDEN | 403 | App belongs to another creator |
NOT_FOUND | 404 | App slug not found |
VALIDATION_ERROR | 400 | Invalid query parameter |
INTERNAL_ERROR | 500 | Server error |
Example AI Agent Workflows
"Check if any of my apps have errors":
curl -s -H "Authorization: Bearer $GAPP_TOKEN" \
https://gapp.so/api/user/apps/stats | \
jq '.apps[] | select(.health_status != "healthy") | {slug, health_status, errors_24h}'"Get my top-performing app this week":
curl -s -H "Authorization: Bearer $GAPP_TOKEN" \
https://gapp.so/api/user/apps/stats | \
jq '.apps | sort_by(-.views_today) | .[0] | {slug, title, views_today, trending_rank}'"Show me errors for a specific app":
curl -s -H "Authorization: Bearer $GAPP_TOKEN" \
https://gapp.so/api/apps/my-app/errors?time_range=24h | \
jq '.errors[] | {message, phase, occurrence_count, last_seen_at}'