Enhance your application with targets, streaks, badges, levels and more!

Why Gamifio?

Power Behavior Change Through Data-Driven Gamification

Gamif.io is a backend platform that lets you turn raw user data into engaging, goal-driven experiences. Define custom submission types, aggregate user behavior, and build powerful achievement systems using flexible expression-based rules. Whether you're tracking screen time, fitness, learning, or wellness, Gamif.io helps you motivate users with XP, streaks, badges, and progress tracking.

For Product Teams & Developers

Gamif.io is designed to be the invisible engine behind your product’s engagement layer. Whether you're building an internal tool or a consumer-facing app, you get full control over how data is interpreted, evaluated, and rewarded.

Define Submissions

Track any kind of user activity, screenshots, workouts, check-ins, daily logs with flexible data models.

Aggregate Automatically

Group and summarize user data by day, week, month, or custom logic using expression-based aggregator functions.

Create Goals & Infractions

Use simple rules to evaluate behavior, reward good habits, or flag undesirable patterns.

Unlock Badges, Earn XP, Track Streaks

Gamify the experience with built-in mechanics that keep users coming back.

Core Features

🎯Custom Targets

Define goals based on user behavior, usage frequency, or custom expressions (daily, hourly, weekly).

🎯Leaderboards

Let users compete with their friends with group based leaderboards.

🏆Badge Unlocking

Automatically unlock and assign visual badges when milestones or streaks are achieved.

XP / Level Systems

Reward users with XP for completing targets, and track their level progression over time.

🔥Streak Detection

Detect and track streaks across days, weeks, or custom time windows for habit reinforcement.

📊Progress

Return detailed history of progress toward targets, streaks, and user performance.

🛠️Webhooks

Trigger external events or write custom logic when targets are met, badges acquired and XP earned

📊No / Low code config.

Configure your targets and badge rules using our simple expressive syntax.

📊Aggregate entry data

Agreggate your users entry data so that can also be used to awards badges and targets.

Intuitive Admin UI

Targets

Create targets with rules using low code expressions

Create complex rules for your targets using our powerful feature rich expression engine.

Data & Validation

Declarative JSON Schemas

Schemas aren't just for data validation, they also facilite code completion in the expression editors making the developer experiance a piece of cake

Badges and Awards

Richer User Experiences

Increase user engagement by gamifying the experiance and incentivise users to keep coming back

Badges

Create badges based on targets and other stats

Adward badges based on completion of targets, streaks, submissions and more

Powerful REST API

Example: Creating a submission

It all starts with a Submission, a Submission is a chunk of data submitted by the user that can be aggregated and used to evaluate targets which might then lead to a user being awarded badges and XP.

Creating a submission is easy and can be accomplised with a simplePOST request. In this example we create a new submission using the following propertiessubmissionType, clientId and data

A successful request to create a submission will respond with the newly created submission, an array of targets and badges that the submission has met the conditions of, as well as the totalXP earned from that submission.

  • Name
    submissionType
    Type
    string
    Description

    Slug of the submission type that can be defined in the developer dashboard. The schema defined on this submission type will the be used to validate the data payload.

  • Name
    data
    Type
    JSON
    Description

    The shape of this is entirely upto you and must adhere to the schema defined in the submissionType

Create Submission Request

const data = {
  mood: 8,
  sleep: 7,
  food: 6,
  hyhdration: 7
};

const result = await fetch('...api/v2/submissions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <token>'
  },
  data: JSON.stringify({
    clientId: '65dfcee9-7f4c-46c4',
    submissionType: 'mood-tracker',
    data
  })
});

Create Submission Response

const resposnse = {
  submission: {
    "documentId": "bzzlpqp9nfes8yygvb33sstz",
    "createdAt": "2025-05-02T22:01:46.717Z",
    "updatedAt": "2025-05-02T22:01:46.717Z",
    "date": "2025-08-06",
    "data": {
      "mood": 8,
      "sleep": 7,
      "food": 6,
      "hyhdration": 7
    }
  },
  targets: [
    {
      "id": 1,
      "documentId": "pdfx7woqmj684qiawyk5e72j",
      "streak": 5,
      "longestStreak": 5,
      "earnedXP": 500,
      "target": {
        "documentId": "mfjpj66t7xtlmtvfvap0bctb",
        "title": "Good mood",
        "description": "Awarded when a user uploads a submission with a mood above 5",
        "expression": "submission.mood > 5",
        "duration": "day",
        "xpValue": 100,
        "scope": "user",
        "type": "goal",
        "slug": "good-mood",
        "context": "submission"
      },
    }
  ],
  badges: [
    {
      "id": 2,
      "documentId": "x377e40yzozy1m8c8yy5bm8c",
      "name": "Professional",
      "slug": "professional",
      "description": "Professional badge is awarded when you reach 10000 XP",
      "xpValue": 1000,
      "type": "milestone",
      "expression": "getXP() > 1000",
      "streak": null,
      "milestone": null,
      "icon": null,
    }
  ],
  earnedXP: 1100
}

Example: Fetching a user and progress

Fetch all user progress with a single call to get completed targets, acquired badges, earnedXP, level as well as xp required to progress to the next level.

Create Submission Request


const result = await fetch('...api/v2/progress/me', {
  method: 'GET',
  headers: {
    Authorization: 'Bearer <token>'
  }
});

Create Submission Response

const resposnse = {
  earnedXP: 13000,
  level: 5,
  requiredXPToProgress: 2000,
  targets: [
    {
      "id": 1,
      "documentId": "pdfx7woqmj684qiawyk5e72j",
      "streak": 5,
      "longestStreak": 5,
      "earnedXP": 500,
      "target": {
        "documentId": "mfjpj66t7xtlmtvfvap0bctb",
        "title": "Good mood",
        "description": "Awarded when a user uploads a submission with a mood above 5",
        "expression": "submission.mood > 5",
        "duration": "day",
        "xpValue": 100,
        "scope": "user",
        "type": "goal",
        "slug": "good-mood",
        "context": "submission"
      },
    },
    {
      "id": 1,
      "documentId": "pdfx7woqmj684qiawyk5e73a",
      "streak": 2,
      "longestStreak": 10,
      "earnedXP": 2400,
      "target": {
        "documentId": "mfjpj66t7xtlmtvfvap0bctb",
        "title": "Daily Water intake",
        "description": "Awarded when a user uploads a submission with a hyhdration above 8",
        "expression": "submission.hydration > 8",
        "duration": "day",
        "xpValue": 200,
        "scope": "user",
        "type": "goal",
        "slug": "daily-water-intake",
        "context": "submission"
      },
    }
  ],
  badges: [
    {
      "id": 2,
      "documentId": "x377e40yzozy1m8c8yy5bm8c",
      "name": "Professional",
      "slug": "professional",
      "description": "Professional badge is awarded when you reach 10000 XP",
      "xpValue": 1000,
      "type": "milestone",
      "streak": null,
      "milestone": null,
      "icon": null,
    },
    {
      "id": 3,
      "documentId": "x377e40yzozy1m8c8yy5bm8d",
      "name": "Consistency Award",
      "slug": "consistency-award",
      "description": "User has achieved a streak of at least 10 on a target",
      "xpValue": 10000,
      "type": "milestone",
      "streak": null,
      "milestone": null,
      "icon": null,
    }
  ]
}
Thats not all, sign up to the waiting list to be first in line to get access to the full spec and features