Streaks

Build user habits with in-app streaks

Purpose-built app gamification for daily, weekly, or monthly streaks powered by any user interaction. Let users personalize streak logic and use streak freezes to increase average streak length.

Powering gamification experiences for 1M+ users

CampfireRevisionDojoLexiooOnePrepLealCyberPatientBohemian ResearchMaths GenieRitmo

Read our customer stories

Streaks engine

A purpose-built streaks engine

Build in-app streaks using a flexible, battle-tested logic engine ready for scale.

Flexible streak engine
Build daily, weekly, or monthly streaks powered by any combination of user interactions and conditions.
User-customizable streak logic
Let users customize streak logic within defined guardrails without rebuilding your streak system.
Battle-tested at scale
Ensure users never silently lose streaks due to time zone or daylight savings edge cases.

Streak freezes

Keep streaks alive for longer

Increase average streak length and user retention with streak freezes.

Configurable earning rates
Use auto-earn logic to automatically grant streak freezes to users over time, up to a maximum number.
Automatic consumption
Automatically consume streak freezes when users are about to lose their streak.
Increase average streak length
Keep streaks going longer to drive higher retention and less churn.

Streak reminder notifications

Nudge users before streaks break

Send automated email and push reminders when users are about to lose their streak.

Automated streak protection
Automatically detect when users are about to lose their streak and send a timely reminder before it breaks.
Email and push channels
Reach users with streak reminders over email, push notifications, or both — whichever channels they prefer.
Respect user preferences
Let users opt out through a built-in preference center so you stay data and privacy compliant.
Inbox

from: [email protected]

9:41 AM

to: [email protected]

Your 30-day streak is at risk!

30-day streak at risk

Come back today to keep it alive

7d
Done
30d
At risk
90d
?

Streak analytics

Understand streak performance at every level

Track streak distribution, active streak trends, and the percentage of daily active users with streaks to optimize long-term retention.

Track streak distribution
See where users drop off across streak lengths so you can tune your streak settings and protect momentum.
Monitor active streak volume
Measure active streak trends over time to spot growth, seasonality, and sudden retention changes.
Measure daily engagement impact
Compare how many daily active users maintain short and long streaks to understand habit depth.

Gamification software for modern product teams

The only gamification platform built for the modern era. Control via API or MCP and wire into your development workflow across multiple environments.

Official Gamification SDKs

NodeJS
Go
Java
.NET
PHP
Python
Ruby
First-class APIs for fast-moving teams
Idempotent, retry-safe, time-zone aware. Designed to feel obvious the first time you read the docs.
streaks.ts
// Load current streak state for a user with recent history const streak = await trophy.users.streak(user.id, { historyPeriods: 14, }) const activeLength = streak.length ?? 0 // Keep a compact history for the activity feed const recentHistory = streak.history?.slice(-7) ?? [] // Get number of freezes remaining const freezesRemaining = streak.freezes ?? 0
Control everything via MCP
Beta
Connect Trophy to MCP clients like Cursor and Claude Code and configure features without touching the dashboard.

Trophy MCP

Sonnet 4.6 · 8 tools loaded

> Add streak tracking for daily workouts. Give users 1 freeze a week to recover from missed days.

Listed Trophy MCP tools · read streaks and freezes docs

(ctrl+o to expand)

I'll wire up Trophy event tracking and configure the streaks feature to track one daily workout, with support for one freeze a week.

  1. Track completed workouts as Trophy metric events
  2. Configure Trophy streaks to track one daily workout, with freeze support

metrics.create({ name: 'Workouts Completed', key: 'workouts-completed' })

streaks.configure({ thresholds: [{ key: 'workouts-completed', length: 1 }], freezes: { max: 2, start: 1, autoEarn: 'weekly', autoEarnAmount: 1 } })

Streak tracking is configured in Trophy staging environment. Shall I copy to production?

Connect your stack via webhooks
Trigger workflows in third-party tools and internal systems in real time based on changes in Trophy.
streak.started
Trophy
streak.extended
streak.lost
Customer.io
Knock
OneSignal
Mixpanel
Amplitude
Develop, test, and deploy across environments
Separate dev, staging, and production environments with their own keys, data, and configuration. Promote changes with confidence.
Production
Staging
Pre-prod
Jason Dev
Charlie Dev
Keith Dev

Scale with confidence

Trusted by startups and enterprises alike. Scale seamlessly from your first to your millionth user.

Scale from first user to millionth
Latency, throughput, and uptime that hold up as your user base grows.

150M

API requests · 30D

just now

164ms

p95 latency · 24H

just now

100.0%

Uptime · 90D

Secure by design
Encryption in transit and at rest, scoped API keys, and privacy-first defaults out of the box.
  • Data encryption

    TLS 1.2+ in transit and AES-256 at rest

  • Privacy-first

    Trophy operates without PII by default

  • Secure API keys

    Rotation and revocation on demand

Reliable at scale
Fault tolerance, rate limits, and idempotent APIs keep gamification logic dependable under load.
  • Fault tolerant

    Automatic failover through redundancy

  • Rate limited

    Per-endpoint limits maintain fair use

  • Idempotent

    Retry requests without side-effects