LinkedIn requests fell to 59 against a ceiling of 110. HeyReach's own numbers showed why.
Who this was forA B2B services company running LinkedIn outreach in HeyReach from four of its own team's profiles, next to a cold email program we also run.
The four senders had connection request limits of 30, 30, 30, and 20 a day. That's a ceiling of 110. The week before, HeyReach sent 104 to 118 requests a day across them.
Then one Monday it sent 59. We had shipped a change to the client's systems that morning, so the obvious suspect was us. The second suspect was a LinkedIn restriction on one of the profiles.
Neither was the cause. We only knew that because we read HeyReach in a fixed order before touching anything.
What we built
A read only diagnosis, in five steps.
Is the number real? We compared HeyReach's own daily stats with the copy our nightly sync keeps and with the request events HeyReach's webhook sends us. All three read 59, and they matched per campaign too. HeyReach is the authority, because it's the sender's own count.
Which sender dropped? HeyReach's overall stats accept one account at a time. Read that way, one sender sent 35 against a limit of 30, one sent 19, one sent 5, and one sent 0.
Was an account restricted? Every account read active and authenticated, and every cooldown flag read false.
Did the campaigns have anyone left to send to? For each live campaign we read the list members HeyReach had not yet assigned, and the assigned leads still waiting for a first request.
When did HeyReach hand each campaign its leads? We joined every request to the time its lead was assigned.
What it produced
Three causes, and none of them was the morning's change. That change could have held back 2 requests at most.
The sender who sent 0 had run out of leads. Both of that sender's live campaigns had 0 unassigned members left. In one of them, 102 of 249 leads were excluded, 33 of those in the previous week because the same sender had already contacted them from another campaign. That's 20 requests a day gone until the list is refilled.
HeyReach sends almost entirely from a batch of about 26 leads it assigns to a campaign that day or the day before. On that Monday, two senders' batches landed at 21:32 and 21:54 UTC, after their last requests of the day. That cost 36 requests, for one day only.
The sender at 35 ran 5 over their limit, which hid part of the drop in the total.
Here's the part that changed how we run HeyReach. The configured limits only add up to real capacity while every campaign still has leads to assign. A campaign with a full looking list can still send nothing.
What we check in HeyReach now
Unassigned members per campaign, not list size. When it reaches 0, that sender's limit stops counting toward capacity.
One sender per campaign and one list per campaign. When three campaigns shared one list earlier in the program, 2 people sat in sequence with two senders at once. Splitting the list took that to 0.
Leads an older campaign already invited. Two campaigns sent 0 for two weeks because every lead queued in them already showed a request sent or accepted.
Exclusion settings read back from the campaign after it's created, not trusted from what we sent.
What runs now
HeyReach's daily stats sync into the client's database every night, per campaign. A capacity view shows each sender's requests against their limit.
The alert we wrote for this fires when any sender sends under 60 percent of their limit, or when every live campaign for a sender has 0 unassigned members. It would have flagged the empty sender four days before the drop.
Your scenario
If your HeyReach numbers dropped and you don't know why, send us the day and the sender count. We'll tell you which of the five reads we'd run first.