Pro Feature

Webhooks

Send form submissions automatically to external services like Zapier, Make, n8n, your CRM, or any custom endpoint.

Pro feature

Webhooks are available on the Pro plan. Upgrade now to unlock this 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:

Custom Headersjson
{
  "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.

Always validate the webhook secret on your server to prevent unauthorized requests.

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:

Webhook Payloadjson
{
  "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

Zapier

Create a Zap with "Webhooks by Zapier" as the trigger.

  1. Create a new Zap → Trigger: "Webhooks by Zapier" → "Catch Hook"
  2. Copy the webhook URL from Zapier
  3. Paste the URL in QualifyForm's webhook settings
  4. Test the connection and map fields to your action
Make

Make (Integromat)

Use the Webhooks module as the scenario trigger.

  1. Create scenario → Add module: "Webhooks" → "Custom webhook"
  2. Create a webhook and copy the URL
  3. Add the URL to QualifyForm
  4. Run the scenario once to determine data structure
🔧

Custom API Endpoint

Build your own endpoint to process submissions.

Example: Express.js endpointjavascript
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

Important

Make sure your endpoint returns a 2xx status code. Non-2xx responses will trigger retries.