Docs/n8n Integration Setup
All Docs
11 min read

n8n Integration Setup

Connect Parsley to n8n via webhooks to route leads, intent signals, and conversations through self-hosted or cloud workflows with full code control.

Connect Parsley to n8n via webhooks to route leads, intent signals, and conversations into 400+ nodes - on n8n Cloud or self-hosted, with full code control. This guide walks you through setup, available events, and practical workflow recipes.

Quick Setup

  1. In n8n, create a new workflow with the Webhook node as the trigger
  2. Set the HTTP method to POST and copy the Production URL n8n generates
  3. In Parsley, go to Hub > API Keys and create a new webhook subscription
  4. Paste the n8n URL, pick the events you want to receive, and save
  5. Send a test event from Parsley so n8n can capture sample data
  6. Connect downstream nodes and reference Parsley fields with expressions like {{ $json.data.leadEmail }}

Events now flow from Parsley into your n8n workflow automatically.

Prerequisites

  • An n8n instance - Use n8n Cloud for managed hosting, or self-host via Docker, npm, or n8n's hosted partners. The community edition is free and open source.
  • A Parsley account - The Profile Viewed event is available on all plans. Business events (conversations, leads, scores, signals) require a Business plan.
  • Access to Hub > API Keys in your Parsley dashboard, where you'll create the webhook subscription.

Step 1: Create an n8n Workflow with the Webhook Node

From your n8n editor:

  1. Click + New Workflow
  2. Click the + in the canvas and search for Webhook
  3. Add the Webhook node and configure:
    • HTTP Method: POST
    • Path: anything memorable, e.g. parsley
    • Authentication: None (Parsley signs requests separately - see Step 6)
    • Respond: Immediately (Parsley does not need a response body)
  4. Click Listen for Test Event for the test URL, or copy the Production URL for live use
  5. Activate the workflow (toggle in the top-right) so the production URL accepts traffic

You will paste this URL into Parsley in the next step.

Step 2: Create a Webhook Subscription in Parsley

From your Parsley dashboard:

  1. Go to Hub in the left sidebar
  2. Click API Keys
  3. Scroll to the Webhooks section
  4. Click Create Webhook
  5. Paste the n8n webhook URL into the URL field
  6. Select which events you want to subscribe to (see Step 3 below)
  7. Click Create

Parsley will generate a signing secret you can use to verify incoming webhooks in n8n with a Crypto or Function node, if you need request authenticity.

Step 3: Choose Your Events

Parsley fires 5 webhook events. The Profile Viewed event is available on all plans. The remaining four require a Business plan.

EventDescriptionPlan
Profile ViewedSomeone views your Parsley profileFree
Conversation CompletedA chatbot conversation ends on your profileBusiness
Lead CapturedA visitor shares their contact details via chatbot or formBusiness
Lead ScoredA lead receives a Hot, Warm, or Cold quality scoreBusiness
Signal DetectedA MEDDIC buying signal is identified during conversationBusiness

You can subscribe to multiple events with a single webhook, or create separate webhooks for different workflows.

Step 4: Capture Sample Data in n8n

n8n's Webhook node needs to receive at least one real event before downstream nodes can reference fields:

  1. In the Webhook node, click Listen for Test Event
  2. Trigger an event in Parsley - for example, view your own profile (for profile.viewed) or use the webhook test feature in Hub > API Keys to send a test payload
  3. n8n will capture the event and display the JSON payload in the Output panel
  4. Downstream nodes can now reference fields with expressions like {{ $json.data.leadEmail }} or {{ $('Webhook').item.json.data.leadQuality }}

Step 5: Data Fields

Each event sends a specific set of fields to n8n. Use these to map data into your downstream nodes.

Profile Viewed

