# Lead events

> lead.created — a visitor left contact details.

Source: https://www.hey.support/docs/webhooks/events/lead

---

## `lead.created`

Fires when contact details are captured, from any of the routes that can produce a lead:

* the visitor submits the **lead form**,
* they leave details as part of a **human handoff**,
* the agent **auto-captures** an address the visitor typed in conversation,
* a lead is created through the [API](/docs/api/leads/create-lead).

```json
{
  "lead": {
    "id": 3312,
    "chatbot_id": 17,
    "conversation_id": 8214,
    "name": "Ada Lovelace",
    "email": "ada@example.com",
    "phone": null,
    "company": "Analytical Engines",
    "source": "widget",
    "status": "new",
    "created_at": "2026-08-26T10:02:00.000Z"
  }
}
```

Every field except `id`, `chatbot_id`, `status` and `created_at` can be `null` — what you get depends on which fields the agent was configured to ask for, and what the visitor chose to give.

## Deduplication

A conversation produces **at most one** lead. If details are captured again in the same conversation, the existing lead is updated rather than a second one created, and no second `lead.created` fires.

Across conversations there is no dedupe: the same person returning next week produces a new lead with a new `conversation_id`. Match on `email` if you need to collapse those.

## Bookings do not double-fire

When a visitor books a meeting, we create the lead silently and fire **`booking.created` only**. The booking is the event worth acting on, and firing both would make every meeting look like two things happening.

If you want a record for every captured contact including bookings, subscribe to [`booking.created`](/docs/webhooks/events/booking) as well.
