How to integrate 3CX with your CRM in 2026
The Connect Zero team · 23 May 2026
Last updated: 23 May 2026.
Integrating 3CX with a CRM means streaming phone events (call started, call ended, missed call, recording link) from the 3CX PBX into the right contact record in the CRM, in near real time, without anyone typing notes by hand. In 2026 the practical path is a marketplace app that talks to the 3CX Call Control API on one side and the CRM API on the other, with extension-to-user mapping in the middle. The 3CX API requires v18 or later and an API user with the Recording Manager and Reports User roles, per the 3CX API reference.
Why bother integrating 3CX with the CRM at all
Sales reps spend roughly one in five working hours on manual data entry tasks, including writing up phone call summaries, per the Salesforce State of Sales report 2024. On a five-person team, that is a full working day of typing lost each week. The integration removes that step by writing the call against the matching contact automatically.
Three other reasons agencies and in-house teams cite when they ask for the bridge:
- New hires open a contact record and hear the last call, instead of asking around.
- Missed calls fire a workflow before the lead cools off, instead of waiting for someone to spot them in a call log.
- Managers listen back to recordings inside the contact, not from a separate PBX portal.
What "integrating 3CX with a CRM" actually involves
There are three working parts and most setup time goes into the third one.
- The 3CX side. A v18 or v20 PBX with an API user that holds the Recording Manager and Reports User roles, or System Administrator. Hosted 3CX, PBX Express and self-managed all work, with one bearer-token caveat for PBX Express noted in 3CX documentation.
- The CRM side. The CRM needs an API path to create or update contact records, attach an activity or call event, and store an audio link. Modern marketplace CRMs, HubSpot, Salesforce, Zoho and Pipedrive all expose this through their public APIs.
- The bridge in the middle. Something has to listen to 3CX call events, look up which extension belongs to which CRM user, find the matching contact by phone number, write the event, and attach the recording link. This is where DIY builds bog down because the 3CX event format and the CRM call schema are different shapes.
- Confirm the 3CX licence and version. Open the 3CX admin console, check the version banner, and confirm you are on v18 build 11 or later for stable Call Control API access (v20 is preferred). Licence requirements per integration tier are documented by 3CX and we cover the practical implications in our 3CX licence requirements guide.
- Create a dedicated 3CX API user. Add a new user (not a phone extension), assign the Recording Manager role plus the Reports User role, generate an API key. Never reuse an admin login. Document the key in a password manager, not in a build script.
- Confirm the CRM has API access enabled. For a marketplace CRM that uses location-level credentials, that means a location-level API key or marketplace OAuth app. For HubSpot or Salesforce, a private app or connected app with the call-event scope. For Zoho, an OAuth scope that includes
ZohoCRM.modules.calls.ALL. - Map every 3CX extension to a CRM user. This is the step DIY builds underestimate. Each extension that places calls needs a CRM user it can post activities against, otherwise calls land on an orphan record. The mapping table belongs in the bridge, not in the PBX.
- Pick the matching strategy for inbound calls. Match by exact phone number first, then a normalised E.164 fallback, then a last-five-digits fallback. Without normalisation you will miss roughly a third of mobile callers, because they save numbers in three formats.
- Decide what gets written: started, ended, or both. Most teams write a single record on
call.endedwith duration and recording link. Some workflow patterns (live notifications) want thecall.startedevent too. Connect Zero exposes both as base-licence triggers, plus a missed-call event. - Place a test call from a mapped extension to a known contact. Hang up, wait ten seconds, refresh the contact in the CRM. The call event should be there with the recording link attached. If it is not, check three things in order: extension mapping, contact-number normalisation, CRM API permissions.
- Roll out to the rest of the team. Add the remaining extensions to the mapping table, brief the team that they no longer need to type call notes (but should still log outcomes), and monitor failed events for the first week.
- Build it yourself with Make.com or Zapier if you want to wire up two webhooks for a single customer and you can live with the latency and the lack of recording handling. The 3CX community on Make has working starter templates. The maintenance load is higher than people expect because 3CX field names change between versions.
- Build it yourself in code if your team has a developer who already knows the 3CX Call Control API and the CRM API and has time to handle retries, queue backpressure, late recordings, and PBX restores. Plan for ongoing maintenance, not a one-off project.
- Install a marketplace app if you want it running in five minutes, you want recordings handled, and you want missed-call workflows in the base licence. Connect Zero's 3CX-to-CRM bridge is the option we build, priced at USD 39 per location per month plus a small per-call charge with no per-seat fee.
- They arrive late. 3CX writes the recording file after the call ends. A naive bridge that triggers on
call.endedfinds no recording yet, so it posts a call without one. Late-recording detection is its own piece of code. - They live on the PBX, not in the CRM. Most CRMs want an audio link, not a file. The bridge needs to expose a streaming URL the CRM can play back from.
- Permissions matter. The 3CX API user has to hold the Recording Manager role specifically. The Reports User role on its own will not let you fetch a recording file. We cover this in detail in our step-by-step guide to call recording in your CRM.
- Phone-number normalisation gaps. A contact is saved in the CRM as
0412 345 678and the inbound call arrives as+61412345678. The bridge fails to match and creates a duplicate contact. Fix: enforce E.164 normalisation in both directions and add a last-five-digits fallback. - Extension mapping drift. Someone gets a new extension and nobody updates the mapping table. Calls from that extension start landing on the previous owner's name. Fix: review the mapping table on the first of each month, automate the diff if your CRM has a staff directory the bridge can sync against.
- Missed-call timing race. A naive bridge fires the missed-call workflow before 3CX settles the call status. The customer gets an SMS, leaves a voicemail two seconds later, and now the team is dealing with two threads. Fix: wait for the settled status on the call event, not the first ring-out.
- Recording permission edge cases. A 3CX build update silently revokes a role; recordings stop attaching the next day. Fix: monitor for a sudden drop in recording attach rate and alert on it.
- CRM rate limits on bulk catch-up. After a PBX restore, the bridge tries to catch up a backlog and the CRM rate-limits the requests. Fix: queue the catch-up at the CRM's documented requests-per-minute and accept a slower backfill.
- DIY with Make.com or Zapier: USD 20-100 per month per workspace depending on call volume, plus your build time.
- Per-seat cloud-phone replacement (Aircall, JustCall): typically USD 40 or more per user per month, replaces 3CX entirely. A different product, not a bridge.
- Connect Zero on the CRM marketplace: USD 39 per location per month base, USD 0.02 per call synced, USD 0.01 per workflow trigger, no per-seat fee. A team of five doing 3,300 calls a month lands around USD 113.
How to integrate 3CX with your CRM: a step-by-step
Below is the sequence that works whether you build the bridge yourself or install a marketplace app. The steps are the same; only the middle layer changes.
Build it yourself or install a marketplace app
For the agencies and in-house teams we work with, the decision rests on three things: time, recurring volume, and whether the integration sits on the critical path for a sales process.
What about call recordings
Recordings are where DIY builds usually break first. Three things make recordings awkward:
Connect Zero streams the recording link from the PBX to the CRM at the time the recording becomes available, with a late-recording retry loop for the 3CX builds that publish them a minute or two after the call ends.
Common failure modes in the first week of an integration
Most integrations work on day one and start showing edges in the first week. The list below is what we see, in order of frequency.
The fixes are all in the bridge layer, not the PBX or the CRM. A productised bridge handles them; a custom build needs the engineer who built it to be around the first time each one surfaces.
What it costs in 2026
A short cost frame because pricing is the most-googled follow-up question after "how do I integrate it".
See the pricing in plain numbers page for the full breakdown.
Frequently asked questions
How long does it take to integrate 3CX with a CRM?
A productised install takes about five minutes once you have the 3CX API user and the CRM API access in hand. A custom build by an experienced developer takes one to four weeks of work plus ongoing maintenance, depending on whether you need recordings and missed-call workflows.
Do I need a special 3CX licence to integrate with a CRM?
You need 3CX v18 or later with API access enabled. The API user needs the Recording Manager and Reports User roles, or System Administrator. For features that rely on transcription, v20 is required. Full detail is in the 3CX licence requirements guide.
Can I integrate hosted 3CX with my CRM, or only self-managed?
Both work. Hosted 3CX, PBX Express, and self-managed all expose the Call Control API. PBX Express has a bearer-token constraint on certain API calls, documented in 3CX support notes, but a productised bridge like Connect Zero handles that for you.
Does the integration import historical calls?
By default no. Connect Zero syncs calls placed after install only. Historical bulk import is a sales-assisted conversation; reach out via contact if you need it. Most agencies skip historical import because the run-rate value is in the new calls.
What happens to a call from a number that is not in the CRM?
A new contact record is created against the inbound number, with the call written against it. You can change this default to "discard unknown" in the bridge settings if you would rather only sync calls against existing contacts.
How are missed calls handled?
Missed calls fire a separate event in real time, before the recording stage. You can attach a workflow to it (text the caller back, create a follow-up task, escalate after ten minutes). The missed-call trigger is in the base Connect Zero licence, not a premium upsell.
Can the integration run on more than one PBX per CRM location?
Yes. A single CRM location can connect to multiple 3CX PBXs (head office plus branches, for example) with extension mapping per PBX. Each location's mapping table is isolated, so a Sydney rep does not see Adelaide calls.
What if my 3CX is on an old v18 build?
Upgrade to the latest v18 build first, then plan a v20 upgrade if you want transcription or the newer reporting. The Call Control API surface is broader on v20 and 3CX recommends staying on v20 for new builds, per their v20 release notes.
Connect Zero is built by Auswide IT, an Australian 3CX VAR partner deploying 3CX across South Australia. Last updated 23 May 2026.
See Connect Zero.
The integration layer. 3CX calls in your CRM in under ten seconds.
