Automatically push enriched leads to your CRM, trigger webhooks, or pipe data into automation tools like Zapier, Make, and n8n — all from your LeadZap dashboard.
LeadZap integrations fire automatically when a lead generation job completes. Every lead in the job — with enriched emails, phone numbers, social URLs, and people data — is delivered to your configured endpoint or CRM.
You can set up integrations from the Integrations tab in your dashboard. Each user can configure up to 10 integrations. All enabled integrations are triggered on every job completion.
| Type | Use Case |
|---|---|
webhook | HTTP POST to any URL — works with Zapier, Make (Integromat), n8n, custom backends |
hubspot | Create contacts in HubSpot CRM automatically |
pipedrive | Create organisations, persons, and deals in Pipedrive CRM |
Send a JSON payload of all leads to any HTTP endpoint whenever a job finishes. Perfect for connecting to Zapier, Make, n8n, or your own backend.
Tip: Use the Test button on each integration card to send a sample payload before running a real job.
Automatically create contacts in your HubSpot CRM for every lead in a completed job.
| HubSpot Field | LeadZap Field |
|---|---|
email | Primary email |
firstname / lastname | Owner name (split) |
company | Business name |
phone | Phone number |
website | Website URL |
city | City |
state | State/Region |
industry | Industry |
Note: Contacts are created in batches of 100. Leads without an email address are skipped (HubSpot requires email). Duplicates are handled by HubSpot's deduplication rules.
Create organisations, persons, and optionally deals in Pipedrive for each lead.
Pipeline ID: You can find your Pipeline ID in Pipedrive under Settings → Pipelines. It's the numeric ID in the URL (e.g., /pipeline/1 → ID is 1).
When a job completes, the webhook receives a POST request with the following JSON body:
{
"event": "job.completed",
"job_id": 42,
"total_leads": 25,
"timestamp": "2026-02-16T12:00:00.000Z",
"leads": [
{
"business_name": "Acme Plumbing",
"industry": "plumbing",
"city": "Austin",
"state": "TX",
"phone": "+15125551234",
"phone_2": "+15125555678",
"email": "john@acmeplumbing.com",
"email_2": "info@acmeplumbing.com",
"email_3": null,
"email_verified": 1,
"email_source": "scraped+icypeas",
"website": "https://acmeplumbing.com",
"google_rating": 4.8,
"google_review_count": 127,
"owner_name": "John Smith",
"business_description": "Full-service plumbing...",
"facebook_url": "https://facebook.com/acmeplumbing",
"instagram_url": "https://instagram.com/acmeplumbing",
"linkedin_url": null,
"twitter_url": null,
"youtube_url": null,
"people": [
{ "name": "John Smith", "role": "Owner" },
{ "name": "Jane Doe", "role": "Office Manager" }
]
}
]
}
| Header | Value |
|---|---|
Content-Type | application/json |
X-LeadZap-Event | job.completed |
X-LeadZap-Signature | HMAC-SHA256 hex digest (only if signing secret is set) |
User-Agent | LeadZap-Webhook/1.0 |
If you set a Signing Secret on your webhook, every payload is signed with HMAC-SHA256. This lets your server verify that the request genuinely came from LeadZap.
import crypto from 'crypto';
function verifySignature(body, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// In your webhook handler:
const rawBody = await request.text();
const sig = request.headers.get('X-LeadZap-Signature');
if (!verifySignature(rawBody, sig, YOUR_SECRET)) {
return new Response('Invalid signature', { status: 401 });
}
const data = JSON.parse(rawBody);
import hmac, hashlib
def verify_signature(body: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
| Issue | Fix |
|---|---|
| Test button shows "error" | Check your URL or API key is correct. For webhooks, ensure the endpoint accepts POST requests. |
| Leads not appearing in HubSpot | Ensure your Private App has the crm.objects.contacts.write scope. Leads without email are skipped. |
| Pipedrive deals not created | Verify the Pipeline ID is correct. Check Pipedrive API limits. |
| Webhook returns 4xx/5xx | LeadZap logs the HTTP status in last_status. Check your server logs for errors. |
| Duplicate contacts | HubSpot deduplicates by email. In Pipedrive, check "Merge duplicates" settings. |
Need help? Email us at support@leadzap.dev with your job ID and integration name — we'll check the logs.