Your Apps
Loading…
Product Manager as a Service for Game Developers.
Predictive analytics, automated event evaluation, and actionable insights.
No credit card required · Setup in 5 minutes
Weekly actionable insights leveraging live data. Prioritized low-hanging fruit to improve retention & revenue.
Automatic event depth optimization for incentivized and organic flows. Complex event auto-generation and MMP integration.
Real-time client-side predictions. Spend/churn classification and LTV calculation per UA channel.
Free to try. Starting at $99/game/month. Backed by Google for Startups, Startup HUB Poland, Spooky House Studios.
✨ Funded by Google For Startups
Loading…
Used to authenticate requests — sent in the body for events and in the URL path for predictions. No separate API key is required.
Send analytics events and read ML purchase predictions from your app.
Send analytics events from your app to Spooky Analytics.
Send a POST request to:
POST /v2/eventsBase URL is provided in your project settings.
| Header | Value |
|---|---|
Content-Type | application/json |
{
"request_id": "UUID — unique per batch for idempotency",
"app_id": "",
"user_id": "user_or_device_id",
"session_id": "s_UUID",
"platform": "ios | android | web",
"app_version": "1.2.3",
"country": "US",
"language": "en",
"events": [
{
"event_name": "level_complete",
"event_time": 1706000120,
"params": { "level": 5, "score": 980 }
}
]
} {
"status": "ok",
"accepted": 1,
"request_id": "<your request_id>"
}accepted is the number of events stored. If it is lower than the number you sent, some events were dropped — typically because their event_time is older than 30 days (see Batching below).
| Code | Meaning | Action |
|---|---|---|
| 200 | Success | Remove events from queue |
| 401 | Unauthorized | Check App ID |
| 413 | Payload too large | Reduce batch size (max 100 events) |
| 422 | Validation error | Don't retry — fix request body |
| 500 | Server error | Retry with backoff |
Sessions are defined by user activity with an inactivity timeout (default: 2 minutes). No explicit session_end event is required.
current_time - last_event_time > SESSION_TIMEOUTsession_id (UUID prefixed with s_)session_idlast_event_time| Setting | Recommended |
|---|---|
| Batch size | 50 events |
| Max events per request | 100 (hard limit — larger batches return 413) |
| Batch interval | 30 seconds |
| Offline queue max | 10,000 events / 5 MB |
| Offline max age | 7 days |
| Retry attempts | 3 (exponential backoff: 5s, 15s, 60s) |
Events with an event_time older than 30 days are silently dropped by the server (they won't be counted in accepted). Send events promptly and don't queue them offline for longer than that.
Request ML-powered purchase predictions for a user for the following 7 days. Recommended: once daily on app open, cache for 24h.
GET /v2/predictions/<App ID>/{user_id}{
"user_id": "user_123",
"app_id": "",
"prediction_date": "2025-03-11",
"segment": "HOT | WARM | COLD | null"
} | Segment | Meaning | Suggested Action |
|---|---|---|
| HOT | High purchase probability | Show special offer |
| WARM | Medium purchase probability | Show promo on exit |
| COLD | Low purchase probability | Standard UX |
Choose your platform — each tab shows how to send events and how to fetch a prediction.