👻 Spooky Analytics

Analytics so accurate,
it's spooky

Product Manager as a Service for Game Developers.
Predictive analytics, automated event evaluation, and actionable insights.

No credit card required · Setup in 5 minutes

🎯

PM as a Service

Weekly actionable insights leveraging live data. Prioritized low-hanging fruit to improve retention & revenue.

🧭

Event Evaluation

Automatic event depth optimization for incentivized and organic flows. Complex event auto-generation and MMP integration.

🔮

Predictive Analytics

Real-time client-side predictions. Spend/churn classification and LTV calculation per UA channel.

💸

Startup-Friendly

Free to try. Starting at $99/game/month. Backed by Google for Startups, Startup HUB Poland, Spooky House Studios.

Ready to see what your players are really doing?

✨ Funded by Google For Startups

© 2025 Spooky Analytics · Making game analytics less scary, more spooky.

👻 Spooky Analytics

Your Apps

New App

Loading…

Used to authenticate requests — sent in the body for events and in the URL path for predictions. No separate API key is required.

Integration Guide

Send analytics events and read ML purchase predictions from your app.

1. Events

Send analytics events from your app to Spooky Analytics.

Endpoint

Send a POST request to:

POST /v2/events

Base URL is provided in your project settings.

HeaderValue
Content-Typeapplication/json

Request Body Format

{ "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 } } ] }

Success Response

{ "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).

Response Codes

CodeMeaningAction
200SuccessRemove events from queue
401UnauthorizedCheck App ID
413Payload too largeReduce batch size (max 100 events)
422Validation errorDon't retry — fix request body
500Server errorRetry with backoff

Session Management

Sessions are defined by user activity with an inactivity timeout (default: 2 minutes). No explicit session_end event is required.

For each event:
  1. Check if current_time - last_event_time > SESSION_TIMEOUT
  2. If yes → generate a new session_id (UUID prefixed with s_)
  3. If no → reuse the current session_id
  4. Update last_event_time

Batching & Offline Queue

SettingRecommended
Batch size50 events
Max events per request100 (hard limit — larger batches return 413)
Batch interval30 seconds
Offline queue max10,000 events / 5 MB
Offline max age7 days
Retry attempts3 (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.

2. Predictions

Request ML-powered purchase predictions for a user for the following 7 days. Recommended: once daily on app open, cache for 24h.

Endpoint

GET /v2/predictions/<App ID>/{user_id}

Response

{ "user_id": "user_123", "app_id": "", "prediction_date": "2025-03-11", "segment": "HOT | WARM | COLD | null" }

Segments

SegmentMeaningSuggested Action
HOTHigh purchase probabilityShow special offer
WARMMedium purchase probabilityShow promo on exit
COLDLow purchase probabilityStandard UX

3. Code Snippets

Choose your platform — each tab shows how to send events and how to fetch a prediction.

Send Events

Fetch Prediction

Send Events

Fetch Prediction

Send Events

Fetch Prediction

Send Events

Fetch Prediction

Send Events

Fetch Prediction

Sign In

or