CampaignStack with n8n: three wires, both directions
n8n keeps whatever sourcing, enrichment and routing logic you have already built. CampaignStack takes the lead from there: scoring, LinkedIn and email sends inside safety budgets, the review queue, reply handling. Three connections cover every case: an n8n workflow pushes leads in over a signed webhook, a webhook step pushes leads out at any exit of the graph, and an n8n AI agent drives the MCP server with a key.
Everything upstream and around the outreach: pulling rows from a CRM, a sheet or a scraper, cleaning and deduping them, enrichment calls to whatever provider you pay for, branching on business rules, and the glue to the rest of the company's tools. If it already runs in n8n, leave it there. Nothing on this page asks you to rebuild it.
The part n8n's LinkedIn node cannot do and its HTTP node should not: a persistent browser session per LinkedIn account behind its own proxy, per-action daily budgets, AI drafts that pass a critic before a human review queue, a poller that notices the reply, and a router that cancels the queued touches when it lands. Hand the lead over at the boundary and take it back at any exit.
Where each wire attaches
Three connections, what fires them, and what arrives on the other side.
| On the n8n side | On the CampaignStack side | |
|---|---|---|
| Leads in | Any trigger, then an HTTP Request node posting a JSON body with a Crypto node's HMAC in a header. | A workflow's Webhook source. Leads land workspace-scoped, get enriched and scored, and enter the graph at its first node. |
| Leads out | A Webhook trigger node listening on a URL of your choice, then whatever the rest of the workflow does with the lead. | A Webhook step placed on any exit: replied, meeting booked, not interested, sequence finished. It posts a body you template. |
| An agent driving it | An AI Agent node with the MCP Client Tool pointed at the server, authenticated with a user key. | Over 300 tools: source, score, queue, review, send, read the inbox. Every write goes through the same budgets as a click in the UI. |
Set it up
Inbound first, because it is the one people need on day one. Outbound and the agent are optional and independent of each other.
- 1
Create the webhook source in CampaignStack
Open the workflow, click its source node, add a provider and choose Webhook. CampaignStack shows the endpoint URL, a signing secret and a working curl example, each with a Copy button. The URL carries a token; the secret signs the body. A GET on the URL returns the JSON schema the endpoint accepts.
PAYLOAD='{"leads":[{"linkedinUrl":"https://linkedin.com/in/janedoe","fullName":"Jane Doe"}]}' SIG=$(printf '%s' "$PAYLOAD" | openssl dgst -sha256 -hmac "<your-secret>" | cut -d" " -f2) curl -X POST 'https://actions.campaignstack.io/api/webhooks/workflow-leads/<your-token>' \ -H 'Content-Type: application/json' \ -H "X-Webhook-Signature: $SIG" \ -d "$PAYLOAD" - 2
Sign and post from n8n
In n8n: a Set node builds the body below, a Crypto node computes HMAC-SHA256 of that exact string with the secret (hex output), and an HTTP Request node POSTs it with the signature in the header. Up to 100 leads per request, 1,000 per hour per source. Only linkedinUrl is required; the rest is merged onto the lead when present.
{ "leads": [ { "linkedinUrl": "https://linkedin.com/in/janedoe", "fullName": "Jane Doe", "email": "jane@acme.com", "title": "VP Sales", "companyName": "Acme" } ] } # header X-Webhook-Signature: <hex hmac-sha256 of the raw body> - 3
Post leads back out at any exit
Add a Webhook step to the graph wherever you want n8n to hear about the lead: after a reply, after a booked meeting, at the end of the sequence. Paste the URL of an n8n Webhook trigger, pick POST, and template the body with lead fields. Tick "block on failure" only if the rest of the graph must not continue without n8n's acknowledgement.
{ "name": "{{lead:fullName}}", "title": "{{lead:title}}", "company": "{{lead:company}}", "linkedin": "{{lead:linkedinUrl}}", "email": "{{lead:email}}" } - 4
Optional: let an n8n agent drive CampaignStack
Mint a user key under Settings, then API keys in the dashboard. In n8n, give an AI Agent node the MCP Client Tool with the server URL below and the key as a Bearer token. The agent discovers the tools itself; whoami is a good first call.
https://mcp.campaignstack.io/mcp Authorization: Bearer csu_YOUR_KEY
Keep the logic in n8n, keep the sessions in CampaignStack
The temptation with n8n is to go one node further: since an HTTP node can call anything, why not have it send the LinkedIn message too. The reason is what a LinkedIn action needs around it to be safe. A session that survives between runs, a residential proxy that stays attached to one account, a count of what that account already did today and this week, and a pause when LinkedIn pushes back. n8n has none of that state and should not carry it. CampaignStack is where that state lives, and the webhook is the seam.
Webhook leads are yours, not the shared database's
Leads that arrive over a webhook are user-supplied data, so they land workspace-scoped: they never enter the shared lead database other workspaces read from, and they never cross a workspace boundary in either direction. They are enriched, scored against your ICPs and worked exactly like any other lead, and your exclusions apply to them at every send.
Frequently asked questions
Does the inbound webhook accept unsigned requests?
No. Every request needs the HMAC-SHA256 of the raw body, hex-encoded, in the signature header. The Crypto node does this in one step; make sure it hashes the exact string the HTTP node sends, whitespace included.
What happens to a lead that already exists?
It is merged, not duplicated. Matching runs on the LinkedIn URL and, when present, the email; existing fields are kept and missing ones filled. The workflow only picks up a lead once per source.
Can I get replies and outcomes into n8n?
Yes, that is the outbound Webhook step. Place one on the exit you care about; the body template can carry the lead's fields and the exit it took. For anything richer, an n8n agent can read the inbox and the review queue through the MCP server.
Is there a comparison of the two?
Yes, at /vs/n8n, for the buyer still weighing the names. This page assumes you run both.
Every claim about the vendor on this page was checked against these pages on its own site:
Running something else next to it?
Get started
Start building your stack.
Your LinkedIn accounts will be safer with CampaignStack than doing it by hand. That's not a pitch. It's a measurable claim.