3CX CRM integration: Odoo, HubSpot, Salesforce, Microsoft 365
3CX CRM integration: caller lookup, call journaling, click-to-call, contact creation. Odoo, HubSpot, Salesforce, Microsoft 365 and the edition you need.

The short answer: 3CX connects to your CRM in the PRO or AI edition, with no development needed for the CRMs 3CX maintains itself, including Odoo, Salesforce, Microsoft Dynamics 365, Zoho, Pipedrive and Zendesk, and HubSpot through an official guide. Once the integration is in place, four things change day to day: the customer’s name appears when they call, the call is logged automatically on their record, a new contact can be created from the call, and clicking a number in the CRM places the call. What makes most projects fail is not the software, but the format of phone numbers.
We have already explained why 3CX wins in SMBs and how to build a call center with 3CX. This guide answers a narrower question: how to actually connect 3CX to your CRM, what each integration really does, and which settings to check. As a 3CX partner in Morocco, Bronze and Advanced Certified, we set up these integrations in Casablanca and across Morocco. The information below comes from the official 3CX documentation for Version 20.
What CRM integration actually delivers
The official 3CX guides describe the same features for Odoo, HubSpot and Salesforce:
- Caller name: an incoming call triggers a CRM lookup, and the contact’s name appears in the 3CX app before you even answer.
- Contact search: from the 3CX Web Client, users search CRM contacts by name, number or email address.
- Call and chat journaling: every call, answered or missed, inbound or outbound, is logged on the contact’s record. Chats (website live chat, SMS, WhatsApp) can be logged too.
- Contact creation: when an unknown number calls, the user fills in a form from the 3CX app and the contact is created directly in the CRM.
- Click-to-call: clicking a number in the CRM places the call through 3CX.
For a salesperson or an agent, the difference is clear: they know who is calling, the history keeps itself, and they no longer copy numbers into a phone. For a manager, it guarantees that missed calls are visible where the team already works.
The 3CX edition you need
| Edition | CRM integration | Microsoft 365 and Google Workspace | Note |
|---|---|---|---|
| Basic | No | User sync and single sign-on only | 3CX states that Basic supports no CRMs, APIs or data connectors |
| PRO | Yes | Yes | Contact pop-ups, call journaling, activity tracking |
| AI | Yes | Yes | Adds full call transcription, summaries and AI agents |
If you start from Basic, moving to PRO is the first step. Choosing the edition and the number of simultaneous calls is covered in our guide 3CX licence: which edition to choose.
Supported CRMs
On its integration guides page, 3CX separates two categories. First, integrations developed and maintained by 3CX, updated when the CRM changes: Odoo, Salesforce, Microsoft Dynamics 365, Zoho, Pipedrive, Zendesk, Freshdesk, Bitrix24, Vtiger, ConnectWise, Kommo, Jetpack CRM, plus connectors for MongoDB and SQL databases (Microsoft SQL Server, MySQL, PostgreSQL). Second, integrations provided by the vendor or a third party, imported into the console: if the CRM’s API changes, support then sits with that vendor. HubSpot has a detailed official configuration guide on the 3CX website.
Your CRM is not listed? 3CX lets you build your own integration with its CRM API, as a template. The documentation states that no support is provided for custom templates beyond the online docs: it is a development project to plan, test and maintain.
Odoo: native integration since Version 20 Update 10
This is the change Moroccan SMBs running their business on Odoo were waiting for. Since Version 20 Update 10, 3CX provides native integration with Odoo CRM. It recognises both contacts and companies, and you choose which is searched first.
Setup follows three steps:
- In Odoo: generate an API key from the user’s preferences (Security tab), with a validity period, and note the database name.
- In 3CX: in the admin console, under Integrations then CRM, choose Odoo and enter the instance URL, the database name and the API key.
- Settings: enable call and chat journaling, customise the subject and description for each call type, and allow contact creation from the 3CX client.
One point to watch: the Odoo API key has a validity period. The day it expires, journaling stops silently. We record that date in the monitoring file. To scope the Odoo project itself, see Odoo for a Moroccan SMB.
HubSpot and Salesforce: an OAuth app to create
For both HubSpot and Salesforce, the integration relies on an OAuth app created in the CRM, whose redirect URL is your 3CX address followed by “/api/oauth2crm”.
- HubSpot: HubSpot no longer allows new legacy Public Apps to be created from its interface. The 3CX guide now goes through HubSpot’s Projects framework and the HubSpot CLI, which requires Node.js. Existing apps keep working.
- Salesforce: you create an External Client App with OAuth enabled, then select SalesforceV2 in 3CX and authorise access. The REST API must be available in your Salesforce edition, and accounts using Person Accounts are not supported.
In both cases, journaling links the call to the right user through the email address: the 3CX user’s email must match the CRM user’s email. This detail often breaks activity reports when accounts were created at different times.
Microsoft 365 and Dynamics 365: don’t mix them up
The 3CX Microsoft 365 integration is not a CRM integration. It syncs users from Microsoft 365, enables sign-in with the Microsoft account (SSO), imports personal and shared mailbox contacts into the 3CX phonebooks, and syncs presence with Teams. The documentation sets its limits: one-way sync (from Microsoft 365 to 3CX), run nightly, up to 650 users, and a Microsoft 365 subscription that includes Exchange.
For a customer record that opens on an incoming call in the Microsoft world, you connect Dynamics 365, with its dedicated integration maintained by 3CX. And if your teams live in Teams, the Teams integration is a separate topic, covered in 3CX and Microsoft Teams.
Click-to-call: the browser extensions
Click-to-call relies on the 3CX Click2Call extensions for Google Chrome and Microsoft Edge. They turn numbers shown on a web page or in a CRM into links: one click sends the number to the Web Client or the Windows softphone, as the user prefers. An exception list excludes specific sites, such as an accounting application where amounts could be mistaken for numbers.
Rolling out the extension to every relevant workstation is part of the project: without it, the integration only works one way.
Number format: the key to success
Every 3CX configuration guide stresses the same point. To recognise a caller, 3CX must find their number in the CRM. HubSpot only performs whole-number lookups: if the record says “0522…” and the call arrives as “+212522…”, no name appears.
The rule recommended by 3CX: store all numbers in E.164 international format (+212…), receive the same format from the carrier, then set number matching to “Match exactly”. If that is not possible, there are two options: reformat the caller ID in 3CX before it is passed to the CRM, or, for Odoo, match on a minimum number of digits. The format of the presented number also depends on your SIP trunk, see SIP trunk: keep your business numbers.
How to test before rolling out
A CRM integration is validated with real calls, not just a “connected” status in the console. We run the same series with each pilot user: an inbound call from a known number in national format, then in international format; an inbound call from an unknown number, with contact creation; an outbound call through click-to-call; a missed call; and, if relevant, a WhatsApp or live chat conversation. For each case, we check that the name appears, that the activity lands on the right record and the right user, and that the texts are readable by the sales team.
Mistakes we fix
- A Basic edition bought on price, then CRM integration promised to the sales team that cannot be enabled.
- Numbers entered in every format in the CRM (0522, 05 22, +212 5 22, 00212…): the name appears only half the time.
- Different email addresses between 3CX and the CRM: calls are logged, but against the wrong user or none.
- An expired API key or token that nobody monitors.
- A third-party connector installed without knowing who maintains it, which stops working after a CRM update.
- Chat journaling forgotten, even though WhatsApp requests are handled in 3CX, see WhatsApp Business and 3CX.
Checklist before connecting your CRM
- 3CX PRO or AI edition, and Version 20 up to date (Update 10 for native Odoo).
- CRM on the list of integrations maintained by 3CX, or API development planned.
- Contact numbers normalised to +212 format.
- Identical email addresses for 3CX users and CRM users.
- Dedicated technical account and API key or OAuth app, with expiry dates recorded.
- Journaling texts defined: subject, answered, missed, outbound.
- Click2Call extension deployed on Chrome or Edge.
- Test with a small group before rolling out.
How we work
We start by auditing your telephony and your CRM: 3CX edition, state of the numbers in the database, account matching. We normalise numbers where needed, create the technical access, configure the integration and journaling, deploy the Click2Call extension, then test with a pilot group on real inbound and outbound calls. After go-live, the integration is part of the 24/7 monitoring of your phone system, and a critical incident is handled in under 15 minutes.
See our IP telephony in Morocco offering, then request your free phone system audit: we reply within 24 business hours.
Frequently asked questions
Which 3CX edition do I need to connect a CRM?
PRO or AI. 3CX states that the Basic edition supports no CRMs, APIs or data connectors. PRO includes CRM, Microsoft 365 and Google Workspace integrations; AI adds, among other things, full call transcription.
Does 3CX integrate natively with Odoo?
Yes. Since Version 20 Update 10, 3CX offers a native Odoo integration through its CRM API: contact lookup on incoming calls, search by name, number or email, call and chat journaling, contact creation and click-to-call from Odoo. You need the Odoo instance URL, the database name and an API key.
How does click-to-call from the CRM work?
Through the 3CX Click2Call extensions for Google Chrome and Microsoft Edge. Numbers shown in the CRM become clickable and the call is placed from the user’s Web Client or Windows softphone. Specific websites can be excluded so their numbers are not turned into links.
Why doesn’t the customer’s name show up when they call?
Almost always because of number formats. HubSpot, for instance, only finds a contact when the incoming number is identical to the one on the record. 3CX recommends storing numbers in E.164 international format (+212…) and receiving the same format from the carrier, or reformatting the caller ID in 3CX.
Is Microsoft 365 a CRM integration?
Not strictly. The 3CX Microsoft 365 integration syncs users, single sign-on, contacts and Teams presence. For customer records and call journaling, you connect Microsoft Dynamics 365, which has its own integration maintained by 3CX.
About the editorial team
ALLSAFE SOLUTIONS
Network, security and cloud engineers
Written by the engineering team at ALLSAFE SOLUTIONS, a managed IT provider founded in Casablanca by network, security and cloud engineers. Our articles draw on the projects we deliver for clients in Morocco and abroad.
LinkedIn









































