Skip to content
SlashClone

Usage pricing simulator

@agentcosts/usage-pricing-simulator

Test pricing models for an AI product on your real usage before you change a price: per seat, per task, credits, and hybrid (platform fee plus included credits plus overage). Shows revenue, gross margin after LLM cost, and which customers' bills would jump or drop under each model.

SkillFinancev1.0.0 (latest)Tested
Activity
New: be the first to try it

Real output from this kit

How this works

  1. It is a skill: written instructions Claude reads when your request matches what the skill is for. You do not call it by name; just ask for the task.
  2. While it works, it reads and changes files in the places it lists, nowhere else.
  3. It runs these commands on your computer: node scripts/simulate.mjs.
  4. Nothing runs until you choose to use it, and you can remove it any time.

SKILL.md

Usage pricing simulator

Pricing an AI product on gut feel is risky: per-seat pricing can lose money on heavy users, and pure usage pricing can scare off light ones. This kit replays last month's real usage under each pricing model you want to try, so you see revenue, margin, and the customers who would feel the change before anyone gets an email.

Inputs

  1. Usage in the shared schema (from app logs or llm-usage-normalizer), ideally with run_id and outcome so tasks and successes can be counted. One to three recent months.
  2. Customers data/customers.csv: customer,seats,mrr (what they pay per month today), optional plan.
  3. Pricing models data/pricing.json. Copy examples/pricing.json and edit with the user:

    {
      "target_margin": 0.7,
      "bill_on": "success",
      "credit_rates": { "research_agent": 100, "doc_summary": 8, "*": 5 },
      "models": [
        { "name": "Per seat $20", "type": "per_seat", "price_per_seat": 20 },
        { "name": "Per task", "type": "per_task", "minimum": 29, "prices": { "research_agent": 4, "*": 0.2 } },
        { "name": "Credits", "type": "credits", "credit_price": 0.04, "minimum": 29 },
        { "name": "Hybrid", "type": "hybrid", "platform_fee": 79, "included_credits": 1000, "overage_credit_price": 0.04 }
      ]
    }
    • bill_on: success (customers pay for results; you eat failed runs) or all.
    • credit_rates: credits per task type, used by credits and hybrid. * covers any other task.
    • Each model can have a minimum (monthly floor). Hybrid can also take price_per_seat.

Steps

  1. Look at usage per customer first: runs per task per month and LLM cost. Point out the heavy users and the near-zero users; they decide which models work.
  2. Set credit rates from cost, not guesses: a task's credits should be roughly proportional to its cost per successful run (the agent-cost-dashboard shows it). Then pick a credit price that gives the target margin on the average customer.
  3. Run:

    node scripts/simulate.mjs data/usage.csv --customers data/customers.csv --pricing data/pricing.json --prices data/llm-prices.csv --out out/pricing-sim
  4. Read out/pricing-sim.md. For each model report: revenue vs today, gross margin, customers under target or negative, and whose bill rises or falls more than 25%.
  5. Iterate with the user: adjust one number at a time in data/pricing.json (a minimum, the included credits, an overage rate) and rerun. Two or three rounds usually find a model that fixes margins without shocking many customers.
  6. Write a short recommendation: the model, the numbers, who is affected, and a migration idea (grandfather current customers for a term, or apply at renewal).

How to read it

  • Margins are after LLM cost only. Add hosting and other costs with gross-margin-by-customer before final decisions.
  • A model that raises revenue but sends many small customers' bills up 3x is a churn risk; a model that cuts most bills is leaving money behind.
  • Usage changes when pricing changes. Treat results as a first-order estimate, not a forecast.

Output template

**Recommendation: Hybrid ($79 platform fee, 1,000 credits included, $0.04 per extra credit).**
Revenue +3% vs today, margin 81%, no negative customers (cobalt-labs goes from -10% to 60%).
Bills up a lot: cobalt-labs ($60 to $166), foxglove-retail ($49 to $79). Bills down: bluepeak, elmstreet-health.
Migration: apply at renewal; offer foxglove-retail a starter tier.

Guardrails

  • Never change prices, plans, or invoices, and never contact customers. This is a planning tool.
  • Cost numbers depend on the price table; say "based on the example prices" if the user has not checked them against each provider's current pricing.
  • Customer revenue is sensitive. Keep per-customer tables in out/.

README.md

Usage pricing simulator

Replays your real usage under different pricing models (per seat, per task, credits, and hybrid) and shows what each would do to revenue, gross margin, and every customer's bill. Find the model that fixes margins before anyone gets a price-change email.

Who it is for: founders and product or finance leads pricing an AI or agent product.

Example

Input: examples/usage.csv (October usage for 6 customers), examples/customers.csv (seats and current monthly price), examples/pricing.json (four models).

Output (out/pricing-sim.md):

ModelMonthly revenuevs todayGross marginNegativeBills up a lot
Current$746+0%80.3%1none
Per seat $20$760+2%80.7%1none
Per task$489-34%69.9%0cobalt-labs
Hybrid$768+3%80.9%0cobalt-labs, foxglove-retail

Plus every customer's bill and margin under each model.

What it can access

  • Runs node scripts/simulate.mjs (Node built-ins only).
  • Reads data/. Writes data/pricing.json (your models) and out/pricing-sim*.
  • No network. It never changes prices or contacts customers.

Setup

None. Check the example LLM prices against each provider's current pricing before trusting the margins.

Files

  • README.md
  • SKILL.md
  • examples/customers.csv
  • examples/prices.csv
  • examples/pricing.json
  • examples/usage.csv
  • kit.json
  • scripts/lib.mjs
  • scripts/simulate.mjs
  • scripts/usage.mjs

Did it work?

0worked for them0did not work

Sign in to say whether it worked for you.

Nobody has said yet. Tried it? Tell the next person.