{
  "slug": "gacha-pull-probability",
  "title": "Gacha Pull Probability Calculator",
  "heading": "Gacha Probability Calculator",
  "category": "math",
  "url": "https://www.revenuelab.fyi/toolbox/gacha-pull-probability",
  "summary": "Odds of at least one hit across N pulls, and pity cost.",
  "description": "Independent pulls compound differently than intuition suggests. Compute the chance of at least one success across a number of pulls, the pulls needed for a target confidence, and the currency cost.",
  "formula": "P(at least one) = 1 − (1 − p)^n. Pulls for confidence c = ln(1 − c) ÷ ln(1 − p).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=gacha-pull-probability",
  "inputs": [
    {
      "id": "rate",
      "label": "Drop rate per pull",
      "kind": "number",
      "hint": null,
      "default": 0.6,
      "unit": "%",
      "min": 0.01,
      "max": 100
    },
    {
      "id": "pulls",
      "label": "Pulls you'll make",
      "kind": "number",
      "hint": null,
      "default": 90,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "confidence",
      "label": "Target confidence",
      "kind": "number",
      "hint": null,
      "default": 90,
      "unit": "%",
      "min": 1,
      "max": 99.9
    },
    {
      "id": "costPull",
      "label": "Cost per pull",
      "kind": "number",
      "hint": null,
      "default": 2,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "pity",
      "label": "Hard pity at pull #",
      "kind": "number",
      "hint": null,
      "default": 90,
      "unit": null,
      "min": 1,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "atLeastOne",
      "label": "Chance of at least one",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "needed",
      "label": "Pulls for your confidence level",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "expected",
      "label": "Expected pulls per hit",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "cost",
      "label": "Cost of your planned pulls",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "pityCost",
      "label": "Worst-case cost to hard pity",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Drop rate per pull: 0.6 %",
      "Pulls you'll make: 90",
      "Target confidence: 90 %",
      "Cost per pull: 2 $",
      "Hard pity at pull #: 90"
    ],
    "outputs": [
      "Chance of at least one: 41.82%",
      "Pulls for your confidence level: 383",
      "Expected pulls per hit: 167",
      "Cost of your planned pulls: $180.00",
      "Worst-case cost to hard pity: $180.00"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter drop rate per pull (%).",
      "Enter pulls you'll make.",
      "Enter target confidence (%).",
      "Enter cost per pull ($).",
      "Enter hard pity at pull #.",
      "Read your chance of at least one on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "rate": 0.6,
        "pulls": 54,
        "confidence": 54,
        "costPull": 1.2,
        "pity": 54
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "rate": 0.6,
        "pulls": 90,
        "confidence": 90,
        "costPull": 2,
        "pity": 90
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "rate": 0.6,
        "pulls": 144,
        "confidence": 99.9,
        "costPull": 3.2,
        "pity": 144
      }
    }
  ],
  "limitations": [
    "Results are rounded for display; the underlying calculation keeps full precision.",
    "Very large or very small inputs may hit floating-point limits in the browser.",
    "Inputs outside the accepted range are clamped rather than rejected."
  ],
  "faq": [
    {
      "q": "Does a 1% rate mean 100 pulls guarantees it?",
      "a": "No. At 1%, 100 pulls gives roughly a 63% chance. Reaching 99% confidence takes about 459 pulls."
    },
    {
      "q": "Does soft pity change this?",
      "a": "Yes — rates that ramp near the pity threshold beat the flat model. Treat this as the floor, not the exact curve."
    }
  ],
  "related": [],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Gacha Pull Probability Calculator (https://www.revenuelab.fyi/toolbox/gacha-pull-probability)"
}