n8n, Zapier, or Make — which one?
All three work with OpenClaw via webhooks. Here's how they compare so you can pick the right one for your setup.
n8n
Free, open-source, and self-hostable — meaning your data never leaves your machine. The most powerful option if you're comfortable with a bit of setup.
- Free forever on self-hosted
- 400+ integrations
- Full workflow logic (if/else, loops)
- Best for developers & privacy-focused users
Zapier
The easiest to get started with. No installation, just log in and start connecting apps. Free tier covers basic use cases.
- Free plan available (100 tasks/month)
- 7,000+ app integrations
- Easiest interface for beginners
- Best for non-technical users
Make (formerly Integromat)
More powerful than Zapier with a visual drag-and-drop canvas. Great middle ground between Zapier's simplicity and n8n's power.
- Free plan available (1,000 ops/month)
- 1,500+ app integrations
- Visual scenario builder
- Best for complex multi-step flows
How the connection works
OpenClaw exposes a webhook URL. You point your automation tool at that URL, and OpenClaw receives the trigger, runs your agent, and sends a response back.
The automation tool is just a middleman — it receives the trigger, packages the data, sends it to OpenClaw's webhook, then takes the response and delivers it wherever you want. OpenClaw does all the thinking in the middle.
Step 1 — Enable the OpenClaw webhook
Before connecting any tool, turn on OpenClaw's webhook server and note your endpoint URL. This is the same for all three tools.
-
Enable the webhook in openclaw.json
Open your openclaw.json and add the webhook block:
openclaw.json{ "webhook": { "enabled": true, "port": 8080, "secret": "your-secret-key", // optional auth token "path": "/webhook" // endpoint path } }Restart OpenClaw. Your webhook is now live at
http://localhost:8080/webhook. -
Make it reachable from the internet (if using Zapier or Make)
Zapier and Make are cloud services — they can't reach
localhoston your machine. You need to expose your local webhook using a tunnel tool:Terminal — using ngrok (free)ngrok http 8080
ngrok gives you a public URL like
https://abc123.ngrok.iothat tunnels to your local machine. Use that URL in Zapier or Make instead of localhost. For n8n (self-hosted on the same machine), you can skip this step.ngrok URLs change on free planThe free ngrok URL changes every time you restart it. Upgrade to a paid ngrok plan or use a static domain to avoid having to update your Zaps every time.
Step 2 — Connect your automation tool
Choose your tool below for step-by-step setup instructions.
-
Create a new workflow in n8n
Open your n8n instance and click + New Workflow. Give it a name like "OpenClaw Trigger".
-
Add a trigger node
Click + to add a node. Choose your trigger — for example Schedule Trigger (run every morning), Gmail Trigger (on new email), or Webhook (manually triggered).
-
Add an HTTP Request node to call OpenClaw
After your trigger, add an HTTP Request node with these settings:
- Method:
POST - URL:
http://localhost:8080/webhook - Body: JSON —
{"message": "Your prompt here", "context": "{{ $json }}"} - Header:
Authorization: Bearer your-secret-key(if you set one)
- Method:
-
Handle the response
OpenClaw returns a JSON response with a
replyfield. Add another node (Slack, Gmail, Notion, etc.) to send{{ $json.reply }}wherever you want the result to go.OpenClaw webhook response{ "status": "ok", "reply": "Your agent's response text here", "tokens_used": 342 } -
Activate the workflow
Toggle Active in the top right. n8n will now run the workflow on every trigger automatically.
-
Create a new Zap
Log into zapier.com and click + Create Zap.
-
Set your trigger
Search for your trigger app — Gmail, Google Forms, Typeform, Slack, Airtable, or anything else. Choose the trigger event (e.g. "New Email" or "New Form Submission") and connect your account.
-
Add a Webhooks by Zapier action
Click + to add an action. Search for Webhooks by Zapier → choose POST. Configure it:
- URL: your ngrok URL +
/webhook(e.g.https://abc123.ngrok.io/webhook) - Payload Type:
json - Data — key:
message, value: map a field from your trigger (e.g. email body) - Headers — key:
Authorization, value:Bearer your-secret-key
- URL: your ngrok URL +
-
Add a destination action
Add another action to send OpenClaw's response somewhere useful — a Slack message, a Gmail reply, a new Notion page, or a Google Sheet row. Map
replyfrom the webhook response to the field you want. -
Test and publish your Zap
Click Test step on the webhook action to send a real request to OpenClaw and confirm it responds. Then click Publish Zap to go live.
-
Create a new scenario in Make
Log into make.com, go to Scenarios and click + Create a new scenario.
-
Add a trigger module
Click the first circle and search for your trigger app. Make supports Gmail, Slack, Airtable, Google Sheets, and hundreds more. Pick your event and connect your account.
-
Add an HTTP module to call OpenClaw
Click + after your trigger, search for HTTP → Make a request. Set:
- URL: your ngrok URL +
/webhook - Method:
POST - Body type:
Raw/ Content-type:application/json - Request content:
{"message": "{{your trigger data}}"} - Add a header:
Authorization: Bearer your-secret-key
- URL: your ngrok URL +
-
Parse the response and route it
Add a JSON → Parse JSON module to extract
replyfrom the response. Then add your destination module (Slack, email, Notion, etc.) and mapreplyto the message field. -
Schedule and activate
Set the scheduling interval (immediately on trigger, or at set times), then click ON to activate the scenario.
Real workflow examples
Here are some workflows you can build today with OpenClaw and these tools.
Morning briefing to Slack
→ OpenClaw: "Summarize today's news and my calendar"
→ Post summary to #general in Slack
Auto-reply to support emails
→ OpenClaw: "Draft a helpful reply to this email: [body]"
→ Create a Gmail draft for review
Summarize form submissions
→ OpenClaw: "Summarize this feedback and extract action items"
→ Add row to Google Sheet
Slack message to task
→ OpenClaw: "Convert this into a structured task with priority"
→ Create Notion task with extracted fields
Weekly analytics summary
→ OpenClaw: "Pull last week's data and write a summary report"
→ Email report to team
New lead to CRM note
→ OpenClaw: "Research this company and write a one-paragraph briefing"
→ Add as a note to the CRM record
Common problems & fixes
-
Cloud tools like Zapier and Make can't reach
localhost. Make sure you:- Have ngrok or a similar tunnel running (
ngrok http 8080) - Are using the ngrok https URL (not localhost) in your Zap/scenario
- Have OpenClaw running at the same time as ngrok
- Haven't restarted ngrok (which changes the URL on the free plan)
- Have ngrok or a similar tunnel running (
-
The secret key in your request doesn't match what's in openclaw.json. Check that:
- The
Authorizationheader is set to exactlyBearer your-secret-key - The key matches what you put in the
webhook.secretfield in openclaw.json - There are no extra spaces or quotes in either place
- If you don't want auth, remove the
secretfield from openclaw.json entirely
- The
-
The
messagefield in your POST body is probably empty or not mapped correctly. Check that:- Your body is valid JSON:
{"message": "some text"} - You've mapped the trigger data correctly (e.g. the email body, not the subject)
- The content-type header is set to
application/json - Check OpenClaw's logs for any parsing errors
- Your body is valid JSON:
-
Zapier has a 30-second timeout and Make has a 40-second timeout. If OpenClaw's LLM response takes longer than that, the request will fail. To fix it:
- Use a faster or local model — see the Local LLM guide
- Keep your prompts shorter and more specific
- Use an async pattern: OpenClaw queues the request and POSTs the result back to a second webhook endpoint
- n8n has no timeout by default — switch to n8n for long-running tasks
-
Build the message string dynamically in your automation tool using the trigger data. For example in Zapier, set the message field to:
Summarize this email and extract action items: {{Email Body}}. In n8n, use expressions:{{"Summarize: " + $json.body}}. The key is that themessagevalue should contain everything OpenClaw needs to do its job.