How to Use the Webhook Trigger Node
Receiving inbound data from forms, e-signature tools, and custom integrations.
How to Use the Webhook Trigger Node
The Webhook
This guide shows you how to configure the Webhook
When to Use Webhook WebhookClick to read the full definition in our AI & Automation Glossary. Triggers
Use webhooks
- Client intake forms (Typeform, Jotform, Google Forms)
- E-signature completion events (DocuSign, PandaDoc, HelloSign)
- Payment confirmations (Stripe, PayPal)
- CRMrecord updates (Salesforce, HubSpot)CRMClick to read the full definition in our AI & Automation Glossary.
- Custom client portals or internal tools
Do NOT use webhooks
Step 1: Create Your Webhook WebhookClick to read the full definition in our AI & Automation Glossary. Endpoint
- Open your n8n workflow editor.
- Click the plus icon to add a node.
- In the node panel, set HTTP Method to the method your source system uses (typically POST for form submissions, GET for simple notifications).
- Leave Path blank to auto-generate a unique URL, or enter a custom path like
client-intakefor readability. - Click Listen for Test Event at the bottom of the node panel.
- Copy the Test URL that appears. It looks like:
https://your-n8n-instance.com/webhook-test/abc123def456
The test URL is temporary. After you activate the workflow, n8n generates a production URL that persists.
Production vs. Test URLs:
- Test URL: Active only while the workflow editor is open. Use this during development.
- Production URL: Permanent endpoint. Appears after you click Active in the top-right corner of the workflow editor.
Step 2: Configure Authentication
Never deploy an unauthenticated webhook
Option A: Header Auth (Recommended for Most Cases)
- In the Webhooknode, click Add Option and select Header Auth.WebhookClick to read the full definition in our AI & Automation Glossary.
- Set Name to
X-Webhook-Token(or any custom header name). - Set Value to a strong random string. Generate one with:
openssl rand -hex 32 - Save the workflow.
When external systems call your webhook
X-Webhook-Token: your-generated-token-here
Configure this in your source system's webhook
Option B: Basic Auth (For Systems That Support It)
- Click Add Option and select Basic Auth.
- Set User to a username (e.g.,
n8n-webhook). - Set Password to a strong password.
The external system must send credentials in the Authorization header:
Authorization: Basic base64(username:password)
Most webhook
Option C: IP Allowlist (Additional Layer)
If your source system has a static IP address:
- Click Add Option and select IP Whitelist.
- Enter allowed IPs in CIDR notation:
203.0.113.0/24or single IPs:203.0.113.5
Combine this with header auth for defense in depth.
Step 3: Test the Webhook WebhookClick to read the full definition in our AI & Automation Glossary.
Before connecting real systems, verify your webhook
- With the workflow in test mode (node shows "Waiting for webhookcall"), open a terminal.webhookClick to read the full definition in our AI & Automation Glossary.
- Send a test request using curl:
curl -X POST https://your-n8n-instance.com/webhook-test/abc123def456 \
-H "Content-Type: application/json" \
-H "X-Webhook-Token: your-token-here" \
-d '{"name": "John Smith", "email": "john@example.com", "matter_type": "Estate Planning"}'
- Check the n8n workflow editor. The Webhooknode should show the received data.WebhookClick to read the full definition in our AI & Automation Glossary.
- If you see an error, check your authentication headers and URL.
Step 4: Access and Transform Incoming Data
The Webhook$json. Access fields using standard JavaScript notation.
Example incoming payload from a client intake form:
{
"first_name": "Sarah",
"last_name": "Johnson",
"email": "sarah.johnson@example.com",
"phone": "555-0123",
"service_type": "Tax Preparation",
"estimated_revenue": "5000"
}
Access individual fields:
{{ $json.first_name }}returns "Sarah"{{ $json.email }}returns "sarah.johnson@example.com"{{ $json.estimated_revenue }}returns "5000"
Common transformations:
Add a Set node after the Webhook
- Add a Set node.
- Click Add Value for each field you want to output.
- Set Name to your desired field name.
- Set Value using expressions:
full_name: `{{ $json.first_name + ' ' + $json.last_name }}`
email_lower: `{{ $json.email.toLowerCase() }}`
revenue_number: `{{ parseInt($json.estimated_revenue) }}`
received_date: `{{ $now.toISO() }}`
This outputs clean, typed data for downstream nodes.
Step 5: Handle Missing or Malformed Data
Real-world webhooks
- After the Webhooknode, add an IF node.WebhookClick to read the full definition in our AI & Automation Glossary.
- Set conditions to check required fields:
{{ $json.email }}is not empty{{ $json.first_name }}is not empty
- Connect the true output to your main workflow.
- Connect the false output to an error handler.
Error handler setup:
- Add a Set node on the false branch.
- Configure it to log the error:
error_type: "Missing required fields"
received_data: `{{ JSON.stringify($json) }}`
timestamp: `{{ $now.toISO() }}`
- Add a Send Email node or Slack node to alert your team.
Step 6: Return Custom Responses
By default, webhooks
- At the end of your workflow, add a Respond to Webhooknode.WebhookClick to read the full definition in our AI & Automation Glossary.
- Set Response Code to 200 (success) or 400 (validation error).
- Set Response Body to JSON:
{
"status": "success",
"message": "Client intake received",
"reference_id": "`{{ $('Webhook').item.json.email }}`"
}
The calling system receives this response immediately, even if your workflow continues processing.
For async workflows:
Place the Respond to Webhook
Step 7: Activate and Deploy
- Click Active in the top-right corner of the workflow editor.
- Update your external system (Typeform, DocuSign, etc.) with the production URL.
- Send a real test event from the external system.
- Monitor the workflow executions in n8n's execution log.
Real-World Example: DocuSign to Matter Management
Scenario: When a client signs an engagement letter in DocuSign, create a new matter in Clio and send a welcome email.
Workflow structure:
- WebhookTrigger (receives DocuSign envelope completion event)WebhookClick to read the full definition in our AI & Automation Glossary.
- IF node (checks
$json.event == "envelope-completed") - HTTP Request node (calls DocuSign APIto download signed PDF)APIClick to read the full definition in our AI & Automation Glossary.
- Clio node (creates new matter with client data from
$json.envelope.recipients) - Gmail node (sends welcome email with matter number)
- Respond to Webhooknode (returns 200 to DocuSign)WebhookClick to read the full definition in our AI & Automation Glossary.
Key webhook
- HTTP Method: POST
- Header Auth:
X-DocuSign-Signature(DocuSign's HMAC signature header) - Response:
{"status": "received"}within 30 seconds (DocuSign timeout limit)
Troubleshooting Common Issues
Webhook
- Verify the authentication header name matches exactly (case-sensitive).
- Check that the external system is sending the header with every request.
- Test with curl first to isolate the issue.
Workflow doesn't trigger:
- Confirm the workflow is Active (not just saved).
- Check that you're using the production URL, not the test URL.
- Review n8n's execution log for failed attempts.
Data fields are undefined:
- Log the full
$jsonobject with a Set node to see the actual structure. - The external system may nest data differently than expected.
- Use
{{ $json.data?.field }}for optional chaining on potentially missing fields.
Webhook
- Move the Respond to Webhooknode earlier in the workflow.WebhookClick to read the full definition in our AI & Automation Glossary.
- External systems typically timeout after 10-30 seconds.
- Process heavy operations (APIcalls, file uploads) after responding.APIClick to read the full definition in our AI & Automation Glossary.
Security Checklist
Before going live:
- [ ] Authentication is enabled (header auth or basic auth)
- [ ] WebhookURL is not shared in public documentationWebhookClick to read the full definition in our AI & Automation Glossary.
- [ ] IP allowlist is configured if source IPs are static
- [ ] Error responses don't leak sensitive system information
- [ ] Workflow logs are reviewed weekly for suspicious activity
- [ ] Rate limiting is considered for high-volume endpoints (use n8n's built-in rate limit option)
The Webhook

Reviewed by Revenue Institute
This guide is actively maintained and reviewed by the implementation experts at Revenue Institute. As the creators of The AI Workforce Playbook, we test and deploy these exact frameworks for professional services firms scaling without new headcount.
Revenue Institute
Need help turning this guide into reality? Revenue Institute builds and implements the AI workforce for professional services firms.