Leads from your CRM
Connect HubSpot on the dashboard's Integrations page, in live. In test, connect the Test CRM: it needs no account, and you edit its contacts there. New contacts become leads, changes follow, and a contact deleted in the CRM deletes its lead. A contact with no usable phone is skipped and counted.
| Lead field | From |
|---|---|
phone | The first mapped property with a usable number |
name | The mapped properties, joined |
timezone | The mapped property. With none, the lead isn't dialed |
crmRef | The record's ID |
recordUrl | The record's page |
fields | Only the properties you choose in the field mapping |
Consent has a mapping of its own: see Consent.
What happens to a lead is your code. A campaign's onLead gets synced leads like any others:
export const renewals = defineCampaign('renewals')
.onLead((lead, c) => (lead.fields.lifecyclestage === 'customer' ? c.enroll() : c.skip()))
.goal((lead) => lead.fields.lifecyclestage === 'customer')
.call(sales);A change arrives within seconds of the webhook. Customer-chosen fields, and anything a webhook missed, take up to 15 minutes, and a missed delete up to an hour. If you need a value that's fresher than that at the moment of dialing, read it from the CRM in a .call handler, using lead.crmRef.
Calls that came from a synced lead are logged on the contact, with the outcome, the disposition, the rep's notes and a link to the call page. We never write to a contact. A sync problem doesn't slow a dial; it shows on the connection, with the last error.