{
  "name": "CCDocs roofing appointment benchmark",
  "version": "0.9-draft",
  "url": "https://ccdocs.com/research/roofing-appointment-benchmark/",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "attribution": "The Call Center Doctors (ccdocs.com). CC BY 4.0 -- reuse freely with attribution and a link.",
  "question": "What separates a roofing appointment-setting conversation that books from one that does not, when is a homeowner actually reachable in their own local time, and what does an inbound call floor really do with a call it cannot answer?",
  "answer": "Two minutes of agent talk. Of 2,974 engaged conversations running 120 seconds or longer, 38.9% ended in a booked appointment, against 0.195% of the 91,375 running shorter -- a factor of 199.5, reproduced independently in all three campaigns. Reach peaks at 10:00 in the lead's own local time at 4.014% and falls to 2.964% by 19:00. On the inbound side 90.1% of answered calls connect with no measurable hold and the unanswered are refused rather than queued: 38 callers in a quarter waited 30 seconds or more.",
  "corpora": [
    {
      "part": "A",
      "label": "inbound calls",
      "n": 89858,
      "window": "2026-05-03 to 2026-08-01",
      "direction": "inbound"
    },
    {
      "part": "B",
      "label": "fully transcribed outbound calls",
      "n": 10794,
      "window": "February-March 2026",
      "direction": "outbound"
    },
    {
      "part": "C",
      "label": "outbound dials on three roofing campaigns",
      "n": 7132360,
      "window": "2026-05-23 to 2026-08-15",
      "direction": "outbound"
    }
  ],
  "corporaRule": "Three populations, never pooled. Different directions, different windows, different denominators. No ratio may be formed across them and no total across them appears in this payload.",
  "denominatorRule": "Every Part C rate is computed against ENGAGED CONVERSATIONS (94,349), never against dials (7,132,360). 63.9% of the dials that put a live person on the line were an immediate hangup or a wrong number, so the two quantities differ by roughly a factor of 75. Restating a rate from this dataset per dial is a misquotation, not a rescaling.",
  "causationRule": "The two-minute finding and the first-minute finding are CORRELATIONS on outcome-labelled calls. A conversation runs long because it is going well. Neither may be published as a lever, an instruction, or a probability of booking given a call of a given length.",
  "measurement": {
    "reads": "read-only, SELECT-only, aggregate queries. No query in this study wrote to any production system.",
    "interval": "Every rate carries a 95% Wilson score interval. Wald would leave the [0,1] range on the small appointment cells.",
    "floor": "A ratio is published only if its denominator is at least 1,000 and its numerator at least 30. Rows that fail are carried in the extraction and dropped from publication rather than printed faintly."
  },
  "campaignSpread": {
    "minPct": 1.026,
    "maxPct": 2.636,
    "largestSharePct": 62.79
  },
  "partA": {
    "title": "Part A -- 89,858 inbound calls",
    "derivedFrom": "manuscript",
    "manuscriptSection": "STUDY.md section 3",
    "window": {
      "start": "2026-05-03",
      "endInclusive": "2026-08-01",
      "days": 90
    },
    "queues": 9,
    "funnel": [
      {
        "stage": "Arrived at a number we operate",
        "calls": 89858,
        "sharePct": 100
      },
      {
        "stage": "Routed toward an agent queue",
        "calls": 86082,
        "sharePct": 95.8
      },
      {
        "stage": "Reached an agent queue",
        "calls": 79553,
        "sharePct": 88.5
      },
      {
        "stage": "Handled by a live agent",
        "calls": 48761,
        "sharePct": 54.3
      }
    ],
    "queueRecordsMissing": 6529,
    "answerRate": {
      "perArrivalPct": 54.3,
      "perQueueRecordPct": 61.3,
      "answered": 48761,
      "arrivals": 89858,
      "queueRecords": 79553,
      "gap": 10305
    },
    "answeredComposition": [
      {
        "outcome": "Hang-up",
        "calls": 24700,
        "sharePct": 50.7
      },
      {
        "outcome": "Wrong number, dead air, answering machine or prank",
        "calls": 9397,
        "sharePct": 19.3
      },
      {
        "outcome": "All other outcomes",
        "calls": 14383,
        "sharePct": 29.5
      },
      {
        "outcome": "Booked an appointment",
        "calls": 281,
        "sharePct": 0.6
      }
    ],
    "meanAnsweredCallSeconds": 23.8,
    "wait": {
      "medianSeconds": 0,
      "noMeasurableHold": 43926,
      "noMeasurableHoldPct": 90.1,
      "p95Seconds": 1,
      "p99Seconds": 4,
      "longestSeconds": 53,
      "clockNote": "The clock starts when the call reaches our switch, not when the caller dials. Carrier ring time before that is invisible to every instrument we own."
    },
    "refusedNotQueued": {
      "unansweredWithRecordedWait": 23562,
      "endedWithinFiveSecondsPct": 50.1,
      "waited30sOrMore": 38,
      "dialerStatus": "Agent Not Available"
    },
    "queueSpread": {
      "rates": [
        {
          "queue": 1,
          "answerRatePct": 0,
          "staffed": false,
          "note": "after-hours drop target",
          "calls": 1112
        },
        {
          "queue": 2,
          "answerRatePct": 0,
          "staffed": false,
          "note": "our own sales line",
          "calls": 438
        },
        {
          "queue": 3,
          "answerRatePct": 0.6,
          "staffed": true
        },
        {
          "queue": 4,
          "answerRatePct": 11.5,
          "staffed": true
        },
        {
          "queue": 5,
          "answerRatePct": 49.2,
          "staffed": true
        },
        {
          "queue": 6,
          "answerRatePct": 66.2,
          "staffed": true
        },
        {
          "queue": 7,
          "answerRatePct": 71.6,
          "staffed": true
        }
      ],
      "pooledPct": 61.3,
      "pooledWithoutUnstaffedPct": 62.5,
      "medianStaffedPct": 49.2,
      "medianAllPct": 11.5,
      "topTwoQueuesShareOfVolumePct": 84.9,
      "unstaffedCalls": 1550,
      "unstaffedShareOfQueueRecordsPct": 1.9
    },
    "afterHours": {
      "sharePct": 39.7,
      "calls": 31134,
      "denominator": 78435,
      "boundLowPct": 39.1,
      "boundHighPct": 40.6,
      "windows": [
        {
          "window": "Weekday evening, after 17:00",
          "calls": 24989,
          "answeredPct": 59.8
        },
        {
          "window": "Weekend",
          "calls": 4661,
          "answeredPct": 10.1
        },
        {
          "window": "Weekday morning, before 08:00",
          "calls": 1484,
          "answeredPct": 0.3
        }
      ],
      "junkShareAfterHoursPct": 20.1,
      "junkShareBusinessHoursPct": 18.8
    },
    "notOrganicDemand": {
      "floorPct": 31.2,
      "measuredWeek": "2026-07-25",
      "matched": 2871,
      "ofInbound": 9210
    },
    "spanish": {
      "calls": 88,
      "denominator": 79591,
      "sharePct": 0.1,
      "queues": 3,
      "meanSeconds": 27.9,
      "longestSeconds": 131,
      "booked": 0,
      "meanSecondsOfABookingCall": 243
    },
    "denominatorReconciliation": "Two inbound denominators appear in the manuscript, 79,553 and 79,591, and the gap is unexplained rather than resolved. It does not move the language figure at the precision printed, and it is recorded here rather than smoothed over."
  },
  "partB": {
    "title": "Part B -- 10,794 transcribed cold calls",
    "derivedFrom": "manuscript",
    "manuscriptSection": "STUDY.md section 4",
    "window": {
      "label": "February-March 2026",
      "type": "fixed, does not refresh"
    },
    "calls": 10794,
    "transcribedTotal": 10848,
    "removedNonRoofing": 54,
    "booking": {
      "perDialPct": 2,
      "perDialBooked": 212,
      "perDialDenominator": 10794,
      "perContactPct": 3.6,
      "perContactBooked": 210,
      "perContactDenominator": 5772,
      "nestedNote": "These two are NOT nested. The per-contact figure sums the eleven published agent scorecards, which cover 10,703 of the 10,794 calls; the per-dial figure covers the whole corpus."
    },
    "endings": [
      {
        "ending": "Not enumerated in the source documents",
        "calls": 5736,
        "sharePct": 53.1,
        "enumerated": false
      },
      {
        "ending": "Hang-up",
        "calls": 2827,
        "sharePct": 26.2,
        "enumerated": true
      },
      {
        "ending": "Explicit \"not interested\"",
        "calls": 1173,
        "sharePct": 10.9,
        "enumerated": true
      },
      {
        "ending": "Do-not-call request",
        "calls": 439,
        "sharePct": 4.1,
        "enumerated": true
      },
      {
        "ending": "Did not qualify",
        "calls": 329,
        "sharePct": 3,
        "enumerated": true
      },
      {
        "ending": "Booked an inspection",
        "calls": 212,
        "sharePct": 2,
        "enumerated": true
      },
      {
        "ending": "Asked for a callback",
        "calls": 78,
        "sharePct": 0.7,
        "enumerated": true
      }
    ],
    "enumeratedCalls": 5058,
    "enumeratedSharePct": 46.9,
    "lengthByOutcome": [
      {
        "outcome": "Booked",
        "meanSeconds": 215,
        "medianSeconds": 192,
        "n": 212,
        "population": "full booked population"
      },
      {
        "outcome": "\"Not interested\"",
        "meanSeconds": 34,
        "medianSeconds": 30,
        "n": 60,
        "population": "random sample"
      },
      {
        "outcome": "Hang-up",
        "meanSeconds": 27,
        "medianSeconds": 20,
        "n": 40,
        "population": "random sample"
      }
    ],
    "firstMinute": {
      "bookedPastSixtySeconds": 209,
      "bookedN": 212,
      "bookedPct": 98.6,
      "notInterestedPastSixtySeconds": 5,
      "notInterestedN": 60,
      "notInterestedPct": 8.3,
      "correction": "An internal summary of this corpus stated 6.7%. That figure is the 60-120 second bucket alone and omits the 120-180 second bucket. The correct figure is 8.3%."
    },
    "objections": {
      "conversationSet": 635,
      "bookedInSet": 211,
      "lostInSet": 424,
      "bookedWithObjectionPct": 82,
      "lostWithObjectionPct": 78,
      "totalObjections": 950,
      "types": 20,
      "perConversation": 1.5,
      "top": [
        {
          "objection": "Cost or price",
          "count": 234
        },
        {
          "objection": "\"Not interested\"",
          "count": 200
        },
        {
          "objection": "\"No damage\"",
          "count": 110
        },
        {
          "objection": "\"My roof is fine\" / new roof",
          "count": 105
        },
        {
          "objection": "\"Not right now\"",
          "count": 98
        }
      ],
      "notInterestedThatBookedAnyway": 21,
      "enrichmentNote": "Booked calls are 33% of this set against 2.0% of the corpus, an enrichment of roughly 17x, and the losing side is only long \"not interested\" calls -- hang-ups are excluded entirely. Neither figure is a population rate."
    }
  },
  "partC": {
    "title": "Part C -- 7.13 million outbound dials",
    "derivedFrom": "tsv",
    "corpusDescription": "Three roofing outbound campaigns on one US contact-center floor, in aggregate only. Not the whole floor, and not a sample of any industry.",
    "window": {
      "start": "2026-05-23",
      "endInclusive": "2026-08-15",
      "endExclusive": "2026-08-16",
      "type": "fixed, stored in the dialling centre US Eastern clock",
      "calendarDays": 85,
      "daysWithAnyDial": 68,
      "daysWithAtLeast1000Dials": 66,
      "note": "The dialler is off on Sundays and light on Saturdays, which is why 85 calendar days hold 68 dialling days."
    },
    "ladder": [
      {
        "tier": "dials",
        "definition": "one outbound dial attempt",
        "n": 7132360
      },
      {
        "tier": "reached an agent",
        "definition": "the dial produced an agent leg with talk time above zero",
        "n": 419373,
        "pctOfDials": 5.88
      },
      {
        "tier": "a live person was on the line",
        "definition": "reached an agent, and the outcome was not an answering machine, a fax, dead air, a no-answer or a ringing line",
        "n": 261342,
        "pctOfDials": 3.664
      },
      {
        "tier": "engaged conversation",
        "definition": "a live person, excluding the immediate hangups and the wrong numbers -- the population a transcript corpus would actually contain",
        "n": 94349,
        "pctOfDials": 1.3228
      }
    ],
    "notEngagedShareOfLiveContactPct": 63.9,
    "notEngagedNote": "The gap between a live person and an engaged conversation is the immediate hangups and the wrong numbers. It is the single most important thing to know before reading any rate on this page: a dial from a predictive dialler and a conversation are not the same event.",
    "meanLiveContactTalkSeconds": 26,
    "bookings": {
      "inConversations": 1335,
      "perConversationPct": 1.415,
      "dispositionsOutsideAnyConversation": 38,
      "reconciliationNote": "Two appointment counts exist over this window and they are different quantities. The disposition count over the whole window is larger than the count that sits inside an engaged conversation with recorded agent talk; the difference is carried here rather than reconciled away, and every rate published on this page uses the conversation-level numerator against the conversation-level denominator."
    },
    "headline": {
      "thresholdSeconds": 120,
      "above": {
        "conversations": 2974,
        "booked": 1157,
        "bookedPct": 38.9
      },
      "below": {
        "conversations": 91375,
        "booked": 178,
        "bookedPct": 0.195
      },
      "overallBookedPct": 1.415,
      "ratio": 199.5
    },
    "headlineByCampaign": [
      {
        "campaign": "campaign-A",
        "above": {
          "conversations": 1968,
          "booked": 657,
          "bookedPct": 33.384
        },
        "below": {
          "conversations": 67971,
          "booked": 73,
          "bookedPct": 0.107
        }
      },
      {
        "campaign": "campaign-B",
        "above": {
          "conversations": 888,
          "booked": 478,
          "bookedPct": 53.829
        },
        "below": {
          "conversations": 21377,
          "booked": 105,
          "bookedPct": 0.491
        }
      },
      {
        "campaign": "campaign-C",
        "above": {
          "conversations": 118,
          "booked": 22,
          "bookedPct": 18.644
        },
        "below": {
          "conversations": 2027,
          "booked": 0,
          "bookedPct": 0
        }
      },
      {
        "campaign": "POOLED",
        "above": {
          "conversations": 2974,
          "booked": 1157,
          "bookedPct": 38.904
        },
        "below": {
          "conversations": 91375,
          "booked": 178,
          "bookedPct": 0.195
        }
      }
    ],
    "campaignMix": [
      {
        "campaign": "campaign-A",
        "shareOfDialsPct": 62.79,
        "conversations": 69939,
        "bookedPerConversationPct": 1.092
      },
      {
        "campaign": "campaign-B",
        "shareOfDialsPct": 34.36,
        "conversations": 22265,
        "bookedPerConversationPct": 2.636
      },
      {
        "campaign": "campaign-C",
        "shareOfDialsPct": 2.84,
        "conversations": 2145,
        "bookedPerConversationPct": 1.026
      },
      {
        "campaign": "POOLED",
        "shareOfDialsPct": 100,
        "conversations": 94349,
        "bookedPerConversationPct": 1.455
      }
    ],
    "campaignMixNote": "The appointment counts in this table are every appointment disposition in the campaign, including the ones that carry no engaged-conversation row, so the pooled rate here runs marginally above the 1.415% published against the talk-time table. Both numerators are stated rather than one being quietly restated as the other. What the table is for is the spread, not the pooled figure: a pooled rate over campaigns that run from 1.026% to 2.636%, with the largest campaign supplying 62.79% of the volume, must ship with its dispersion or not at all.",
    "byLeadLocalHour": [
      {
        "hour": 9,
        "dials": 16067,
        "liveContactPct": 2.832,
        "ci95": [
          2.586,
          3.1
        ],
        "coreBand": false
      },
      {
        "hour": 10,
        "dials": 122969,
        "liveContactPct": 4.014,
        "ci95": [
          3.906,
          4.125
        ],
        "coreBand": true
      },
      {
        "hour": 11,
        "dials": 321486,
        "liveContactPct": 3.933,
        "ci95": [
          3.867,
          4.001
        ],
        "coreBand": true
      },
      {
        "hour": 12,
        "dials": 507607,
        "liveContactPct": 3.881,
        "ci95": [
          3.828,
          3.935
        ],
        "coreBand": true
      },
      {
        "hour": 13,
        "dials": 484343,
        "liveContactPct": 3.605,
        "ci95": [
          3.553,
          3.658
        ],
        "coreBand": true
      },
      {
        "hour": 14,
        "dials": 429489,
        "liveContactPct": 3.53,
        "ci95": [
          3.475,
          3.585
        ],
        "coreBand": true
      },
      {
        "hour": 15,
        "dials": 405602,
        "liveContactPct": 3.76,
        "ci95": [
          3.702,
          3.819
        ],
        "coreBand": true
      },
      {
        "hour": 16,
        "dials": 449756,
        "liveContactPct": 3.688,
        "ci95": [
          3.634,
          3.744
        ],
        "coreBand": true
      },
      {
        "hour": 17,
        "dials": 426302,
        "liveContactPct": 3.552,
        "ci95": [
          3.497,
          3.608
        ],
        "coreBand": true
      },
      {
        "hour": 18,
        "dials": 443413,
        "liveContactPct": 3.243,
        "ci95": [
          3.191,
          3.295
        ],
        "coreBand": true
      },
      {
        "hour": 19,
        "dials": 302475,
        "liveContactPct": 2.964,
        "ci95": [
          2.904,
          3.025
        ],
        "coreBand": true
      },
      {
        "hour": 20,
        "dials": 54632,
        "liveContactPct": 2.929,
        "ci95": [
          2.791,
          3.073
        ],
        "coreBand": false
      },
      {
        "hour": 21,
        "dials": 1626,
        "liveContactPct": 2.583,
        "ci95": [
          1.917,
          3.473
        ],
        "coreBand": false
      }
    ],
    "hourCoreBand": {
      "from": 10,
      "to": 19
    },
    "hourPeak": {
      "hour": 10,
      "pct": 4.014,
      "ci95": [
        3.906,
        4.125
      ]
    },
    "hourTrough": {
      "hour": 19,
      "pct": 2.964,
      "ci95": [
        2.904,
        3.025
      ]
    },
    "hourSpanPp": 1.05,
    "hourShape": "A morning and midday plateau, a mid-afternoon dip, a partial recovery, then a real evening decline. It is NOT monotonic -- 15:00 and 16:00 both sit above 13:00 and 14:00 -- and describing it as a steady fall through the day would be wrong.",
    "byWeekday": [
      {
        "weekday": "Monday",
        "dayNumber": 2,
        "dials": 1306395,
        "liveContactPct": 3.763,
        "ci95": [
          3.73,
          3.796
        ]
      },
      {
        "weekday": "Tuesday",
        "dayNumber": 3,
        "dials": 1342741,
        "liveContactPct": 3.923,
        "ci95": [
          3.89,
          3.956
        ]
      },
      {
        "weekday": "Wednesday",
        "dayNumber": 4,
        "dials": 1501685,
        "liveContactPct": 3.677,
        "ci95": [
          3.647,
          3.707
        ]
      },
      {
        "weekday": "Thursday",
        "dayNumber": 5,
        "dials": 1556372,
        "liveContactPct": 3.591,
        "ci95": [
          3.562,
          3.621
        ]
      },
      {
        "weekday": "Friday",
        "dayNumber": 6,
        "dials": 1342238,
        "liveContactPct": 3.424,
        "ci95": [
          3.394,
          3.455
        ]
      }
    ],
    "weekdaySpanPp": 0.499,
    "byAttempt": [
      {
        "attempt": 1,
        "dials": 1848220,
        "liveContactPct": 4.371,
        "bookedPerConversationPct": 1.41,
        "bookedPerConversationCi95": [
          1.287,
          1.544
        ]
      },
      {
        "attempt": 2,
        "dials": 1150490,
        "liveContactPct": 4.767,
        "bookedPerConversationPct": 1.304,
        "bookedPerConversationCi95": [
          1.158,
          1.468
        ]
      },
      {
        "attempt": 3,
        "dials": 832436,
        "liveContactPct": 4.171,
        "bookedPerConversationPct": 1.218,
        "bookedPerConversationCi95": [
          1.042,
          1.424
        ]
      },
      {
        "attempt": 4,
        "dials": 545754,
        "liveContactPct": 3.625,
        "bookedPerConversationPct": 1.433,
        "bookedPerConversationCi95": [
          1.181,
          1.738
        ]
      },
      {
        "attempt": 5,
        "dials": 410564,
        "liveContactPct": 3.338,
        "bookedPerConversationPct": 1.648,
        "bookedPerConversationCi95": [
          1.313,
          2.067
        ]
      },
      {
        "attempt": 6,
        "dials": 333321,
        "liveContactPct": 3.254,
        "bookedPerConversationPct": 1.543,
        "bookedPerConversationCi95": [
          1.185,
          2.008
        ]
      },
      {
        "attempt": 7,
        "dials": 273170,
        "liveContactPct": 2.993,
        "bookedPerConversationPct": 1.666,
        "bookedPerConversationCi95": [
          1.243,
          2.229
        ]
      },
      {
        "attempt": 8,
        "dials": 240680,
        "liveContactPct": 2.709,
        "bookedPerConversationPct": 1.78,
        "bookedPerConversationCi95": [
          1.288,
          2.454
        ]
      },
      {
        "attempt": 9,
        "dials": 202073,
        "liveContactPct": 2.567,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 10,
        "dials": 179618,
        "liveContactPct": 2.336,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 11,
        "dials": 85044,
        "liveContactPct": 2.559,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 12,
        "dials": 89111,
        "liveContactPct": 2.298,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 13,
        "dials": 96923,
        "liveContactPct": 2.292,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 14,
        "dials": 93744,
        "liveContactPct": 2.238,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 15,
        "dials": 90651,
        "liveContactPct": 1.945,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 16,
        "dials": 97925,
        "liveContactPct": 1.973,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 17,
        "dials": 107475,
        "liveContactPct": 1.961,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 18,
        "dials": 103315,
        "liveContactPct": 1.805,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 19,
        "dials": 99933,
        "liveContactPct": 1.719,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 20,
        "dials": 96468,
        "liveContactPct": 1.781,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 21,
        "dials": 80579,
        "liveContactPct": 1.824,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      },
      {
        "attempt": 22,
        "dials": 74789,
        "liveContactPct": 1.932,
        "bookedPerConversationPct": null,
        "bookedPerConversationCi95": null
      }
    ],
    "placeboControl": {
      "variable": "the last digit of the internal lead id",
      "groups": 10,
      "minPct": 3.613,
      "maxPct": 3.694,
      "spanPp": 0.081
    },
    "cleanTimezoneSubsample": {
      "dials": 3965858,
      "ofDialsCarryingAnOffset": 7007471,
      "agreePct": 56.59,
      "disagreePct": 8.49,
      "undecidablePct": 34.34,
      "unmappedPct": 0.58,
      "why": "The lead record stores its own UTC offset, and on 8.49% of dials that offset disagrees with the timezone the lead's own state implies. Every hour figure on this page is computed on the subsample where a single-zone state and the stored offset agree, because the full set is contaminated by a field that is wrong at scale. The effect is larger on the clean subsample than on the contaminated one, which is what a mislabelling that blurs hours into each other predicts."
    },
    "joinFanoutRows": 1,
    "talkBuckets": [
      {
        "bucket": "00-29s",
        "conversations": 42018,
        "booked": 13,
        "bookedPct": 0.03
      },
      {
        "bucket": "30-59s",
        "conversations": 40067,
        "booked": 15,
        "bookedPct": 0.04
      },
      {
        "bucket": "60-119s",
        "conversations": 9290,
        "booked": 150,
        "bookedPct": 1.61
      },
      {
        "bucket": "120-179s",
        "conversations": 1471,
        "booked": 314,
        "bookedPct": 21.35
      },
      {
        "bucket": "180-299s",
        "conversations": 1028,
        "booked": 507,
        "bookedPct": 49.32
      },
      {
        "bucket": "300-599s",
        "conversations": 423,
        "booked": 298,
        "bookedPct": 70.45
      },
      {
        "bucket": "600s+",
        "conversations": 52,
        "booked": 38,
        "bookedPct": 73.08
      }
    ]
  },
  "limits": [
    "This is one floor and one operator. It is not an industry benchmark, a market study, or a sample of anything.",
    "The three parts are three populations and they must never be pooled. Different directions, different windows, different denominators. No ratio may be formed across them.",
    "Carrier ring time is invisible. Every inbound wait figure starts when the call reaches our switch.",
    "The inbound queue log is a subset of arrivals, which is why every inbound rate carries two denominators.",
    "\"Answered\" means a named agent leg on the call record. It does not mean the agent spoke, and it does not mean the caller got what they wanted.",
    "No causal claim anywhere. The talk-time finding and the first-minute finding are correlations on outcome-labelled calls; a conversation runs long because it is going well.",
    "No trend claim. The monthly inbound answer-rate series is confounded with account mix at a magnitude that swamps it.",
    "No abandonment claim in the usual sense. Callers on this floor are refused rather than held, so an abandonment rate computed the usual way would describe a mechanism that does not operate here.",
    "No industry comparison. We could not verify the denominators behind the published vendor numbers, so we do not benchmark against them.",
    "Appointment show rate is excluded entirely. A booked disposition means a setter clicked a button and carries no evidence anyone was home; confirming it needs contractor-side data we do not hold.",
    "Share of calls handled in Spanish is unmeasured. What exists is a disposition an agent selected, which is a different quantity.",
    "Speed to lead is not in this study. We hold no measurement of it that survives the standards used here.",
    "Cost per booked appointment is not in scope. It would need billing data joined per account and would only be publishable as a range."
  ],
  "notReported": [
    {
      "figure": "Appointments per dial, and its reciprocal",
      "reason": "True, reproducible and unfavourable, and it is the arithmetic consequence of a predictive dialler working normally rather than a fact about roofing. Every rate on this page is computed per conversation instead, so nothing here is rescaled to look better -- the figure is simply not published."
    },
    {
      "figure": "The share of dials our dialler classified as reaching a machine",
      "reason": "It rests on an automated call-progress verdict that is not validated here against recordings, so it supports no claim about the world."
    },
    {
      "figure": "Any breakdown by state",
      "reason": "It discloses the operating footprint. Held internal."
    },
    {
      "figure": "Any per-client, per-queue-identity or per-agent table",
      "reason": "Dispersion is published as a range and a median across queues and campaigns. The mapping from a rank or a label to an account is not published and is not derivable from anything here."
    },
    {
      "figure": "A vertical cut of the inbound corpus",
      "reason": "The largest queue is a shared multi-tenant group spanning 184 lists, and the queues that are single-contractor are 75.8% one contractor. A \"roofing answer rate\" from that corpus would be one client's operational figure wearing a pooled costume."
    },
    {
      "figure": "A monthly inbound answer-rate trend",
      "reason": "Monthly volume swings by a factor of 3.5 and two queues are 84.9% of volume, so the series substantially tracks which large account was busiest that month."
    }
  ],
  "privacyRules": [
    "No client is named, anywhere. Queues are referred to by rank and campaigns by an anonymised label, never by identity.",
    "No per-client table is published.",
    "No agent is named and no per-agent figure is published.",
    "No homeowner, phone number, address or lead identifier appears in any form. No transcript text is quoted verbatim.",
    "Small-cell suppression: any breakdown whose smallest cell is small enough to identify an account is suppressed rather than rounded.",
    "A rate whose own extraction marked it below the reporting floor -- fewer than 1,000 in the denominator or fewer than 30 in the numerator -- is not published as a rate.",
    "Aggregates only. Nothing published here is row-level."
  ]
}
