If you're still manually reading contact form submissions and copy-pasting data into a CRM, spreadsheet, or Slack channel โ you're spending time on work that should happen automatically.
Webhooks make this possible. Every time someone submits your form, a webhook fires an instant HTTP request to whatever tool you've connected โ Make, n8n, Zapier, your own server, or anything else that accepts a POST request.
This guide walks through connecting IntentForm to each of the three major automation platforms, plus explains the exact payload format so you can map fields precisely.
What is a webhook and why does it matter for forms?
A webhook is a real-time notification your form sends to another application the moment something happens. Unlike polling (checking every few minutes whether anything new came in), webhooks fire immediately.
For contact forms, this means:
- A lead submits your form โ your CRM is updated within seconds
- A high-intent submission arrives โ a Slack message is sent to your sales team instantly
- A new support enquiry comes in โ a Trello card is created automatically
No delay. No manual copy-paste. No missed leads.
The IntentForm webhook payload
Before connecting to any platform, it helps to understand what data IntentForm sends. Here's the exact payload format:
{
"event": "submission.created",
"intentform_version": "1",
"form_id": "your-form-uuid",
"form_name": "Solar Enquiry Form",
"submission_id": "submission-uuid",
"submitted_at": "2026-05-01T10:30:00Z",
"data": {
"name": "Ananya Sharma",
"email": "[email protected]",
"phone": "+91 98765 43210",
"message": "I want a 5kW rooftop system for my home in Pune",
"intent": "Get a Quote",
"sentiment": "Positive",
"urgency": "High",
"spam": false,
"ai_summary": "Residential solar installation enquiry, 5kW, Pune location, ready to proceed",
"custom_fields": {
"budget": "โน3โ4 lakhs",
"timeline": "Before monsoon"
}
}
}
The intent, sentiment, urgency, and ai_summary fields are AI-generated for every submission โ so your automation workflows have rich context to work with, not just raw form data.
Every request also includes an X-IntentForm-Signature header โ a HMAC-SHA256 signature you can use to verify the request is genuinely from IntentForm.
Connecting to Make.com
Step 1: Create a webhook trigger in Make
- Open Make and create a new scenario
- Add a Webhooks module as your trigger
- Select Custom webhook
- Click Add and give it a name (e.g. "IntentForm Lead")
- Copy the generated webhook URL
Step 2: Add the webhook in IntentForm
- Go to your form โ Integrations tab โ Webhooks section
- Paste the Make webhook URL into the input field
- Click + Add
- Copy your signing secret when prompted (store it securely โ it's shown once)
Step 3: Test the connection
- Click the Test button next to your webhook in IntentForm
- Switch back to Make โ you should see a test payload arrive
- Click OK in Make to confirm the data structure
- Now you can map any field from the payload to downstream modules
Step 4: Build your workflow
From here, you can connect to any Make module โ Google Sheets, HubSpot, Notion, Slack, Gmail, and hundreds more. Common setups:
data.intent= "Get a Quote" โ add to CRM as a hot leaddata.urgency= "High" โ send a Slack alert to your sales team- All submissions โ append a row to Google Sheets
Connecting to n8n
Step 1: Add a Webhook node
- Create a new n8n workflow
- Add a Webhook node as the trigger
- Copy the Production URL (use this, not the test URL, for live data)
Step 2: Add in IntentForm
Same process as Make โ paste the URL into the Integrations tab, add the webhook, copy your secret.
Step 3: Activate and test
- Click Test in IntentForm
- Back in n8n, the incoming data will appear in the Webhook node output
- Add downstream nodes โ n8n has native integrations with most CRMs, databases, and communication tools
Using the AI fields in n8n:
One common pattern is routing based on urgency:
IF {{ $json.data.urgency }} = "High"
โ Send Slack message: "๐ฅ High-urgency lead: {{ $json.data.name }} โ {{ $json.data.ai_summary }}"
ELSE
โ Add to a daily digest spreadsheet
The ai_summary field is particularly useful here โ it gives you a clean one-line summary of the submission in human-readable English, which makes automated notifications actually readable.
Connecting to Zapier
Step 1: Create a Zapier trigger
- Create a new Zap
- Choose Webhooks by Zapier as the trigger app
- Select Catch Hook as the trigger event
- Copy the webhook URL provided
Step 2: Add in IntentForm
Paste the URL into the Integrations tab and save. Test it.
Step 3: Set up your action
Zapier supports 6,000+ apps. Once the test payload arrives, you can map any field to your action. Popular setups:
- New submission โ create a contact in HubSpot or Salesforce
- Submission with
data.spam = falseโ add to Mailchimp list - Any submission โ create a task in Asana or Jira
Verifying webhook signatures
If you want to confirm that incoming webhook requests are genuinely from IntentForm (recommended for production), verify the signature:
import hmac
import hashlib
def verify_signature(payload_body: bytes, secret: str, signature_header: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), payload_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
The secret is the signing secret shown when you created the webhook. The signature_header is the value of X-IntentForm-Signature in the incoming request.
What to build next
Once your webhook is live, the most impactful automations to build first:
- Lead โ CRM โ every non-spam submission creates or updates a contact record
- High intent โ instant alert โ submissions scored as High Urgency trigger a Slack/WhatsApp notification
- AI summary โ daily digest โ a summary of all submissions from the past 24 hours sent to your team each morning
Webhooks on IntentForm are available on all plans, including the free tier.