Webhooks
Send form submissions automatically to external services like Zapier, Make, n8n, your CRM, or any custom endpoint.
Pro feature
What are Webhooks?
Webhooks allow QualifyForm to send data to other applications in real-time when someone submits your form. This enables powerful automations:
- 📧 Send lead data to your email marketing tool
- 💼 Create contacts in your CRM (HubSpot, Salesforce, etc.)
- 💬 Send notifications to Slack or Discord
- 📊 Add rows to Google Sheets or Airtable
- 🔄 Trigger custom workflows with Zapier or Make
Setting Up Webhooks
Open the Webhooks tab
In the form builder, click on the Webhooks tab in the left sidebar.
Add a new webhook
Click "Add webhook" and enter:
- Name: A friendly name (e.g., "Send to HubSpot")
- URL: The webhook endpoint URL
- Events: When to trigger (usually "On submission")
Configure headers (optional)
Add custom headers if your endpoint requires authentication:
{
"Authorization": "Bearer your-api-key",
"X-Custom-Header": "custom-value"
}Add a webhook secret (recommended)
Set a secret to verify webhook authenticity. QualifyForm will send it in the X-Webhook-Secret header.
Test the webhook
Click "Test" to send a sample payload. Check that your endpoint receives the data correctly.
Payload Format
Webhooks send a JSON payload with all form submission data:
{
"event": "form.submitted",
"form_id": "abc123",
"form_title": "Lead Qualification Form",
"response_id": "resp_xyz789",
"submitted_at": "2025-01-15T10:30:00Z",
"answers": {
"name": "John Smith",
"email": "john@company.com",
"company": "Acme Inc",
"budget": "$10k - $25k",
"timeline": "Within 30 days",
"role": "Decision maker"
},
"metadata": {
"utm_source": "facebook",
"utm_campaign": "q1_campaign",
"referrer": "https://google.com"
},
"pixel_fired": true
}Integration Examples
Zapier
Create a Zap with "Webhooks by Zapier" as the trigger.
- Create a new Zap → Trigger: "Webhooks by Zapier" → "Catch Hook"
- Copy the webhook URL from Zapier
- Paste the URL in QualifyForm's webhook settings
- Test the connection and map fields to your action
Make (Integromat)
Use the Webhooks module as the scenario trigger.
- Create scenario → Add module: "Webhooks" → "Custom webhook"
- Create a webhook and copy the URL
- Add the URL to QualifyForm
- Run the scenario once to determine data structure
Custom API Endpoint
Build your own endpoint to process submissions.
app.post('/webhooks/qualifyform', (req, res) => {
// Verify webhook secret
const secret = req.headers['x-webhook-secret']
if (secret !== process.env.WEBHOOK_SECRET) {
return res.status(401).json({ error: 'Invalid secret' })
}
// Process the submission
const { answers, pixel_fired, response_id } = req.body
// Your logic here...
console.log('New submission:', answers)
res.status(200).json({ received: true })
})Retry Policy
QualifyForm automatically retries failed webhook deliveries:
- Attempt 1Immediate
- Attempt 2After 1 minute
- Attempt 3After 5 minutes
- Attempt 4After 30 minutes
- Attempt 5After 2 hours