Clay LinkedIn Integration
Send LinkedIn invites and messages from your reps' connected accounts, triggered from any Clay table. The same endpoints work from Zapier, Make, n8n, or a plain curl.
In this guide
1What it does
- Route sends off Clay's waterfall. Matched title, an intent signal, a fresh job change → send the invite. Any Clay column can drive it.
- Personalize per row. The invite note or message body can pull from any Clay column.
- Distribute across your reps. Set
sender_emailper row to route each send to that rep's LinkedIn (round-robin, by territory, or matched to the account owner). - Attribution stays intact. Every touch is logged in Salescadia's CRM against the right rep and campaign, so replies and booked meetings tie back correctly no matter what Clay is doing.
2Who should use it
3How to set it up
- In Salescadia, open Settings → API keys and create a new key. Grant the write scope (needed for invites and messages; read alone is enough for lookups). Copy the
mm_live_...value — it is shown once. - Have each sending rep connect LinkedIn at Settings → Connections.
- In Clay, add an HTTP API enrichment column: method
POST, URLhttps://www.salescadia.com/api/v1/clay/linkedin/invite, headersAuthorization: Bearer mm_live_YOUR_KEYandContent-Type: application/json. - Set the JSON body and map your Clay columns into it:
{
"linkedin_url": "{{linkedin_url}}",
"note": "Hey {{first_name}}, saw you're heading up growth at {{company}} — mind connecting?",
"sender_email": "{{account_owner_email}}"
}
Clay substitutes any {{column}} token per row. The rep in sender_email sends the invite; leave it blank to fall back to the most-recently-connected account.4The three endpoints
Authorization: Bearer mm_live_...) and return a flat JSON response, so every field maps to its own Clay column.
- POST /api/v1/clay/linkedin/invite (write scope) — send one connection invitation with an optional note (up to 300 characters). Returns
already_connected: trueas a safe no-op if you are already connected. - POST /api/v1/clay/linkedin/message (write scope) — send one direct message to a 1st-degree connection. Returns
not_connected_yetif they have not accepted an invite, so you can chain it behind an invite column. - POST /api/v1/clay/linkedin/lookup (read scope) — resolve a LinkedIn URL to structured fields (name, headline, network distance, already-connected) without sending anything. Use it to gate the invite and message columns.
5Common patterns
- Round-robin across reps. Add a Clay column that picks
sender_emailfrom your rep list by row index. Salescadia routes each send to that rep's LinkedIn. - Only send when eligible. Call
/lookupfirst, filter to rows wherealready_connectedis false and the person is in network, then call/inviteon the rest — so you never waste a send. - Follow up after acceptance. On a scheduled Clay run, call
/lookupfor previously-invited rows, filter toalready_connected: true, then call/messagewith your follow-up copy.
6Rate limits and safety
- Per-account caps. Each rep has a daily invite and message budget (with a warmup ramp for new accounts). Clay can send in bulk; Salescadia throttles to each rep's remaining budget and skips the rest, returned with an explanatory
reason. - Auto-pause on restriction. If LinkedIn restricts a rep's account, Salescadia immediately pauses all further sends for that account — across Clay, the sequencer, and manual sends — and returns
account_restricteduntil they reconnect. - Do-not-contact. Anyone on your organization's do-not-contact list is suppressed before a send happens.
7Troubleshooting
reason you can branch on in Clay:
- not_authenticated — the API key is missing or wrong. Send
Authorization: Bearer mm_live_.... - not_authorized — the key lacks the write scope needed for invites and messages. Add it in Settings → API keys.
- no_sender —
sender_emaildid not match a rep whose LinkedIn is connected. Check the address and that the rep has connected. - bad_url — the value was not a
linkedin.com/in/<slug>profile URL. - not_connected_yet — you tried to message someone who has not accepted an invite. Send or wait on an invite first.
- account_restricted — LinkedIn paused the sender's account; sends are held until they reconnect.
- suppressed — the person is on your do-not-contact list.
More in Integrations
HubSpot Integration Overview
What connecting HubSpot to Salescadia does for your team.
Installing Salescadia from HubSpot
Step-by-step guide to install and connect the HubSpot integration.
HubSpot Data Sync
What data flows between HubSpot and Salescadia, and when.
HubSpot Troubleshooting
Common issues with the HubSpot integration and how to fix them.
Zapier Integration Overview
Connect Salescadia to 8,000+ apps with no code using Zapier.
Connecting Salescadia to Zapier
Step-by-step guide to generate an API key and build your first Zap.
Fireflies.ai Integration
Connect Fireflies so meetings your team already records on Zoom, Google Meet, or Teams get analyzed inside Salescadia — AI summary, coaching score, talk-time analytics, and CRM activity, on the right contact.