You launch a campaign with a thousand contacts. The system says "started". An hour later you check the report: 640 calls placed. Nobody tells you what happened to the other 360.
The most common cause of this picture is not a fault. It is a quota.
What the operator limits
Telephony providers cap how many calls an account can start per unit of time. The limit can be a few calls per second. The purpose is protecting the network, and every provider has one.
A call that hits the cap is never started. The provider returns an error code — and here is the critical part: because the error comes back before a call record exists, most systems write it nowhere. The campaign looks "finished" while the list was only partly called.
Symptoms
- The campaign finishes much faster than expected.
- The number of calls placed is visibly lower than the number of contacts.
- Contacts at the end of the list were systematically never called.
- Running the same list a second time calls a different subset.
The last point is the best signal separating a quota from other causes. A bad number would skip the same people again; a rate cap drops a different slice each run.
Provider records are not proof
Checking the provider's call detail records after a campaign seems reasonable but misleads: a call that was never started because of a quota produces no record either. So "not in the CDR, therefore not called" is true; "not in the CDR, therefore the system never tried" is false.
The right evidence is the campaign queue's own status field: how many entries stayed "pending", how many took an error, how many were actually called.
What to do in campaign design
- Stagger call starts. Instead of pushing the whole list into the queue at once, starting calls at fixed intervals largely avoids hitting the cap.
- Catch the error code and retry. A rate error is not permanent; the same call succeeds seconds later. Counting it as "unreachable" unfairly eliminates that contact.
- Know your concurrent line count. How many simultaneous conversations you can run is a separate limit. Campaign pace has to respect it.
- Split large lists. Calling a thousand contacts in slices spread across the day protects both the quota and your team's capacity to take handovers.
The busy-hour effect
A quota does not feel the same at every hour. During the hours when everyone is calling, pressure on the network side rises and the rejection rate climbs. Shifting a campaign slightly outside peak hours often increases the number of people reached on its own.
The one number to measure
At the end of a campaign the number to look at is not "how many calls were placed" but "how many people on the list were reached". The gap between them spreads across quotas, voicemail, busy signals and line errors. Talking about campaign performance without seeing that distribution means mistaking a partial list for a complete one.
Tomorrow we look at where campaigns connect to each other: chained campaigns and the risk of stale records.
