How to Connect Kixie to Close
The no-code version in Zapier
- Catch the call: add a Webhooks by Zapier Catch Hook and paste its URL into a Kixie End Call webhook.
- Find the lead: use the Close Find Lead action to search by the customer’s phone number.
- Log the call: use the Close Create Call action with the lead, direction, duration, and recording URL from Kixie.
The rest of this guide explains each step in detail, so you can build it in any tool and handle the edge cases. Kixie does not have a native Close connector, so you connect the two yourself. This guide covers the two jobs most teams need first: getting every Kixie call into Close as a call activity, and getting every Kixie text into Close as an SMS activity. Both use the same pattern. Kixie sends an event the moment something happens, a small automation looks up the matching lead in Close, and the automation writes the activity through the Close API.
You can build it in Zapier, Make, n8n, or your own code. The field mapping is the same in every tool, so this guide describes the flow once and notes where each tool differs.
Before You Start
- Kixie Professional plan or higher. Kixie webhooks and the Kixie API start on Professional.
- A Kixie admin or manager login. Webhooks live under Manage, Automations, Webhooks in the Kixie dashboard. The Kixie API key and Business ID live under Manage, Account Settings, Integrations. If you have never used the Kixie API, Kixie Support may need to enable your key first.
- A Close API key. Create one in Close under Settings, Developer, API Keys. Close API keys belong to a specific user, so create it on an account that should appear as the integration, not on a rep who might leave.
- An automation tool, or a small server you control, to receive Kixie webhooks.
Log Kixie Calls in Close
Step 1: Catch the End Call Event
Create a webhook in Kixie under Manage, Automations, Webhooks, and choose the End Call event. Paste in the receiving URL from your tool: a Catch Hook in Zapier, a custom webhook in Make, or a Webhook node in n8n. Kixie then sends the call details as soon as each call ends.
The fields that matter for Close are in the callDetails object of the payload:
calltype: outgoing or incomingcallstatus: answered or missedduration: length in secondstonumber164andfromnumber: both sides of the callrecordingurl: the call recordingcalldateandcallid: when it happened and a unique ID- the Kixie rep’s name and email
Step 2: Find the Lead in Close
Kixie sends a phone number, but Close files calls on a lead. So the automation needs the lead ID and, ideally, the contact ID before it can log anything. The customer’s number is tonumber164 on outgoing calls and fromnumber on incoming calls, so check calltype and pick the right one.
In Zapier, use the Close Find Lead action and search by phone. In Make, n8n, or code, use Close’s Advanced Filtering endpoint, POST /api/v1/data/search/, and search contacts by their contact_phone phone field. The contact result tells you the lead it belongs to.
Decide up front what happens when nothing matches. Most teams either create a new lead with that number or skip the call and send an alert. Creating leads is convenient, but every wrong number and robocall becomes a lead.
Step 3: Match the Rep
Close attributes a call to a Close user through user_id. Kixie sends the rep’s email, so look the rep up once in Close’s Users API and store a simple email to user ID table in your automation. Rep lists change rarely, so a lookup table is faster and uses fewer API calls than searching on every call.
Step 4: Log the Call Activity
Send the call to Close’s Log an external Call activity endpoint, POST /api/v1/activity/call/, which Close provides for calls made outside its own calling.
| Close field | Value from Kixie |
|---|---|
lead_id, contact_id |
From the Step 2 lookup |
user_id |
From the Step 3 table, using the rep’s email |
direction |
outbound when calltype is outgoing, inbound when incoming |
phone |
The customer’s number, in E.164 format |
duration |
duration in seconds |
status |
completed for answered calls, no-answer for missed calls |
recording_url |
recordingurl. Close only accepts https links. |
activity_at |
calldate, so the call sits at the right point on the timeline |
note_html |
Optional. A line with the Kixie call ID makes calls easy to trace later. |
Close records calls logged this way with the source External, which separates them from calls placed through Close’s own calling.
Step 5: Add Call Outcomes
If your reps save call outcomes in the Kixie dialer, add a second webhook for the Disposition event. Close stores outcomes as outcome IDs that your team defines in Close, not as free text. Create matching outcomes in Close, keep a table of Kixie outcome name to Close outcome ID, and update the logged call with outcome_id. Because outcomes can arrive after the call is logged, save the Close activity ID from Step 4 against the Kixie call ID so the update finds the right call.
Log Kixie Texts in Close
Texting follows the same pattern with the SMS webhook. Kixie sends the message text, its direction, the date, the rep’s number, and the customer’s number for every text sent or received.
- Create a Kixie webhook for the SMS event and point it at your tool.
- Find the lead by the customer’s number, exactly as in the call flow.
- Send the text to Close’s Create an SMS activity endpoint,
POST /api/v1/activity/sms/. Use statussentfor outgoing texts andinboxfor incoming ones, so Close logs them without trying to send anything. Map the message totext, the customer’s number toremote_phone, the rep’s Kixie number tolocal_phone, and setdirection.
One thing to test before you roll this out: Close’s documentation says the number used to send an SMS must be a Close internal number. When you are only logging a text that Kixie already sent, test whether Close accepts your Kixie number as local_phone. If it does not, the fallback is to log each text as a note on the lead instead.
Make It Reliable
- Skip duplicates. Store each Kixie call ID and message ID after logging it and skip any you have already seen, so a retried webhook does not log the same call twice.
- Respect Close rate limits. If Close returns a 429 response, wait for the number of seconds it specifies before retrying. Close applies a limit to each API key and a higher limit across your whole organization, so give this integration its own key.
- Normalize phone numbers. Store and search numbers in E.164 format, like +16505551234, in both systems. If the formats differ, the lookup can miss a lead that is really there.
- Watch for failures. Send a Slack message or an email on any failed step, so a broken key or renamed field does not quietly stop logging.
What Else You Can Connect
The same building blocks work in the other direction. Close’s Zapier triggers, such as New Lead in Smart View or New Lead in Status, can feed Kixie’s Zapier actions: Add to PowerList, Add to Cadence, Make a Call, and Send SMS. That covers dialing a Close Smart View in the Kixie PowerDialer, or calling a new lead the moment it arrives. See the Kixie and Close integration overview for the full list of connection options.