FieldDescriptionExample
idEvent IDevt_abc123
typeEvent typeprofile.viewed
createdAtTimestamp (ISO 8601)2026-03-20T14:30:00Z
data.profileUserIdYour Parsley user IDuser_abc123
data.profileUsernameYour Parsley usernamejanesmith
data.visitorIdUnique visitor identifiervis_def456
data.sourceTraffic sourcelinkedin
data.refererFull referrer URLhttps://www.linkedin.com/in/janesmith

Conversation Completed

FieldDescriptionExample
idEvent IDevt_abc123
typeEvent typechatbot.conversation.completed
createdAtTimestamp (ISO 8601)2026-03-20T14:30:00Z
data.conversationIdConversation IDconv_abc123
data.profileUserIdYour Parsley user IDuser_abc123
data.profileUsernameYour Parsley usernamejanesmith
data.visitorIdUnique visitor identifiervis_def456
data.messageCountTotal messages exchanged8
data.topicsTopics discussed (array)["pricing", "enterprise features"]
data.durationDuration in seconds245

Lead Captured

FieldDescriptionExample
idEvent IDevt_abc123
typeEvent typelead.captured
createdAtTimestamp (ISO 8601)2026-03-20T14:30:00Z
data.conversationIdConversation IDconv_abc123
data.profileUserIdYour Parsley user IDuser_abc123
data.profileUsernameYour Parsley usernamejanesmith
data.visitorIdUnique visitor identifiervis_def456
data.leadEmailLead's email addressbuyer@acmecorp.com
data.leadNameLead's nameAlex Johnson
data.sourceCapture sourcechatbot

Lead Scored

FieldDescriptionExample
idEvent IDevt_abc123
typeEvent typelead.scored
createdAtTimestamp (ISO 8601)2026-03-20T14:30:00Z
data.conversationIdConversation IDconv_abc123
data.profileUserIdYour Parsley user IDuser_abc123
data.profileUsernameYour Parsley usernamejanesmith
data.visitorIdUnique visitor identifiervis_def456
data.leadQualityLead temperaturehot
data.intentScoreIntent score (1-5)5
data.intentSignalIntent classificationhigh_intent
data.meddic.metricsMetrics signal detectedtrue
data.meddic.economicBuyerEconomic Buyer detectedtrue
data.meddic.decisionCriteriaDecision Criteria detectedtrue
data.meddic.decisionProcessDecision Process detectedfalse
data.meddic.identifyPainIdentify Pain detectedtrue
data.meddic.championChampion detectedfalse

Signal Detected

FieldDescriptionExample
idEvent IDevt_abc123
typeEvent typesignal.detected
createdAtTimestamp (ISO 8601)2026-03-20T14:30:00Z
data.conversationIdConversation IDconv_abc123
data.profileUserIdYour Parsley user IDuser_abc123
data.profileUsernameYour Parsley usernamejanesmith
data.visitorIdUnique visitor identifiervis_def456
data.signalTypeMEDDIC signal typeidentifyPain
data.quoteVerbatim quote from conversation"We are losing deals because..."
data.confidenceConfidence levelhigh

Step 6: Verify the Webhook Signature (Optional)

If your workflow needs to validate that requests genuinely came from Parsley, use a Crypto node followed by an IF node:

  1. After the Webhook trigger, add a Crypto node
  2. Set Action: Hmac, Type: SHA256, Secret: your Parsley signing secret
  3. In Value, reference the raw request body: {{ $('Webhook').item.json }} (you may need to JSON-stringify depending on your n8n version)
  4. Add an IF node comparing the computed HMAC against the X-Parsley-Signature header from {{ $('Webhook').item.headers['x-parsley-signature'] }}
  5. Only continue the workflow on match

For most internal use cases this step is optional - the webhook URL itself is unguessable.

Step 7: Workflow Recipes

Here are practical examples to get you started with n8n. These lean into n8n's strengths: branching, code nodes, and self-hosted privacy.

Postgres lead pipeline (Business)

Trigger: Webhook (subscribed to Lead Captured in Parsley) Action: Postgres - Insert

