Configure Outbound Webhook
How to configure a generic webhook to send qualified leads to any external system.
What is the outbound webhook?#
The outbound webhook allows you to send qualified leads to any external system via HTTP POST. Unlike native integrations (HubSpot, Pipedrive, etc.), the webhook is generic and works with any endpoint that accepts JSON.
If you use Make, Zapier, or n8n, we recommend using the dedicated integrations with step-by-step guides: Connect Make, Connect Zapier, Connect n8n.
Common use cases:
- Feed a CRM that doesn't have a native integration
- Send data to an internal company system
- Trigger automations on platforms like Pipedream or others
Configure the webhook#
Access Outbound Integrations
In the sidebar, click Send Leads. Find the Webhook card and click "Integrate".
Configure the destination URL
Enter the URL of the endpoint that will receive the data:
- URL: the full URL including protocol (e.g.,
https://hooks.zapier.com/hooks/catch/123456/abcdef/) - The URL must accept POST requests with a JSON body
The URL must use HTTPS. HTTP endpoints (without SSL) are not accepted for security reasons.
Configure headers (optional)
If the destination endpoint requires authentication or custom headers, add them:
- Click "Add header"
- Enter the header name and value (e.g.,
Authorization: Bearer YOUR_TOKEN) - You can add multiple headers
Common examples:
| Header | Value | Use |
|---|---|---|
| Authorization | Bearer token123 | Token authentication |
| X-API-Key | your-key | API key authentication |
| X-Custom-Header | value | Custom header |
Name the integration
Configure:
- Integration name: give it a descriptive name (e.g., "Zapier Webhook", "Internal CRM")
Activate and test
Activate the integration and click "Send test lead". Check in the destination system that the data arrived correctly.
Payload format#
When a qualified lead is sent, the request body follows this JSON format:
{
"event": "lead.qualified",
"lead": {
"id": "lead-uuid",
"email": "john@company.com",
"name": "John Smith",
"phone": "+5511999999999",
"company": "Company XYZ",
"score": 85,
"status": "qualified",
"custom_fields": {
"job_title": "Sales Director",
"city": "New York"
},
"verifications": {
"email_valid": true,
"phone_valid": true,
"cnpj_valid": true,
"cnpj_status": "Active",
"ip_risk_score": 5,
"ip_proxy": false,
"ip_vpn": false
},
"created_at": "2026-02-23T14:30:00Z",
"qualified_at": "2026-02-23T14:30:02Z"
},
"list": {
"id": "list-uuid",
"name": "Google Ads Campaign"
}
}
The custom_fields field contains all extra fields sent in the inbound webhook that were not mapped to standard fields. The verifications field contains the result of each automatic verification.
Timeout#
The outbound webhook has a timeout of 10 seconds. If the destination endpoint does not respond within this period, the request is considered failed and enters the retry system.
If your endpoint needs more time to process, configure it to return 200 OK immediately and process the data asynchronously (in the background).
Automatic retry#
If the dispatch fails (timeout, 5xx error, connection refused), Zero Bad Leads automatically retries:
| Attempt | Interval |
|---|---|
| 1st | Immediate |
| 2nd | After 1 minute |
| 3rd | After 5 minutes |
| 4th | After 15 minutes |
| 5th | After 30 minutes |
After 5 unsuccessful attempts, the lead is marked as "error" in the logs.
4xx errors (such as 400 Bad Request or 401 Unauthorized) are not retried, as they indicate a configuration problem. In these cases, fix the URL or headers and resend manually.
Usage examples#
Zapier#
- Create a Zap with the "Webhooks by Zapier" > "Catch Hook" trigger
- Copy the URL generated by Zapier
- Paste it in the webhook configuration in Zero Bad Leads
- Send a test lead so Zapier detects the data format
- Configure the actions in Zapier (e.g., create a Google Sheets record, send an email)
Make (Integromat)#
- Create a scenario with the "Webhooks" > "Custom webhook" module
- Copy the URL generated by Make
- Paste it in the webhook configuration in Zero Bad Leads
- Send a test lead so Make maps the data structure
- Add the desired action modules
Internal system (custom API)#
- Create a POST endpoint in your API that accepts JSON
- Configure authentication via header (e.g.,
Authorization: Bearer your-token) - Paste the endpoint URL in the webhook configuration
- Return status
200to confirm receipt
Troubleshooting#
Timeout error (10s):
The destination endpoint is taking too long to respond. Configure it to return 200 OK immediately and process in the background.
401 Unauthorized error: The authentication headers are incorrect. Check the token or API key configured.
404 Not Found error: The destination URL is incorrect. Confirm that the endpoint exists and is active.
Data arrives incomplete at the destination:
Check that the destination system is configured to receive the content-type application/json. Some systems need explicit configuration to parse JSON.
Related articles
How to Connect HubSpot
Step-by-step guide to integrate HubSpot CRM with Zero Bad Leads and automatically send qualified leads.
Dispatch Filters
How to configure filters to send only the right leads to each outbound integration.
How to Connect Make
Step-by-step guide to send qualified leads from Zero Bad Leads to Make (Integromat) scenarios.