{
  "slug": "lms-seat-pricing",
  "title": "LMS Seat Pricing Calculator",
  "heading": "LMS Seat Pricing Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/lms-seat-pricing",
  "summary": "Per-seat price and margin for licensing your learning platform to schools or companies.",
  "description": "Learning management systems sell in per-seat licenses, but the quoted per-seat price has to cover hosting, support, content updates, and sales cost while still leaving a margin, and volume discounts change the math at every tier. This calculator takes your cost base and desired margin and computes the minimum per-seat price at a given seat count, plus what a volume discount does to your actual margin.",
  "formula": "Total cost = fixed cost + (seats × variable cost per seat). Required price/seat = (total cost) ÷ (seats × (1 − margin%)) adjusted for margin target. Discounted revenue = seats × price × (1 − discount%).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=lms-seat-pricing",
  "inputs": [
    {
      "id": "seats",
      "label": "Seats in this contract",
      "kind": "number",
      "hint": null,
      "default": 1000,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "fixedCost",
      "label": "Fixed annual cost (hosting, support base)",
      "kind": "number",
      "hint": null,
      "default": 40000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "variableCost",
      "label": "Variable cost per seat per year",
      "kind": "number",
      "hint": null,
      "default": 6,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "targetMargin",
      "label": "Target gross margin",
      "kind": "number",
      "hint": null,
      "default": 65,
      "unit": "%",
      "min": 0,
      "max": 95
    },
    {
      "id": "volumeDiscount",
      "label": "Volume discount offered",
      "kind": "number",
      "hint": null,
      "default": 10,
      "unit": "%",
      "min": 0,
      "max": 50
    }
  ],
  "outputs": [
    {
      "id": "pricePerSeat",
      "label": "List price per seat",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "discountedPrice",
      "label": "Price after volume discount",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "actualMargin",
      "label": "Actual margin at discounted price",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "actualRevenue",
      "label": "Total contract revenue",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "totalCost",
      "label": "Total cost to serve",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Seats in this contract: 1000",
      "Fixed annual cost (hosting, support base): 40000 $",
      "Variable cost per seat per year: 6 $",
      "Target gross margin: 65 %",
      "Volume discount offered: 10 %"
    ],
    "outputs": [
      "List price per seat: $131.43",
      "Price after volume discount: $118.29",
      "Actual margin at discounted price: 61.1%",
      "Total contract revenue: $118,286",
      "Total cost to serve: $46,000"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter seats in this contract.",
      "Enter fixed annual cost (hosting, support base) ($).",
      "Enter variable cost per seat per year ($).",
      "Enter target gross margin (%).",
      "Enter volume discount offered (%).",
      "Read your list price per seat 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": {
        "seats": 600,
        "fixedCost": 24000,
        "variableCost": 3.5999999999999996,
        "targetMargin": 39,
        "volumeDiscount": 6
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "seats": 1000,
        "fixedCost": 40000,
        "variableCost": 6,
        "targetMargin": 65,
        "volumeDiscount": 10
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "seats": 1600,
        "fixedCost": 64000,
        "variableCost": 9.600000000000001,
        "targetMargin": 95,
        "volumeDiscount": 16
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "Why does fixed cost matter more at low seat counts?",
      "a": "Fixed hosting and support costs spread across fewer seats, so a 200-seat contract needs a much higher per-seat price than a 5,000-seat contract to hit the same margin. This is why LMS vendors push minimum contract sizes."
    },
    {
      "q": "How much volume discount can I offer before losing margin?",
      "a": "Check the 'actual margin' output — if it drops below your minimum acceptable margin (often 40-50% for SaaS-like products), the discount is too deep for that seat count. Large enterprise deals can absorb bigger discounts because fixed costs are already covered by other contracts."
    },
    {
      "q": "What counts as variable cost per seat?",
      "a": "Cloud infrastructure scaling with usage, per-seat support tickets, content licensing fees, and payment processing. Keep this separate from fixed cost, which doesn't change whether you have 500 or 5,000 seats."
    },
    {
      "q": "Should content update costs be fixed or variable?",
      "a": "Usually fixed, since content development doesn't scale directly with seat count — the same course update serves every seat. Put ongoing content maintenance in fixed cost unless you customize content per customer."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/online-course-completion-economics",
    "https://www.revenuelab.fyi/toolbox/cohort-course-revenue-refund"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — LMS Seat Pricing Calculator (https://www.revenuelab.fyi/toolbox/lms-seat-pricing)"
}