Funnel Draw / Integrations / n8n
Funnel Draw + n8n
An n8n Webhook node receives Funnel Draw's events and can check the FunnelDraw-Signature header in a Code node before anything runs. The HTTP Request node posts purchases, leads and booked calls to Funnel Draw's incoming webhook, from any of n8n's trigger nodes.
Automation · Webhooks
How it works
- Check every request is real With the raw body and a few lines of code, n8n can reject anything not signed with your webhook's secret.
- Self-hosted or cloud The same workflow runs on n8n Cloud or on your own server.
- Any source, one shape Stripe, Shopify, Calendly or HubSpot trigger nodes feed one HTTP Request node that sends Funnel Draw its event, step and value.
Set it up
Add a Webhook node
In a new n8n workflow, add the Webhook node and set HTTP Method to POST. Under Options, turn on Raw Body if you will verify the signature.
Copy the test URL first
The node has a Test URL and a Production URL. Copy the Test URL and click Listen for test event.
Add it in Funnel Draw and send a test
In Funnel Draw open Integrations → Webhooks → Add, paste the Test URL, tick your events and save. Copy the signing secret (shown once), then click Send test; the ping appears in the n8n editor.
Verify the signature
Add a Code node that reads the funneldraw-signature header (t=…,v1=…), computes HMAC-SHA256 of "<t>.<raw body>" with the whole whsec_… secret, compares it with v1 in constant time, and stops the run if it doesn't match or t is old.
Switch to the Production URL
Build the rest of the workflow, publish (activate) it, then edit the webhook in Funnel Draw to use the Production URL. Production runs show under the workflow's Executions tab, not in the editor.
To send data in, use HTTP Request
Add an HTTP Request node: Method POST, URL your incoming webhook URL from Integrations → Incoming webhook, Send Body on, Body Content Type JSON, Specify Body: Using JSON, for example {"event": "call_booked", "step": "Strategy call", "count": 1}.
Ideas to try
When a funnel is deleted, alert the owner
A B2B SaaS team verifies the signature, then sends a Slack or email message naming the deleted funnel, so a deletion never goes unnoticed.
When a Calendly call is booked, send call_booked to Funnel Draw
A consultant uses the Calendly Trigger node on "Event created" and an HTTP Request node that posts {"event": "call_booked", "step": "Discovery call", "count": 1}.
When a Stripe checkout completes, send a purchase
The Stripe Trigger node on checkout.session.completed feeds an HTTP Request node posting {"event": "purchase", "value": {{ $json.data.object.amount_total / 100 }}} as JSON.
Questions
Why does my signature check fail?
You must hash the raw body exactly as sent, not JSON re-built from the parsed object. Turn on the Webhook node's Raw Body option and sign "<t>.<raw body>" with the full secret, including the whsec_ prefix.
Why do events stop arriving after I close the editor?
The Test URL only listens while you test. Publish the workflow and use the Production URL in Funnel Draw.
Can a self-hosted n8n use crypto in a Code node?
Built-in modules must be allowed on self-hosted n8n (the NODE_FUNCTION_ALLOW_BUILTIN setting, e.g. crypto). The Crypto node's Hmac action is an alternative.
More in Automation
Draw it yourself,
or hand it to your AI.
3 days free, no card.