Engineering6 min read

Send LinkedIn DMs and invites from n8n: three workflows that work

n8n's LinkedIn node only creates posts. To send messages and invitations, an HTTP Request node calls Curviate's API on your own account, and Curviate's webhooks start your workflows on replies and accepts. Three workflows, step by step.

Raphael Redmer
Ask AI about this articleClaudeChatGPT

TL;DR

  • Yes, n8n can send LinkedIn DMs and invites: an HTTP Request node calls Curviate's API, which acts on your own connected LinkedIn account.
  • Curviate costs $30 per LinkedIn account a month on Build (API and webhooks) and $60 on Automate, which adds Motions and one inbox.
  • Curviate webhooks start n8n workflows on replies, accepted invites and Motion steps; n8n's own LinkedIn node only creates posts.

Yes, LinkedIn direct messages are possible with n8n, but not with n8n's built-in LinkedIn node, which only creates posts (n8n docs). The working setup is an API that acts on your own LinkedIn account: n8n's HTTP Request node calls it to send messages and invitations, and its webhooks start your workflows when someone replies or accepts. I build Curviate, one such API, and this guide shows three workflows on it.

Facts checked November 4, 2026

Can n8n's LinkedIn node send messages?

No. n8n's LinkedIn node has one operation: create a post, as a person or an organization. It runs on LinkedIn's official API with your own OAuth credentials.

So there is no "send message", "send invitation" or "search people" in it. n8n's docs point to the HTTP Request node for anything the node does not cover, and that is the door Curviate uses.

Two pieces: webhooks in, API calls out

Every Curviate workflow in n8n has the same shape.

  • In: n8n's Webhook node receives a signed Curviate event, such as message.received (a reply landed), connection.accepted (an invitation was accepted) or enrollment.replied (someone answered a Motion).
  • Out: the HTTP Request node calls the Curviate REST API with your key as a Bearer header: add a contact, start a Motion, send a message, send an invitation.

Both work on self-hosted n8n and n8n Cloud, as long as the instance is reachable over HTTPS. There is no community node to install.

Create the webhook once, with the n8n URL as the target:

shell
# Replies from the listed accounts go to your n8n Webhook node
curl https://api.curviate.com/v1/webhooks \
  -H "Authorization: Bearer $CURVIATE_API_KEY" \
  -d '{"source": "messaging", "events": ["message.received"],
       "account_ids": ["acc_YOUR_ACCOUNT_ID"],
       "request_url": "https://YOUR_N8N_HOST/webhook/linkedin-replies"}'

Each webhook covers one source: messaging for replies, user for accepted invitations, motion for Motion steps and account_status for account alerts. Pick the accounts it listens to with account_ids, or leave it out to cover every account you can operate.

Workflow 1: route every LinkedIn reply

Five reps, five LinkedIn accounts, and replies scattered across five inboxes. This workflow puts them where the team already works.

  1. Webhook node receives message.received from every account the webhook covers (leave out account_ids for all of them).
  2. IF node checks whether motion_id is set: it is filled when the chat belongs to a Motion's enrollment and null otherwise.
  3. Motion replies go to the deal channel in Slack; everything else goes to the rep who owns that account.
  4. Optional: an HTTP Request answers from the same account with POST /v1/{account_id}/chats/{chat_id}/messages.

On Automate you get this view without n8n too: the Unibox holds every account's chats in one inbox, and a rep can reply as any account. The workflow earns its place when replies must also land in Slack or the CRM.

Workflow 2: from a new lead to an invite and a follow-up

A form fill, a CRM stage or a row in a sheet becomes LinkedIn outreach, without anyone copying URLs.

  1. Trigger: your form, HubSpot or Google Sheets node.
  2. HTTP Request: POST /v1/contacts with the person's LinkedIn URL and first name. Curviate creates or updates the contact.
  3. HTTP Request: POST /v1/motions/{id}/contacts with the new contact id. The Motion sends the invitation, waits for the accept, follows up and stops when the person replies.

