Webhook event: lead.converted
The payload Cooledge sends when a lead becomes an active opportunity.
lead.converted
Sent once when a lead becomes an active opportunity: the first quote or job is created for it, or it is qualified manually. This is the lead moving out of the new pile and into real work in progress. It does not mean the deal is won. The win is reported separately by lead.won. Delivered to your webhook subscriptions. Deliveries are at-least-once, so dedupe on X-Cooledge-Event-Id.
Envelope
Every event shares the flat envelope: event_type, version ("v1"), event_id, business_id, occurred_at, plus the fields below. See the events overview for the envelope detail and webhooks for signature verification and delivery semantics.
Fields
| Field | Type | Notes |
|---|---|---|
lead_id | string | UUID of the lead that became an opportunity. |
customer_id | string or null | UUID of the linked customer, when one is set. Null otherwise. |
converted_via | string | What moved the lead into the opportunity stage: quote, job or manual. |
quote_id | string or null | UUID of the quote that converted the lead. Set when converted_via is quote, otherwise null. |
job_id | string or null | UUID of the job that converted the lead. Set when converted_via is job, otherwise null. |
external_ghl_opportunity_id | string or null | The matching GoHighLevel opportunity id. Agencies match lead events on this field. |
The lead converts once. A lead that already has a quote or job does not re-emit this event when more work is added.
Example
{
"version": "v1",
"event_type": "lead.converted",
"event_id": "c1a4e672-8b35-4d09-9f21-7e0c3a8d1b46",
"business_id": "a7f3c9d1-2e84-4b6f-8c01-5d9e2a1f7b30",
"occurred_at": "2026-06-17T04:42:18.205Z",
"lead_id": "2f6d9a18-4c73-4e85-bf02-7a1e5c8d3b96",
"customer_id": "8c3e1a72-5d49-4b06-9f81-2e7a0c4d6b18",
"converted_via": "quote",
"quote_id": "6a2c9e74-1d38-4b05-8f72-3e1a0c5d9b48",
"job_id": null,
"external_ghl_opportunity_id": "pT8wK3rN6vM1jQ5d"
}
See webhooks for signature verification and delivery semantics, and all events.
Need a hand with an integration? Contact support