# Connect Your CRM

> Send missed call leads to Salesforce, Zoho CRM, HubSpot, LeadSquared or an in-house CRM - set up for you on request, or build it yourself with the webhook and API.

Source: https://edesy.in/docs/missed-call/guides/connect-your-crm

Missed-call leads reach any CRM through the signed `call.missed` [webhook](https://edesy.in/docs/missed-call/guides/webhook-setup) and the [REST API](https://edesy.in/docs/missed-call/api-reference). You have two options.

## Option 1: we set it up for you

Tell us your CRM and how you want leads created, and we connect it for your account, usually within a few days, using our webhook and API. This covers Salesforce, Zoho CRM, HubSpot, LeadSquared, Freshsales, Pipedrive, Bitrix24, Odoo and in-house CRMs. Request it from the [CRM integration page](https://edesy.in/missed-call-service/crm-integration).

This is a done-for-you connection built on the webhook, not an app from a CRM marketplace.

## Option 2: build it yourself

Point the webhook at a small service of your own (or an automation tool you already use) that creates the record in your CRM:

1. Receive the `call.missed` POST and [verify the signature](https://edesy.in/docs/missed-call/guides/verify-webhook-signature).
2. Reply 2xx straight away.
3. Skip `call_sid` values you have already processed ([why](https://edesy.in/docs/missed-call/guides/retries-and-replay)).
4. Create or update the lead using your CRM's own API.

### Field mapping

| Missed call field | Typical CRM field |
|---|---|
| `data.from` | Mobile / Phone (search on it first if you want one record per caller) |
| `data.phone_number_name` | Lead source or campaign |
| `data.to` | Tracking number, or a custom field |
| `data.call_sid` | External ID (for de-duplication) |
| `timestamp` | Created date or first-contact time (UTC) |

Most CRMs also need a name or last name on a lead. A missed call has only a number, so use a placeholder such as "Missed call lead" and let your team update it after calling back.

### Example (Node.js)

```js
// After verifying the signature and replying 200:
const { from, call_sid, phone_number_name } = event.data;
if (await alreadyProcessed(call_sid)) return;

await yourCrm.createLead({
  lastName: "Missed call lead",
  phone: from,
  leadSource: phone_number_name,
  externalId: call_sid,
});
```

### Catch up after downtime

If your connector was down, [replay failed deliveries](https://edesy.in/docs/missed-call/guides/retries-and-replay#replay), or pull the gap with [`GET /missed-calls`](https://edesy.in/docs/missed-call/api-reference/list-missed-calls) using `start_date` and `end_date`.

## No CRM yet?

Use [Edesy CRM](https://edesy.in/docs/missed-call/guides/send-leads-to-edesy-crm). It has a free plan and takes missed calls with no code.