Why hand the sequence to a Motion instead of looping invites in n8n? A Motion paces each account like a person, inside its working hours, and can hand each person to the account already connected to them (the warm path). It also skips anyone already in another Motion or an open chat, so two reps never pitch the same person.

For a one-off, call POST /v1/{account_id}/invites with a note of up to 300 characters, or POST /v1/{account_id}/chats to start a direct message.

Workflow 3: qualify before the pitch

Here n8n makes a decision inside a running Motion, so your reps pitch only the people worth pitching.

  1. A Motion step is marked to notify you, which emits motion.custom_event with the contact and its enrollment_id.
  2. n8n scores the contact: enrichment, a CRM lookup or an AI Agent node.
  3. n8n writes the tier back and calls POST /v1/enrollments/{id}/events with the event name the Motion waits for.
  4. The Motion continues and pitches only tier A.

This one needs Automate, since Motions and incoming events are Automate features. Send enrollment_id in the webhook's body template, so the match never depends on an email address.

n8n details that save you an afternoon

  • Test URL, then production URL. n8n listens on the test URL only while you click Listen for test event. The production URL works once you publish the workflow (n8n Webhook docs). Build against the test URL with curviate webhook test, then point the Curviate webhook at production.
  • Answer within 10 seconds. Curviate waits 10 seconds for a 2xx and retries slower answers, up to 5 attempts in 24 hours. Set the Webhook node to respond Immediately for long workflows.
  • Deduplicate. Delivery is at least once, so the same event can arrive twice. The delivery id (wdl_...) stays the same on every retry, so deduplicate on it.
  • Check the signature. Each delivery carries a Curviate-Signature header: an HMAC-SHA256 of the timestamp and raw body with your webhook's secret. Drop anything older than five minutes. Header auth on the Webhook node adds a second lock.
  • Missed a delivery? Every event for a connected account is kept for 24 hours at GET /v1/{account_id}/events, subscribed or not.

n8n and LinkedIn: the options compared

Featuren8n + Curviate APIn8n LinkedIn nodeA browser bot in n8n
Send DMs and invitationsClicks through the site
Create postsClicks through the site
Triggers on replies and accepts
Built on LinkedIn's official API
Per-account limits that stop the actionNot stated in n8n's docsYours to build
Sequences across several reps' accountsMotions (Automate)

The LinkedIn node is the right tool if you only publish. For anything that touches people, a browser bot in a workflow is the riskiest choice: LinkedIn's User Agreement bans bots for sending messages and adding contacts, and a bot carries no limits unless you build them. Curviate does not remove that risk either; its terms say the design "lowers the risk; it does not remove it". How the limits work is in LinkedIn limits in 2026.

What it costs

Curviate charges per connected LinkedIn account, never per seat in n8n or per teammate.

  • Build, $30 per account a month: the REST API, webhooks, CLI, MCP server and SDK. Workflow 1 and one-off sends run here.
  • Automate, $60 per account a month: everything in Build, plus Motions, the Unibox and analytics per step, account and variant. Workflows 2 and 3 need it.

Five reps on Automate cost $300 a month. Make works the same way, with a Custom webhook module in and an HTTP module out. If you would rather run the same actions from a chat than a workflow, connecting Claude to LinkedIn uses the same accounts and limits, and the step-by-step on sequences is in how to automate LinkedIn messages. Growth teams choosing between this setup, PhantomBuster and Clay will find the trade-offs in Curviate alternatives for growth teams.

Try it on your own account: 7 days of Automate, no card.

Wire LinkedIn into your n8n stack

Create a key, point one webhook at an n8n Webhook node and send a test event. Your first workflow can route replies the same day, and every send it makes stays inside the limits of the account it uses. Every tool that connects the same way is on the integrations page.

Sources checked

Not affiliated with LinkedIn Corporation or n8n.

More articles

LinkedIn events in,LinkedIn actions out.

Signed webhooks and the REST API on Build at $30, Motions and one inbox on Automate at $60 per LinkedIn account a month. Start a 7-day trial of Automate, no card.

No card required