{
  "schema": "busybee.public-pricing",
  "schemaVersion": 1,
  "version": "2026-10-13.0",
  "updatedAt": "2026-10-13T00:00:00-05:00",
  "status": "needs_review",
  "synthetic": false,
  "environment": "production",
  "url": "https://busybeelawn.net/ai/pricing.json",
  "purpose": "Public rules for a preliminary, itemized rough estimate before the customer uses the aerial quote tool. Not a quote, not an offer, not binding.",
  "quoteTool": {
    "url": "https://busybeelawn.net/#estimate",
    "note": "The aerial quote tool measures the lawn (OpenLawn aerial measurement), lets the customer redraw the outline, choose services and add preferences. Busy Bee reviews every request and sets the price.",
    "handoff": {
      "description": "Optional query parameters that preselect services and carry the customer’s rough figures into the quote tool. The site checks every value and recalculates with these rules; it never accepts a price from a link. Never put names, emails, phone numbers, addresses or other personal details in the link.",
      "example": "https://busybeelawn.net/?svc=mowing,shrubs&lawn_sqft=8000&shrub_count=6&approx=1#estimate",
      "parameters": {
        "svc": {
          "description": "Services to preselect, comma separated",
          "values": [
            "mowing",
            "edging",
            "mulch",
            "landscape",
            "cleanup",
            "shrubs"
          ]
        },
        "lawn_sqft": {
          "description": "Customer’s estimate of lawn area to mow (not lot size)",
          "input": "lawnSqFt"
        },
        "shrub_count": {
          "description": "Number of shrubs to trim",
          "input": "shrubCount"
        },
        "shrub_size": {
          "description": "Shrub size",
          "input": "shrubSize"
        },
        "bed_sqft": {
          "description": "Bed area to mulch",
          "input": "bedSqFt"
        },
        "depth_in": {
          "description": "Mulch depth in inches",
          "input": "mulchDepthIn"
        },
        "mulch_yd": {
          "description": "Mulch volume in cubic yards",
          "input": "mulchCubicYards"
        },
        "mulch": {
          "description": "Mulch installed or material only",
          "input": "mulchMode"
        },
        "approx": {
          "description": "1 when the customer’s figures are approximate",
          "values": [
            "1"
          ]
        }
      }
    }
  },
  "currency": "USD",
  "moneyUnit": "cents (integer)",
  "rounding": {
    "lineIncrementCents": 100,
    "mode": "half_up",
    "note": "Each line is rounded to the nearest whole dollar after any minimum charge. Subtotals add the rounded lines."
  },
  "calculationOrder": [
    "Check the customer’s inputs against the published units and bounds; ignore and report anything invalid.",
    "Services without an approved rule are reported as “needs review”, never priced at zero.",
    "Ask for missing required inputs instead of assuming them.",
    "Work out quantities. Mulch: cubic yards = bed square feet × depth in inches ÷ 324, rounded up to the published increment.",
    "Apply the rule, then the service’s minimum charge if it has one.",
    "Round each line half up to the published increment.",
    "Add up per-visit (recurring) and one-time lines separately. Never combine them into one total."
  ],
  "mulchVolume": {
    "formula": "cubic yards = bed square feet × depth in inches ÷ 324",
    "divisor": 324
  },
  "inputs": {
    "lawnSqFt": {
      "label": "Lawn area to mow",
      "unit": "sq_ft",
      "min": 100,
      "max": 500000,
      "note": "Mowable lawn only. Lot or parcel size is not lawn area."
    },
    "shrubCount": {
      "label": "Number of shrubs to trim",
      "unit": "shrub",
      "min": 1,
      "max": 500,
      "integer": true
    },
    "shrubSize": {
      "label": "Shrub size",
      "unit": "category",
      "values": [
        "small",
        "medium",
        "large"
      ]
    },
    "bedSqFt": {
      "label": "Bed area to mulch",
      "unit": "sq_ft",
      "min": 10,
      "max": 20000
    },
    "mulchDepthIn": {
      "label": "Mulch depth",
      "unit": "inch",
      "min": 1,
      "max": 6
    },
    "mulchCubicYards": {
      "label": "Mulch volume",
      "unit": "cu_yd",
      "min": 0.25,
      "max": 200
    },
    "mulchMode": {
      "label": "Whether mulch is installed or material only",
      "unit": "category",
      "values": [
        "installed",
        "material_only"
      ]
    }
  },
  "ruleTypes": {
    "flat": "cents per visit (per_visit) or per job (one_time).",
    "area_increment": "baseCents covers includedSqFt; then stepCents for each further stepSqFt or part of it; then minimumCents.",
    "size_bands": "cents of the first band whose upToSqFt is at least the area. Above the last band: needs review.",
    "per_unit": "count × unitCents, or count × sizeCents[size] when sizes are priced (then the size is required); then minimumCents.",
    "per_volume": "cubic yards (given, or from bed area and depth), rounded up to quantityIncrementYd, × ratesCents.installed or ratesCents.material_only. Installed and material-only are different prices."
  },
  "availability": {
    "approved": "Published rate: an assistant may calculate a rough estimate with it.",
    "needs_review": "No published rate. Say it is priced after Busy Bee reviews the request; never use zero."
  },
  "services": [
    {
      "id": "mowing",
      "name": "Lawn Mowing",
      "status": "needs_review",
      "billing": "per_visit",
      "unit": "visit",
      "includes": [],
      "addOns": [],
      "notes": "No rate approved yet. Priced after review.",
      "rule": null,
      "requiredInputs": []
    },
    {
      "id": "edging",
      "name": "Edging & Trimming",
      "status": "needs_review",
      "billing": "per_visit",
      "unit": "visit",
      "includes": [],
      "addOns": [],
      "notes": "No rate approved yet. Priced after review.",
      "rule": null,
      "requiredInputs": []
    },
    {
      "id": "mulch",
      "name": "Mulching & Garden Beds",
      "status": "needs_review",
      "billing": "one_time",
      "unit": "cu_yd",
      "includes": [],
      "addOns": [],
      "notes": "No rate approved yet. Priced after review.",
      "rule": null,
      "requiredInputs": []
    },
    {
      "id": "landscape",
      "name": "Landscape Design & Installation",
      "status": "needs_review",
      "billing": "one_time",
      "unit": "project",
      "includes": [],
      "addOns": [],
      "notes": "No rate approved yet. Priced after review.",
      "rule": null,
      "requiredInputs": []
    },
    {
      "id": "cleanup",
      "name": "Seasonal Cleanup & Maintenance",
      "status": "needs_review",
      "billing": "one_time",
      "unit": "job",
      "includes": [],
      "addOns": [],
      "notes": "No rate approved yet. Priced after review.",
      "rule": null,
      "requiredInputs": []
    },
    {
      "id": "shrubs",
      "name": "Ornamental Pruning",
      "status": "needs_review",
      "billing": "one_time",
      "unit": "shrub",
      "includes": [],
      "addOns": [],
      "notes": "No rate approved yet. Priced after review.",
      "rule": null,
      "requiredInputs": []
    }
  ],
  "exclusions": [
    "A rough estimate is not a quote or an offer. Busy Bee sets the price after reviewing the request.",
    "Taxes, if any, are not included.",
    "Site conditions (slope, access, overgrowth, debris, obstacles) are confirmed on review and can change the price.",
    "Services or materials not listed in these rules are not included."
  ],
  "notIncluded": [
    "Customer-specific or negotiated prices",
    "Historical invoices",
    "Costs and margins"
  ]
}
