Integrations — sync your leads with your CRM
What it is
Section titled “What it is”Integrations connect ZeroChats to the tools you already work in. Every time someone messages you on Instagram or WhatsApp, ZeroChats creates the contact in your CRM automatically — no manual exports, no copy-pasting.
Today you can connect these destinations:
| Integration | What it creates in your tool |
|---|---|
| GoHighLevel | A contact, with the lead’s tags as native GHL tags. |
| HubSpot | A contact, with the lead’s tags recorded in a note. |
| Airtable | A record in a ZeroChats Leads table inside the base you choose. |
| Custom Webhook | A JSON POST to any URL you choose, to plug in any other tool. |
You can have several connected at once: the lead is sent to all of them.
The Custom Webhook works differently from the rest: it doesn’t create contacts in a specific tool, it hands you the raw event so you can do whatever you want with it (n8n, Make, Zapier or your own backend). It has its own page: Custom Webhook.
How to connect
Section titled “How to connect”The three CRMs connect from the same place, and none of them needs an API key — you authorize with your account.
-
Go to Business setup and open the Integrations tab. The tools are listed under CRM, webhooks and tracking, one card per integration.
-
Pick the tool and click its connect button (Connect to GoHighLevel, Connect to HubSpot or Connect to Airtable).
-
Authorize ZeroChats in the tool’s window. In GoHighLevel, choose the location you want to work with.
-
Come back to ZeroChats. The integration shows a Connected badge and starts syncing.
The Custom Webhook is set up from that same screen, but with its own steps: you’ll find them in Custom Webhook.
Airtable needs one extra step. After connecting, click Configure and choose the destination base. ZeroChats creates a table called ZeroChats Leads inside it, with the right columns (Name, Email, Phone, Instagram, Source, Tags). Until you pick a base, nothing syncs.
When a lead is synced
Section titled “When a lead is synced”Syncing is automatic and real time. There’s nothing to click and no scheduled batch to wait for. A lead reaches your CRM at these moments:
- On the first interaction: when they first write via DM or WhatsApp, or when they comment on a post or reel.
- When they get a tag, whether automatic or added by you. Only new tags are sent.
- When they move to another funnel stage: the CRM receives a
Status:tag followed by the stage, for exampleStatus: Bookedwhen they book orStatus: Paidwhen they pay. Tags accumulate, so the latest one tells you which stage they’re in. The full list is in Webhooks. - When their contact details show up: if they leave their email while booking a meeting, or share their email or phone number during the conversation, the CRM contact is updated with it. It works the same in all three CRMs.
How we identify each lead
Section titled “How we identify each lead”This part is worth understanding, because it explains something you’ll see with your own eyes inside your CRM.
Every CRM needs a primary key: a unique value that identifies each contact and keeps duplicates from piling up. That key is usually the email or the phone number.
WhatsApp is easy: the lead writes to you from their phone number, so that number is the primary key from the very first message. The contact is created with their real phone right away.
On Instagram we have neither an email nor a phone number. Someone sends you a DM and all you know about them is their username. But the CRM still demands a primary key before it will create the contact.
ZeroChats solves this by building one out of the only thing we have: we take the username and append @instagram.com.
Instagram username: martasolerprimary key: [email protected]That solves two problems at once. First, every lead gets a unique, stable key from second zero, so the contact can be created immediately. Second, seeing that email in your CRM tells you at a glance that this lead came from Instagram and hasn’t given you their real email yet.
What happens when the lead gives their real email
Section titled “What happens when the lead gives their real email”As soon as we get the real email — because they type it while booking a meeting, or share it in the conversation — we update the contact that already exists. The placeholder email is replaced by the real one, on the same record.
No new contact is created. Nothing is duplicated. It’s the same lead, with their history intact, now carrying their correct email.
1. Marta messages you on Instagram → contact created as [email protected]2. Marta books and leaves her email → the same contact becomes [email protected]That’s how GoHighLevel, HubSpot and Airtable all behave: as soon as the lead books and leaves their email, the record is updated. They don’t need to give their phone number too.
What about an Instagram lead’s phone number
Section titled “What about an Instagram lead’s phone number”While booking, the AI asks for the full name and email; the phone number only if you added it as a question before booking. Otherwise the number only reaches your CRM if the lead shares it on their own in the conversation: ZeroChats picks it up, saves it on the lead’s card and adds it to your CRM contact. If you need the phone number of every lead who books, add it as a question on your calendar.
Here too, no new contact is created: it’s the same record as always, with its history intact.
Which fields are synced
Section titled “Which fields are synced”| Field | GoHighLevel | HubSpot | Airtable |
|---|---|---|---|
| Name | ✅ | ✅ | ✅ (Name) |
| ✅ | ✅ | ✅ (Email) | |
| Phone | ✅ | ✅ | ✅ (Phone) |
| Instagram username | — | — | ✅ (Instagram) |
| Source channel | — | — | ✅ (Source) |
| Tags | Native tags | In a note | ✅ (Tags) |
HubSpot has no tags as such, so we write them as a timestamped note on the contact (Tags: interested, pricing). GoHighLevel does apply them as native tags, so you can filter and automate with them.
Best practices
Section titled “Best practices”- Connect the CRM before launching campaigns. Leads sync from the moment you connect, not retroactively. If you connect mid-campaign, earlier leads won’t show up.
- Use tags to segment. Since ZeroChats tags travel to the CRM, you can build automations there that fire on what the AI picked up in the conversation.
- Filter
@instagram.comout of your email sequences. A simple “email does not contain@instagram.com” filter saves you from bounces. - In Airtable, don’t rename the columns of the
ZeroChats Leadstable. The integration writes against those names.
Limitations
Section titled “Limitations”- Syncing is one-way: from ZeroChats to the CRM, never the other way around.
- Funnel stage arrives as a tag, not as a native CRM stage. If you want to trigger an automation when a lead books, filter on the
Status: Bookedtag. - There’s no custom field mapping. The fields sent are the ones in the table above.
- In Airtable, ZeroChats creates the table. You can’t point the integration at a table you already have.
- A lead with no name is synced under their Instagram username as the contact name. Only a lead with neither name nor username known is left unsynced.
- In GoHighLevel, Instagram leads keep their placeholder email until they book a call and leave their email.