Insert data.leadEmail, data.leadName, data.source, and createdAt directly into your own database. Perfect for self-hosted teams who want lead data inside their own infra rather than a SaaS CRM.

LLM-generated outreach drafts (Business)

Trigger: Webhook (subscribed to Lead Scored in Parsley) Actions: IF (filter on Hot) → OpenAI / Anthropic → Gmail (draft, not send)

  1. Filter on data.leadQuality === 'hot'
  2. Pass data.topics and the MEDDIC signals to an LLM node with a prompt like "Draft a 3-sentence follow-up email referencing these conversation topics and buying signals"
  3. Save the result as a Gmail draft (not auto-sent) so you can review and personalise before sending

Branching MEDDIC router (Business)

Trigger: Webhook (subscribed to Signal Detected in Parsley) Action: Switch node - one branch per signal type

Use n8n's Switch node on data.signalType. Send identifyPain signals to your CRM as new deals, send economicBuyer mentions to Slack with a "decision-maker confirmed" tag, and store everything else in a Postgres audit table for later analysis.

Self-hosted webhook fan-out (Free + Business)

Trigger: Webhook (subscribed to multiple Parsley events) Action: Multiple HTTP Request nodes in parallel

Use n8n as a webhook relay - receive every Parsley event once, then fan out to your CRM, your data warehouse, and your Slack channel in parallel. Cheaper than running three separate Zapier zaps, and the entire flow runs inside your own infra.

Daily Hot leads digest (Business)

Trigger: Webhook (subscribed to Lead Scored in Parsley) + Schedule trigger Actions: Append rows to a n8n Variable or Redis list during the day; Schedule node fires at 5pm and sends a digest email of the day's Hot leads

Aggregate Hot leads through the day and deliver a single end-of-day summary instead of getting pinged on every score event. Useful if you want signal without noise.

GDPR-friendly lead capture (Business)

Trigger: Webhook (subscribed to Lead Captured in Parsley) Action: Function node → Postgres

Use n8n's Function (Code) node to hash or pseudonymise PII before persisting. Self-hosted n8n means raw lead data never touches a third-party SaaS at all - useful for EU-based teams with strict data residency rules.

Why n8n?

n8n is open source and self-hostable, which makes it the right choice when data residency, cost predictability, or branching/code complexity matter. The Switch and Code nodes give you logic that no-code routers can't match, and n8n Cloud offers a managed option if you do not want to host it yourself.

Parsley supports n8n alongside Zapier, Pabbly Connect, and Make - all four deliver the same 5 events with identical data fields. Pick whichever automation tool your team already uses.

Troubleshooting

n8n is not receiving events

  • Verify your webhook subscription in Parsley (Hub > API Keys) is marked as active
  • Check that the n8n webhook URL was copied correctly (no trailing spaces) - and that you used the Production URL, not the Test URL, for live traffic
  • Make sure your n8n workflow is Active (toggle in the top-right of the editor)
  • If self-hosting, confirm your n8n instance is reachable from the public internet (port forwarding, firewall, reverse proxy)
  • Check the Parsley webhook delivery log for failed attempts

Webhook delivery failing

Parsley retries webhook deliveries up to 3 times with exponential backoff (1 second, 5 seconds, 30 seconds). If all attempts fail, check:

  • Is your n8n workflow active?
  • Is n8n returning a 2xx response? Set the Webhook node's Respond to Immediately to avoid timeouts
  • Check n8n's Executions view for error details

Business events unavailable

The Conversation Completed, Lead Captured, Lead Scored, and Signal Detected events require a Business plan. The Profile Viewed event works on all plans.

Missing fields in n8n

  • Ensure you triggered at least one real event so n8n could capture the payload structure
  • Use the webhook test feature in Parsley to send full sample data
  • Reference fields with the full path: {{ $json.data.leadEmail }} (not {{ $json.leadEmail }})

What's Next


Questions? Contact us or email peter@parsley.id.

Ready to connect your CRM?