{
  "slug": "retail-attachment-rate",
  "title": "Retail Attachment Rate Calculator",
  "heading": "Salon Retail Attachment Rate Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/retail-attachment-rate",
  "summary": "Measure what share of clients buy retail and what it's worth to you.",
  "description": "Retail sales are the highest-margin revenue a salon generates, often 45-55% gross margin against 8-12% for services, yet most salons never measure attachment rate — the percentage of service tickets that include a retail purchase. This calculator takes your total retail transactions and total service tickets over a period and computes attachment rate, average retail sale, and the incremental annual revenue available if you improved that rate toward an industry benchmark. Salons in the top quartile hit 30-45% attachment; average salons sit closer to 10-15%. The gap between where you are and where you could be, multiplied across your annual ticket count, is usually a bigger number than owners expect and cheaper to capture than acquiring new clients.",
  "formula": "Attachment rate = retail transactions ÷ service tickets. Retail revenue per ticket = total retail $ ÷ service tickets. Opportunity = (target rate − current rate) × tickets × avg retail sale.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=retail-attachment-rate",
  "inputs": [
    {
      "id": "serviceTickets",
      "label": "Service tickets per month",
      "kind": "number",
      "hint": null,
      "default": 400,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "retailTransactions",
      "label": "Retail transactions per month",
      "kind": "number",
      "hint": null,
      "default": 60,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "avgRetailSale",
      "label": "Average retail sale",
      "kind": "number",
      "hint": null,
      "default": 32,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "targetRate",
      "label": "Target attachment rate",
      "kind": "number",
      "hint": null,
      "default": 25,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "retailMarginPct",
      "label": "Retail gross margin",
      "kind": "number",
      "hint": null,
      "default": 48,
      "unit": "%",
      "min": 0,
      "max": 100
    }
  ],
  "outputs": [
    {
      "id": "attachRate",
      "label": "Current attachment rate",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "monthlyRetailRevenue",
      "label": "Current monthly retail revenue",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "additionalRevenue",
      "label": "Additional monthly revenue at target",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "additionalAnnualProfit",
      "label": "Additional annual gross profit at target",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "annualRetailRevenue",
      "label": "Current annual retail revenue",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Service tickets per month: 400",
      "Retail transactions per month: 60",
      "Average retail sale: 32 $",
      "Target attachment rate: 25 %",
      "Retail gross margin: 48 %"
    ],
    "outputs": [
      "Current attachment rate: 15.0%",
      "Current monthly retail revenue: $1,920",
      "Additional monthly revenue at target: $1,280",
      "Additional annual gross profit at target: $7,373",
      "Current annual retail revenue: $23,040"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter service tickets per month.",
      "Enter retail transactions per month.",
      "Enter average retail sale ($).",
      "Enter target attachment rate (%).",
      "Enter retail gross margin (%).",
      "Read your current attachment rate 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": {
        "serviceTickets": 240,
        "retailTransactions": 35,
        "avgRetailSale": 19,
        "targetRate": 15,
        "retailMarginPct": 29
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "serviceTickets": 400,
        "retailTransactions": 60,
        "avgRetailSale": 32,
        "targetRate": 25,
        "retailMarginPct": 48
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "serviceTickets": 640,
        "retailTransactions": 95,
        "avgRetailSale": 51,
        "targetRate": 40,
        "retailMarginPct": 77
      }
    }
  ],
  "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": "What's a good retail attachment rate?",
      "a": "Industry benchmarks put average salons at 10-15%, strong salons at 20-25%, and top performers (usually with structured recommendation training and retail displayed at checkout) at 30-45%. Barbershops and men's grooming tend to run lower than color-focused salons because retail need is lower per visit."
    },
    {
      "q": "Why does retail matter more than another service sale?",
      "a": "Retail margin runs 45-55% with almost no labor cost attached, versus service margin that has to cover the stylist's commission or hourly wage plus product. A $30 retail sale can be nearly pure profit added to a visit that's already happening, making it the cheapest revenue in the business."
    },
    {
      "q": "How do stylists actually raise their attachment rate?",
      "a": "The biggest lever is a specific, personalized recommendation at the chair tied to something the stylist did or noticed, not a generic pitch at checkout. Salons that train a simple script — 'this is the same product I just used, here's why it matters for your hair' — consistently see rates jump 5-10 points within a quarter."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/salon-product-inventory-turns",
    "https://www.revenuelab.fyi/toolbox/spa-package-pricing-calculator",
    "https://www.revenuelab.fyi/toolbox/salon-membership-pricing"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Retail Attachment Rate Calculator (https://www.revenuelab.fyi/toolbox/retail-attachment-rate)"
}