If you suspect a missed LinkedIn accept

What this page is for

If you accepted a prospect on LinkedIn but the dashboard still shows them as Invited, this page explains what happens behind the scenes and how we fix it. Most of the time the dashboard catches up on its own within seconds. When it doesn't, this page walks you through the three steps that bring it back in line, in plain language.

WarmySender is a 4-pillar outreach platform — Cold Emailing, Email Warmup, LinkedIn Outreach, and Multichannel sequences. This page is part of the LinkedIn Outreach pillar.

How accept-detection works

WarmySender watches for accepts using three signals, in priority order. The first one to land wins, and the others quietly become no-ops thanks to idempotent stamping. You never get double-counted.

Signal 1 — LinkedIn webhook (fastest, sub-second)

Our LinkedIn integration pushes a new_relation event the moment LinkedIn marks the invite as accepted. The event arrives at our server in well under a second on a healthy day. We match the event to your prospect, stamp the accept timestamp, and flip the status to Connected — all in a single atomic database write. The next campaign step (a follow-up message, for example) is queued for the next valid sending slot in your campaign window. This is the path most accepts take.

Signal 2 — account-status polling (every 30 minutes)

If the webhook drops or arrives late, polling catches it. Every 30 minutes we ask LinkedIn for a fresh view of your relations and reconcile the list against our records. Anything new gets stamped as accepted, with the timestamp set to the actual accept time. The polling cadence is throttled to LinkedIn's documented per-account spacing — we never burst, never call faster than safe limits allow, even when there's a backlog.

Signal 3 — message-received inferred (when the prospect replies)

If a prospect replies before either of the first two signals lands, we infer the accept from the reply itself — you can't reply to a non-connection on LinkedIn, so a reply is forensic proof of acceptance. We stamp both timestamps in one write: linkedin_accepted_at and linkedin_replied_at. The dashboard counts both correctly. This is the rare belt-and-suspenders path, but it exists so a fast reply never silently swallows the upstream accept.

What you'll see on the dashboard

The dashboard's accept counter is computed live from your prospect rows — specifically, the count of prospects in the campaign whose linkedin_accepted_at column is not empty. There is no second cache to fall out of sync. If a prospect shows as Connected, that means their accept timestamp is set. If they show as Invited, the timestamp is still empty.

"Connected" means the prospect accepted your invite and the system has recorded it. From this point forward, follow-up steps that depend on the accept (such as a wait_accept condition or a send_message step) become eligible to fire on their next scheduled time, respecting your campaign's sending window and your LinkedIn account's per-day safety caps.

The next campaign step does not fire instantly on accept. It queues for the next valid send time in your campaign's schedule (e.g. the next weekday in your sending window) plus a small random jitter so the action looks human. This is by design — account safety wins over speed.

If you suspect a missed accept

Three steps, in order. Most of the time you stop at step 1.

  1. Wait 30 minutes. If the webhook was dropped or delayed, the polling fallback will catch up on its next pass. Hard-refresh the dashboard after the half-hour mark — the prospect should now show as Connected.
  2. Click "Resync prospect" on the prospect detail page. If you don't want to wait 30 minutes (or you've already waited and the dashboard still shows Invited), open the prospect's detail view and click the Resync button. We re-poll LinkedIn for that one prospect's relation status and stamp the accept if it's there. This is throttled so it can't be used to burst-call LinkedIn — multiple clicks within the per-account spacing window collapse into a single call.
  3. Contact support. If the prospect is still showing as Invited after a Resync click, email hello@warmysender.com with the prospect URL and the campaign name. We can manually re-drive the accept stamp from our end and confirm whether the issue is platform-side (something we should fix) or LinkedIn-side (something we'll investigate further). For other support paths, see our support page.

Account safety

We never make extra LinkedIn calls just to verify state. Every shortcut you can think of — "let's just poll on demand," "let's re-fetch the relations list every minute," "let's confirm before stamping" — risks tripping LinkedIn's automation detection and getting your account restricted. A banned LinkedIn account is unrecoverable. So our default is the opposite: poll at the documented per-account spacing, lean on webhooks for fast updates, and accept that some accepts arrive a few minutes late rather than risk an account flag.

The polling fallback is throttled to LinkedIn's documented per-account spacing. We do not exceed that pace, even when there is a backlog of prospects waiting on accept signals. If your dashboard takes 30 minutes longer than usual to reflect an accept, that's the safety envelope holding — not a bug.

Examples

Example 1 — the webhook path (most common)

"I accepted Vishwanath's invite on my phone at 3:14 PM on a Tuesday. The dashboard updated 8 seconds later." That's signal 1: LinkedIn pushed the new_relation event the moment it was fired, our handler matched it to Vishwanath's enrollment, and the row was stamped Connected before you put your phone down. The next follow-up step is queued for your campaign's next valid sending slot.

Example 2 — the polling fallback (rare)

"I accepted Selva's invite yesterday afternoon. I checked the dashboard this morning and she's still showing as Invited." That's a missed webhook — perhaps there was a brief outage, or the event was retry-collapsed before reaching our handler. Don't panic: click Resync prospect on Selva's detail page. The Resync fetches the latest relation status directly from LinkedIn within the per-account spacing window, finds the accept, and stamps it. Selva flips to Connected within a few seconds. The follow-up step is queued for the next valid sending slot. No prospects are lost.

Still stuck? Email hello@warmysender.com with the prospect's LinkedIn URL and the campaign name — we'll dig into the specific row.