| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Contacts (contacts)
• Discuss (mail) |
| Lines of code | 895 |
| Technical Name |
atliis_odoo_microsoft_sync |
| License | OPL-1 |
| Website | https://atliis.com/ |
| Versions | 17.0 18.0 19.0 |
Microsoft 365 Contacts Sync
Two-way sync: Odoo ↔ Microsoft 365 (Outlook Contacts)
Keep Odoo and Microsoft 365 Outlook Contacts in sync using Microsoft Graph API — with configurable instant or manual push, smart pull sync, duplicate prevention, and full sync status tracking on each contact.
Enterprise-grade contact sync between Odoo and Microsoft 365
Instant push on every save, smart pull with deletion detection, duplicate prevention across multiple users, and full visibility into sync status and errors on every contact record.
Instant or Manual Push
Enable Instant Sync to push every save — including new contact creation — to Microsoft 365 automatically. Disable it to queue changes and push manually via the form button or bulk list action.
Scheduled Auto Pull
Enable Auto Pull from Microsoft 365 to run a scheduled pull automatically for all connected users (every 30 minutes by default). Or pull manually at any time from the user form.
Per-User Microsoft Connection
Each Odoo user connects their own Microsoft 365 account using OAuth 2.0 for secure, isolated contact synchronization.
Manual & Bulk Sync
Push contacts to Microsoft 365 individually from the contact form or select multiple contacts and sync them in bulk via the Actions menu.
Sync Status & Error Tracking
Review Microsoft sync status, last sync timestamp, and any error details directly on the contact record for easier troubleshooting.
No Duplicate Contacts
When multiple users share the same contact email across their Microsoft 365 accounts, the sync engine links them all to a single Odoo record — no duplicate creation, no manual merging required.
One contact record, always in sync across both platforms
No manual exports, no duplicate maintenance. Your team works in Odoo, their contacts stay current in Outlook — instantly or on demand.
No Duplicate Contacts
When multiple Microsoft 365 users share the same contact email, the sync engine links them all to a single Odoo contact — no duplicates, no manual merging needed.
Secure OAuth Per User
Each user authenticates with their own Microsoft account. No shared credentials, no admin tokens — each connection is individually authorized.
Conflict Resolution
If both Odoo and Microsoft 365 update the same contact simultaneously, Odoo wins — giving your CRM data the final say.
Setup and sync workflow
Follow these steps to connect Microsoft 365, configure the sync, and start syncing contacts between Odoo and Outlook.
Before You Start — Get Microsoft Graph API Credentials
To connect Odoo with Microsoft Graph API, create an app registration in Microsoft Azure and copy the Client ID and Client Secret into Odoo. Follow these four phases before configuring Odoo.
1. Create an Azure App Registration
Open the Microsoft Azure Portal, go to Microsoft Entra ID > App registrations, and create a new registration named Odoo or another recognizable name.
2. Add the Redirect URI
Choose Web as the platform type and add this redirect URI: https://your-odoo-domain.com/atliis_microsoft_contact_sync/authentication. Replace the domain with your Odoo database URL.
3. Add Microsoft Graph Permissions
Go to API permissions, add Microsoft Graph delegated permissions for Contacts.ReadWrite, offline_access, and openid, then grant admin consent if your tenant requires it.
4. Copy the Client ID and Client Secret
Copy the Application (client) ID from the app overview. Go to Certificates & secrets, create a new client secret, and copy the Value immediately — it is shown only once.
For additional Azure OAuth guidance, see the official Odoo documentation: Connect Microsoft Outlook 365 to Odoo using Azure OAuth.
Configure Contacts Sync
Go to Settings, open the Microsoft 365 Contacts Sync configuration, paste the Client ID and Client Secret, and save your changes.
Four toggles let you control sync behaviour: Instant Sync — pushes every Odoo save (including new contact creation) to Microsoft 365 automatically; disable to sync manually via the form button or bulk list action. Auto Pull from Microsoft 365 — runs a scheduled pull for all connected users every 30 minutes (adjustable in Technical → Scheduled Actions); disable to pull manually from the user form. Delete from Microsoft 365 when deleted in Odoo — propagates Odoo deletions and archives to Outlook instantly.
Connect Microsoft 365
Open the user preferences or user form and connect the Odoo user with their Microsoft 365 account through OAuth 2.0.
Each user authenticates independently. Once connected, their Odoo contact changes will sync to their personal Outlook Contacts folder.
Sync a New Contact to Microsoft 365
When Instant Sync is enabled, new contacts are pushed to Microsoft 365 automatically the moment they are saved — no button click needed. When Instant Sync is off, trigger the first push manually: open the contact and click Sync to Microsoft 365, or select multiple contacts from the list and use Actions > Sync to Microsoft 365.
Once a contact has been synced, any subsequent changes saved in Odoo are pushed to Microsoft 365 automatically (when Instant Sync is on) — no button click needed.
Sync Contacts in Bulk
Select multiple contacts from the list view and use the Actions menu to push them to Microsoft 365 in one operation.
Useful for the initial setup or re-syncing a group of contacts after making bulk changes in Odoo.
Pull Contacts from Microsoft 365 to Odoo
Open the user form, go to the Microsoft 365 tab, and click Pull from Microsoft 365 to import contacts from Outlook into Odoo.
Delta sync ensures only new or updated contacts are pulled — not the entire contact list every time. Contacts deleted in Microsoft 365 are also detected and reflected in Odoo, even on the very first pull.
Install and configure
Install the module, configure Microsoft access credentials, connect each user account, and start syncing contacts.
1. Add the module
Copy atliis_odoo_microsoft_sync into your Odoo addons path.
2. Update Apps
Install the requests Python dependency if needed, restart Odoo, and update the app list.
3. Install
Search for Microsoft 365 Contacts Sync and install the module.
4. Configure
Paste Azure credentials in Settings, connect each user's Microsoft account, and start syncing.
Common questions
Does this module sync contacts both ways?
Yes. Changes made in Odoo — including new contact creation — are pushed to Microsoft 365 instantly on save when Instant Sync is enabled, or manually via the form button or bulk list action when it is off. Changes made in Microsoft 365 are pulled back into Odoo either automatically via the scheduled Auto Pull or manually using the Pull button on the user form. If both sides change at the same time, Odoo wins.
When are changes pushed to Microsoft 365?
This depends on the Instant Sync setting in Settings. When enabled (default), any save — including creating a brand new contact — is pushed to Microsoft 365 immediately with no button click or scheduled job required. When disabled, changes are queued and pushed only when you click the form button or use the bulk list action.
How does the Auto Pull from Microsoft 365 work?
When Auto Pull from Microsoft 365 is enabled in Settings, a scheduled job runs automatically every 30 minutes and pulls contact changes from every connected user's Microsoft 365 account into Odoo. The interval can be adjusted in Technical → Scheduled Actions → Microsoft 365: Pull Contacts. When disabled, you can still pull manually at any time via the Pull button on the user form.
What if multiple users have the same contact in their Microsoft 365 accounts?
The sync engine matches contacts by email address before creating anything. If 5 users all have paul@atliis.com in their Microsoft 365 accounts, they will all be linked to the same single contact in Odoo — no duplicates are created.
What happens if a contact is deleted or archived in Odoo?
If the Delete from Microsoft 365 when deleted in Odoo setting is enabled, the contact is removed from all connected users' Outlook accounts immediately. If the setting is off, the Odoo record is removed but the Outlook contact is left untouched.
What happens if a synced contact is deleted in Microsoft 365?
On the next pull — whether triggered automatically by the Auto Pull schedule or manually via the Pull button on the user form — the module detects the deletion, even on the very first pull, and clears the sync link on the Odoo contact. The Odoo record is kept intact.
Can each user connect a different Microsoft 365 account?
Yes. The Microsoft account connection is handled per user through OAuth 2.0 — each user authenticates with their own account independently.
I need customisation in this module. How can I request it?
Please contact us at helpdesk@atliis.com to request customisation.
Do I get free support?
Yes, we provide 90 days free support from the date of purchase.
Get in touch with us
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Contacts (contacts)
• Discuss (mail) |
| Lines of code | 895 |
| Technical Name |
atliis_odoo_microsoft_sync |
| License | OPL-1 |
| Website | https://atliis.com/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module