# Sync attendees to your CRM (/docs/guides/crm)



Connect Eventlayer webhooks to your CRM’s API.

<DocsFlow label="CRM sync" steps="[&#x22;Attendee created&#x22;, &#x22;Your webhook handler&#x22;, &#x22;CRM contact&#x22;]" />

## 1. Subscribe to attendee changes [#1-subscribe-to-attendee-changes]

In **Dashboard → Webhooks**, subscribe to attendee.created and attendee.updated.
Follow the [webhook guide](/docs/guides/webhooks) to verify incoming requests.

## 2. Map the contact fields [#2-map-the-contact-fields]

Use the verified event’s attendee data in your CRM’s create or update call.

```ts title="CRM mapping · after webhook verification"
if (
  event.event_type === "attendee.created" ||
  event.event_type === "attendee.updated"
) {
  const contact = {
    externalId: event.data.id,
    name: event.data.name,
    email: event.data.email,
  };

  // Send contact to your CRM using its API.
}
```

Save the Eventlayer attendee ID alongside your CRM contact ID. Attendees belong
to an event, so your application decides how to match people across events.

## 3. Add attendance [#3-add-attendance]

Subscribe to ticket.checked\_in to record attendance. Link that ticket to its
attendee, then update the contact’s event history using the ticket ID as the
participation key.

Deduplicate webhook processing by event.id. Use create-or-update operations in
your CRM so retries do not create duplicate records. See
[webhook delivery](/docs/webhooks) for retries and replay.

## Next steps [#next-steps]

[Send registration and ticket emails](/docs/guides/email).
