{
  "slug": "snow-removal-per-push-pricing",
  "title": "Snow Removal Per-Push Pricing Calculator",
  "heading": "Snow Removal Per-Push Job Pricing Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/snow-removal-per-push-pricing",
  "summary": "Price an individual snow push by lot size, snowfall depth, and equipment type.",
  "description": "A single per-push price needs to account for the fact that a foot of snow takes far longer to clear than two inches, and a parking lot needing a truck plow behaves very differently from a sidewalk needing a snowblower or shovel crew. This calculator estimates clearing time from lot size, snow depth, and equipment speed, then converts that into a per-push price using your target hourly rate.",
  "formula": "Clearing minutes = lot size ÷ (base clearing rate ÷ depth factor). Price = (clearing minutes ÷ 60) × target hourly rate + mobilization fee.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=snow-removal-per-push-pricing",
  "inputs": [
    {
      "id": "lotSize",
      "label": "Area to clear",
      "kind": "number",
      "hint": null,
      "default": 5000,
      "unit": "sq ft",
      "min": 200,
      "max": null
    },
    {
      "id": "clearRate",
      "label": "Base clearing rate (2in snow)",
      "kind": "number",
      "hint": null,
      "default": 400,
      "unit": "sq ft/min",
      "min": 50,
      "max": null
    },
    {
      "id": "depth",
      "label": "Snow depth",
      "kind": "number",
      "hint": null,
      "default": 4,
      "unit": "in",
      "min": 1,
      "max": 24
    },
    {
      "id": "targetHourly",
      "label": "Target hourly rate",
      "kind": "number",
      "hint": null,
      "default": 120,
      "unit": "$",
      "min": 20,
      "max": null
    },
    {
      "id": "mobilizationFee",
      "label": "Mobilization / travel fee",
      "kind": "number",
      "hint": null,
      "default": 25,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "price",
      "label": "Per-push price",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "clearMinutes",
      "label": "Estimated clearing time",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "depthFactor",
      "label": "Depth difficulty factor",
      "format": "decimal",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Area to clear: 5000 sq ft",
      "Base clearing rate (2in snow): 400 sq ft/min",
      "Snow depth: 4 in",
      "Target hourly rate: 120 $",
      "Mobilization / travel fee: 25 $"
    ],
    "outputs": [
      "Per-push price: $58",
      "Estimated clearing time: 16.3",
      "Depth difficulty factor: 1.3"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter area to clear (sq ft).",
      "Enter base clearing rate (2in snow) (sq ft/min).",
      "Enter snow depth (in).",
      "Enter target hourly rate ($).",
      "Enter mobilization / travel fee ($).",
      "Read your per-push price 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": {
        "lotSize": 3000,
        "clearRate": 250,
        "depth": 2,
        "targetHourly": 70,
        "mobilizationFee": 15
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "lotSize": 5000,
        "clearRate": 400,
        "depth": 4,
        "targetHourly": 120,
        "mobilizationFee": 25
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "lotSize": 8000,
        "clearRate": 650,
        "depth": 6,
        "targetHourly": 190,
        "mobilizationFee": 40
      }
    }
  ],
  "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 snow depth affect price more than proportionally?",
      "a": "Beyond a certain depth, plows and blowers need multiple passes, drift piles get taller and require more careful placement, and traction becomes harder, all of which slow the operator down disproportionately. A 12-inch snowfall isn't just twice as slow as 6 inches, it's often 2.5-3x slower once pile management and multiple passes are factored in."
    },
    {
      "q": "Should the mobilization fee apply to every push?",
      "a": "Yes, especially for smaller residential accounts where drive time is a meaningful share of the job. It covers the truck getting to and from the property and blade drop/raise setup, similar to a trip charge in other trades, and it should scale with distance for accounts far outside your core route."
    },
    {
      "q": "How does this differ from the seasonal vs per-push comparison calculator?",
      "a": "This calculator prices a single push event from first principles (lot size, depth, equipment speed). The seasonal vs per-push calculator takes an already-set per-push price and compares total season revenue between a seasonal flat contract and per-push billing across different snowfall scenarios."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/snow-contract-seasonal-vs-per-push",
    "https://www.revenuelab.fyi/toolbox/fuel-surcharge-local-route"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Snow Removal Per-Push Pricing Calculator (https://www.revenuelab.fyi/toolbox/snow-removal-per-push-pricing)"
}