{
  "name": "CCDocs outbound dial cadence benchmark",
  "url": "https://ccdocs.com/outbound-dial-cadence-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.",
  "labelCaveat": "The non-answered classes are set by an automated call-progress classifier whose HUMAN class was independently measured wrong on 28 of 92 bridged calls on this estate. The LEVEL is a property of that configuration and is not an industry answer rate; only the ratio between buckets computed the same way is carried.",
  "source": {
    "table": "vicidial_log joined to vicidial_statuses and vicidial_campaign_statuses",
    "grain": "one row per outbound dial attempt",
    "numeratorLabel": "human_answered='Y', campaign dictionary first, then system dictionary",
    "labelCaveat": "The non-answered classes are set by an automated call-progress classifier whose HUMAN class was independently measured wrong on 28 of 92 bridged calls on this estate. The LEVEL is a property of that configuration and is not an industry answer rate; only the ratio between buckets computed the same way is carried."
  },
  "window": {
    "start": "2026-05-25",
    "endExclusive": "2026-07-27",
    "completeWeeks": 9,
    "weekBoundary": "Monday to Sunday, whole weeks only, so no weekday is over-represented",
    "timezone": "America/New_York (the dialler's own clock; call_date is stored in it)",
    "observedMinDate": "2026-05-25",
    "observedMaxDate": "2026-07-26"
  },
  "universe": {
    "dials": 6288938,
    "humanAnswered": 278651,
    "humanAnsweredPct": 4.431,
    "unmappedStatusRows": 535,
    "unmappedStatusPct": 0.0085,
    "campaigns": 17
  },
  "gate": {
    "maxTopContributorSharePct": 75,
    "minCampaignsAtLeast1kDials": 5,
    "minBucketDials": 100000,
    "rationale": "Every dial was placed for a client. A bucket one campaign dominates is that client's operating number, not a pooled statistic. Withheld buckets are listed rather than deleted so the published curve is not mistaken for the whole curve."
  },
  "coverage": {
    "attempt": {
      "emittedDials": 5272041,
      "withheldDials": 1016755,
      "bucketedDials": 6288796,
      "unbucketedDials": 142,
      "emittedSharePct": 83.83,
      "withheldSharePct": 16.167,
      "unbucketedPct": 0.002
    },
    "hour": {
      "emittedDials": 5880382,
      "withheldDials": 408556,
      "bucketedDials": 6288938,
      "unbucketedDials": 0,
      "emittedSharePct": 93.504,
      "withheldSharePct": 6.496,
      "unbucketedPct": 0
    }
  },
  "byAttempt": {
    "emitted": [
      {
        "bucket": 1,
        "dials": 1458092,
        "humanAnswered": 79362,
        "humanAnsweredPct": 5.443,
        "medianCampaignPct": 6.546,
        "campaignsAtLeast1kDials": 11,
        "topContributorSharePct": 70.15,
        "unmappedStatusRows": 206
      },
      {
        "bucket": 2,
        "dials": 947653,
        "humanAnswered": 53670,
        "humanAnsweredPct": 5.663,
        "medianCampaignPct": 6.97,
        "campaignsAtLeast1kDials": 10,
        "topContributorSharePct": 69.58,
        "unmappedStatusRows": 115
      },
      {
        "bucket": 3,
        "dials": 734307,
        "humanAnswered": 37229,
        "humanAnsweredPct": 5.07,
        "medianCampaignPct": 6.084,
        "campaignsAtLeast1kDials": 9,
        "topContributorSharePct": 69.07,
        "unmappedStatusRows": 85
      },
      {
        "bucket": 4,
        "dials": 495801,
        "humanAnswered": 23007,
        "humanAnsweredPct": 4.64,
        "medianCampaignPct": 5.754,
        "campaignsAtLeast1kDials": 8,
        "topContributorSharePct": 62.2,
        "unmappedStatusRows": 44
      },
      {
        "bucket": 5,
        "dials": 397812,
        "humanAnswered": 16586,
        "humanAnsweredPct": 4.169,
        "medianCampaignPct": 4.418,
        "campaignsAtLeast1kDials": 7,
        "topContributorSharePct": 50.55,
        "unmappedStatusRows": 31
      },
      {
        "bucket": 6,
        "dials": 325726,
        "humanAnswered": 13166,
        "humanAnsweredPct": 4.042,
        "medianCampaignPct": 4.942,
        "campaignsAtLeast1kDials": 7,
        "topContributorSharePct": 50.56,
        "unmappedStatusRows": 13
      },
      {
        "bucket": 7,
        "dials": 274891,
        "humanAnswered": 9991,
        "humanAnsweredPct": 3.635,
        "medianCampaignPct": 4.004,
        "campaignsAtLeast1kDials": 7,
        "topContributorSharePct": 48.19,
        "unmappedStatusRows": 15
      },
      {
        "bucket": 8,
        "dials": 241210,
        "humanAnswered": 8243,
        "humanAnsweredPct": 3.417,
        "medianCampaignPct": 3.82,
        "campaignsAtLeast1kDials": 6,
        "topContributorSharePct": 48.53,
        "unmappedStatusRows": 8
      },
      {
        "bucket": 9,
        "dials": 214257,
        "humanAnswered": 6663,
        "humanAnsweredPct": 3.11,
        "medianCampaignPct": 3.434,
        "campaignsAtLeast1kDials": 5,
        "topContributorSharePct": 44.79,
        "unmappedStatusRows": 5
      },
      {
        "bucket": 10,
        "dials": 182292,
        "humanAnswered": 5177,
        "humanAnsweredPct": 2.84,
        "medianCampaignPct": 3.207,
        "campaignsAtLeast1kDials": 5,
        "topContributorSharePct": 45.79,
        "unmappedStatusRows": 0
      }
    ],
    "withheld": [
      {
        "bucket": 11,
        "dials": 87173,
        "reasons": [
          "RULE A: one campaign is 84.7% of the bucket (max 75.0%)",
          "RULE B: only 4 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 87173 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 12,
        "dials": 91583,
        "reasons": [
          "RULE A: one campaign is 82.5% of the bucket (max 75.0%)",
          "RULE B: only 4 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 91583 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 13,
        "dials": 97730,
        "reasons": [
          "RULE A: one campaign is 83.6% of the bucket (max 75.0%)",
          "RULE B: only 4 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 97730 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 14,
        "dials": 97457,
        "reasons": [
          "RULE A: one campaign is 81.0% of the bucket (max 75.0%)",
          "RULE B: only 4 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 97457 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 15,
        "dials": 90989,
        "reasons": [
          "RULE A: one campaign is 83.8% of the bucket (max 75.0%)",
          "RULE B: only 4 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 90989 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 16,
        "dials": 89107,
        "reasons": [
          "RULE A: one campaign is 94.1% of the bucket (max 75.0%)",
          "RULE B: only 3 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 89107 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 17,
        "dials": 95941,
        "reasons": [
          "RULE A: one campaign is 96.4% of the bucket (max 75.0%)",
          "RULE B: only 3 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 95941 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 18,
        "dials": 85924,
        "reasons": [
          "RULE A: one campaign is 99.0% of the bucket (max 75.0%)",
          "RULE B: only 1 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 85924 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 19,
        "dials": 82489,
        "reasons": [
          "RULE A: one campaign is 99.6% of the bucket (max 75.0%)",
          "RULE B: only 1 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 82489 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 20,
        "dials": 68571,
        "reasons": [
          "RULE A: one campaign is 99.6% of the bucket (max 75.0%)",
          "RULE B: only 1 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 68571 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 21,
        "dials": 66481,
        "reasons": [
          "RULE A: one campaign is 99.8% of the bucket (max 75.0%)",
          "RULE B: only 1 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 66481 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 22,
        "dials": 63253,
        "reasons": [
          "RULE A: one campaign is 99.8% of the bucket (max 75.0%)",
          "RULE B: only 1 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 63253 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 23,
        "dials": 16,
        "reasons": [
          "RULE A: one campaign is 87.5% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 16 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 24,
        "dials": 11,
        "reasons": [
          "RULE A: one campaign is 90.9% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 11 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 25,
        "dials": 7,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 7 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 26,
        "dials": 5,
        "reasons": [
          "RULE A: one campaign is 80.0% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 5 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 27,
        "dials": 6,
        "reasons": [
          "RULE A: one campaign is 83.3% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 6 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 28,
        "dials": 5,
        "reasons": [
          "RULE A: one campaign is 80.0% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 5 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 29,
        "dials": 3,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 3 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 30,
        "dials": 1,
        "reasons": [
          "RULE A: one campaign is 100.0% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 1 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 31,
        "dials": 1,
        "reasons": [
          "RULE A: one campaign is 100.0% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 1 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 32,
        "dials": 2,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 2 dials is below the 100000 reporting floor"
        ]
      }
    ]
  },
  "byHourOfDay": {
    "emitted": [
      {
        "bucket": 11,
        "dials": 120684,
        "humanAnswered": 5935,
        "humanAnsweredPct": 4.918,
        "medianCampaignPct": 4.63,
        "campaignsAtLeast1kDials": 5,
        "topContributorSharePct": 54.96,
        "unmappedStatusRows": 51
      },
      {
        "bucket": 12,
        "dials": 685930,
        "humanAnswered": 29313,
        "humanAnsweredPct": 4.273,
        "medianCampaignPct": 5.108,
        "campaignsAtLeast1kDials": 11,
        "topContributorSharePct": 49.01,
        "unmappedStatusRows": 68
      },
      {
        "bucket": 13,
        "dials": 760430,
        "humanAnswered": 33939,
        "humanAnsweredPct": 4.463,
        "medianCampaignPct": 5.307,
        "campaignsAtLeast1kDials": 10,
        "topContributorSharePct": 51.29,
        "unmappedStatusRows": 63
      },
      {
        "bucket": 14,
        "dials": 662073,
        "humanAnswered": 30582,
        "humanAnsweredPct": 4.619,
        "medianCampaignPct": 4.615,
        "campaignsAtLeast1kDials": 10,
        "topContributorSharePct": 52.44,
        "unmappedStatusRows": 72
      },
      {
        "bucket": 15,
        "dials": 788696,
        "humanAnswered": 34931,
        "humanAnsweredPct": 4.429,
        "medianCampaignPct": 4.745,
        "campaignsAtLeast1kDials": 11,
        "topContributorSharePct": 49.42,
        "unmappedStatusRows": 62
      },
      {
        "bucket": 16,
        "dials": 588778,
        "humanAnswered": 26888,
        "humanAnsweredPct": 4.567,
        "medianCampaignPct": 4.561,
        "campaignsAtLeast1kDials": 11,
        "topContributorSharePct": 54.22,
        "unmappedStatusRows": 44
      },
      {
        "bucket": 17,
        "dials": 790422,
        "humanAnswered": 33473,
        "humanAnsweredPct": 4.235,
        "medianCampaignPct": 4.666,
        "campaignsAtLeast1kDials": 11,
        "topContributorSharePct": 48.93,
        "unmappedStatusRows": 60
      },
      {
        "bucket": 18,
        "dials": 691686,
        "humanAnswered": 30345,
        "humanAnsweredPct": 4.387,
        "medianCampaignPct": 4.645,
        "campaignsAtLeast1kDials": 9,
        "topContributorSharePct": 49.82,
        "unmappedStatusRows": 49
      },
      {
        "bucket": 19,
        "dials": 791683,
        "humanAnswered": 32865,
        "humanAnsweredPct": 4.151,
        "medianCampaignPct": 5.225,
        "campaignsAtLeast1kDials": 10,
        "topContributorSharePct": 51.03,
        "unmappedStatusRows": 27
      }
    ],
    "withheld": [
      {
        "bucket": 0,
        "dials": 71,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 71 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 1,
        "dials": 48,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 48 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 2,
        "dials": 25,
        "reasons": [
          "RULE A: one campaign is 80.0% of the bucket (max 75.0%)",
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 25 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 3,
        "dials": 26,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 26 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 4,
        "dials": 16,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 16 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 5,
        "dials": 15,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 15 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 6,
        "dials": 26,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 26 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 7,
        "dials": 67,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 67 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 8,
        "dials": 194,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 194 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 9,
        "dials": 471,
        "reasons": [
          "RULE B: only 0 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 471 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 10,
        "dials": 6073,
        "reasons": [
          "RULE B: only 2 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 6073 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 20,
        "dials": 271674,
        "reasons": [
          "RULE A: one campaign is 76.6% of the bucket (max 75.0%)"
        ]
      },
      {
        "bucket": 21,
        "dials": 120936,
        "reasons": [
          "RULE A: one campaign is 77.8% of the bucket (max 75.0%)",
          "RULE B: only 3 campaigns contribute >= 1000 dials (min 5)"
        ]
      },
      {
        "bucket": 22,
        "dials": 6619,
        "reasons": [
          "RULE B: only 2 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 6619 dials is below the 100000 reporting floor"
        ]
      },
      {
        "bucket": 23,
        "dials": 2295,
        "reasons": [
          "RULE A: one campaign is 86.4% of the bucket (max 75.0%)",
          "RULE B: only 1 campaigns contribute >= 1000 dials (min 5)",
          "RULE C: 2295 dials is below the 100000 reporting floor"
        ]
      }
    ]
  },
  "spread": {
    "attempt": {
      "minPct": 2.84,
      "maxPct": 5.663,
      "ratio": 1.994,
      "minBucket": 10,
      "maxBucket": 2
    },
    "hourOfDay": {
      "minPct": 4.151,
      "maxPct": 4.918,
      "ratio": 1.185,
      "minBucket": 19,
      "maxBucket": 11
    }
  },
  "robustness": {
    "question": "Does attempt 2 out-answer attempt 1 INSIDE campaigns, or only in the pool?",
    "minDialsPerCampaignPerAttempt": 5000,
    "campaignsTested": 8,
    "campaignsComparable": 7,
    "campaignsUndefined": 1,
    "campaignsWhereAttempt2Higher": 5,
    "byCampaign": [
      {
        "campaign": "campaign-A",
        "attempt1Dials": 1022843,
        "attempt1Pct": 4.636,
        "attempt2Dials": 659330,
        "attempt2Pct": 5.219,
        "attempt2Higher": true
      },
      {
        "campaign": "campaign-B",
        "attempt1Dials": 182870,
        "attempt1Pct": 6.513,
        "attempt2Dials": 112818,
        "attempt2Pct": 7.072,
        "attempt2Higher": true
      },
      {
        "campaign": "campaign-C",
        "attempt1Dials": 81309,
        "attempt1Pct": 5.073,
        "attempt2Dials": 68017,
        "attempt2Pct": 5.013,
        "attempt2Higher": false
      },
      {
        "campaign": "campaign-D",
        "attempt1Dials": 81270,
        "attempt1Pct": 6.546,
        "attempt2Dials": 60451,
        "attempt2Pct": 6.867,
        "attempt2Higher": true
      },
      {
        "campaign": "campaign-E",
        "attempt1Dials": 31471,
        "attempt1Pct": 3.193,
        "attempt2Dials": 19526,
        "attempt2Pct": 3.216,
        "attempt2Higher": true
      },
      {
        "campaign": "campaign-F",
        "attempt1Dials": 14765,
        "attempt1Pct": 7.443,
        "attempt2Dials": 8656,
        "attempt2Pct": 8.63,
        "attempt2Higher": true
      },
      {
        "campaign": "campaign-G",
        "attempt1Dials": 6136,
        "attempt1Pct": 0,
        "attempt2Dials": 5433,
        "attempt2Pct": 0,
        "attempt2Higher": null
      },
      {
        "campaign": "campaign-H",
        "attempt1Dials": 5381,
        "attempt1Pct": 18.231,
        "attempt2Dials": 5047,
        "attempt2Pct": 15.792,
        "attempt2Higher": false
      }
    ]
  },
  "blindSpots": [
    "This is one dial estate. There is no second estate in this dataset, so nothing here establishes what is normal, average or good for anybody else. It is a shape, measured once, on stated data.",
    "The height of the curve is not an industry answer rate. The classes the numerator is measured against are set by an automated call-progress classifier that was independently audited on this same estate against audio it did not write, and its HUMAN class was wrong on 28 of 92 bridged calls. Only the ratio between buckets measured the same way survives that bias.",
    "The hour cut is the dialler's own clock, America/New_York. It is NOT the called party's local hour. A national list spans four US timezones and the two questions have different answers; the replica does not carry the lead's offset, so the local-hour version is unanswered here rather than estimated.",
    "The hour cut is bounded by the hours this operation actually dials. It says nothing about hours nobody dials -- an unmeasured hour is unknown, not flat.",
    "The attempt curve stops at the tenth dial because of a client-disclosure rule, not because the data stops. Every withheld bucket is listed below with the clause it failed, and together they are a sixth of the corpus.",
    "Reaching a person is not booking one. This study counts whether a dial reached a human at all. What happened next -- whether the call qualified, booked or sold -- is a different measurement on a different corpus, and none of it is on this page.",
    "It is a fixed window, not a live feed. Nothing refreshes it, deliberately: a dataset that silently re-derives itself lets a published figure change underneath a citation."
  ]
}
