{
  "slug": "snow-contract-seasonal-vs-per-push",
  "title": "Snow Contract Seasonal vs Per-Push Calculator",
  "heading": "Snow Removal Seasonal vs Per-Push Pricing Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/snow-contract-seasonal-vs-per-push",
  "summary": "Compare seasonal flat-rate contracts against per-push billing for a snow account.",
  "description": "Snow removal pricing is a bet on winter weather. A seasonal contract locks in revenue regardless of snowfall, protecting you from a light winter but capping upside in a heavy one. Per-push billing does the opposite. This calculator uses historical average pushes per season and your per-push rate to show the breakeven snowfall level where seasonal and per-push pricing produce equal revenue.",
  "formula": "Per-push revenue = expected pushes × price per push. Breakeven pushes = seasonal price ÷ price per push. Seasonal wins above breakeven pushes; per-push wins below it.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=snow-contract-seasonal-vs-per-push",
  "inputs": [
    {
      "id": "seasonalPrice",
      "label": "Seasonal flat contract price",
      "kind": "number",
      "hint": null,
      "default": 2400,
      "unit": "$",
      "min": 100,
      "max": null
    },
    {
      "id": "pricePerPush",
      "label": "Price per push",
      "kind": "number",
      "hint": null,
      "default": 150,
      "unit": "$",
      "min": 10,
      "max": null
    },
    {
      "id": "avgPushes",
      "label": "Historical average pushes per season",
      "kind": "number",
      "hint": null,
      "default": 14,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "worstPushes",
      "label": "Worst-case (heavy winter) pushes",
      "kind": "number",
      "hint": null,
      "default": 24,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "bestPushes",
      "label": "Best-case (light winter) pushes",
      "kind": "number",
      "hint": null,
      "default": 6,
      "unit": null,
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "breakeven",
      "label": "Breakeven pushes",
      "format": "decimal",
      "hint": null,
      "primary": true
    },
    {
      "id": "avgRevenuePerPush",
      "label": "Per-push revenue (avg winter)",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "worstRevenuePerPush",
      "label": "Per-push revenue (heavy winter)",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "bestRevenuePerPush",
      "label": "Per-push revenue (light winter)",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "seasonalAdvantage",
      "label": "Seasonal gain in heavy winter",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Seasonal flat contract price: 2400 $",
      "Price per push: 150 $",
      "Historical average pushes per season: 14",
      "Worst-case (heavy winter) pushes: 24",
      "Best-case (light winter) pushes: 6"
    ],
    "outputs": [
      "Breakeven pushes: 16",
      "Per-push revenue (avg winter): $2,100",
      "Per-push revenue (heavy winter): $3,600",
      "Per-push revenue (light winter): $900",
      "Seasonal gain in heavy winter: $1,200"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter seasonal flat contract price ($).",
      "Enter price per push ($).",
      "Enter historical average pushes per season.",
      "Enter worst-case (heavy winter) pushes.",
      "Enter best-case (light winter) pushes.",
      "Read your breakeven pushes 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": {
        "seasonalPrice": 1400,
        "pricePerPush": 90,
        "avgPushes": 8,
        "worstPushes": 14,
        "bestPushes": 4
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "seasonalPrice": 2400,
        "pricePerPush": 150,
        "avgPushes": 14,
        "worstPushes": 24,
        "bestPushes": 6
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "seasonalPrice": 3800,
        "pricePerPush": 240,
        "avgPushes": 22,
        "worstPushes": 38,
        "bestPushes": 10
      }
    }
  ],
  "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": "Which pricing model is better for the contractor?",
      "a": "Seasonal contracts are better for the contractor when average pushes are near or above the breakeven point, because you get paid the same whether it snows twice or twenty times, removing weather risk from your revenue. In light-snow markets or with customers who negotiate low seasonal prices, per-push billing often earns more over the season."
    },
    {
      "q": "How do I set the seasonal price fairly?",
      "a": "Price seasonal contracts at roughly the per-push rate times the historical average pushes, plus a 10-20% risk premium to cover the years that come in heavier than average. If your region's average is 14 pushes and per-push rate is $150, a seasonal price of $2,300-$2,500 accounts for the premium you deserve for taking on weather risk."
    },
    {
      "q": "Should I offer both options to customers?",
      "a": "Yes, and most successful snow operators do. Risk-averse customers (HOAs, businesses that can't tolerate a snowed-in lot) will pay a premium for seasonal certainty, while price-sensitive residential customers often prefer per-push and accept the variability. Offering both segments your customer base by risk tolerance."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/quote-close-rate-revenue",
    "https://www.revenuelab.fyi/toolbox/fuel-surcharge-local-route"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Snow Contract Seasonal vs Per-Push Calculator (https://www.revenuelab.fyi/toolbox/snow-contract-seasonal-vs-per-push)"
}