Bi-directional Odoo ↔ Microsoft 365 sync for contacts, calendar, email, tasks and OneDrive — built, installed and supported by ECOSIRE. One-time license from $299.00 USD for Odoo 17, 18, 19 — includes 12 months of updates and support.

Bi-directional Odoo ↔ Microsoft 365 sync for contacts, calendar, email, tasks and OneDrive — built, installed and supported by ECOSIRE.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
If your organization lives in Outlook, Teams and OneDrive but runs operations in Odoo, your team wastes hours re-keying the same contacts, double-booking calendars, and hunting for the "real" version of a proposal file. This build-to-order module closes that gap with a robust, bi-directional bridge between Odoo (17, 18 or 19 — Community or Enterprise) and Microsoft 365 via the Microsoft Graph API.
Bi-directional contacts sync between Odoo res.partner and Outlook / Microsoft 365 address book, with folder and category mapping
Two-way calendar sync (calendar.event ↔ Outlook) covering attendees, reminders, recurring events and free/busy status
Per-user OAuth 2.0 via Microsoft Graph so each employee's contacts, calendar and email sync under their own Microsoft 365 identity
Outlook email logging: inbound and outbound messages auto-linked to the matching Odoo lead, opportunity, sale order or partner and threaded into chatter
Tasks / to-do synchronization between Odoo activities or project.task and Microsoft To Do / Planner
OneDrive & SharePoint file linking (or optional mirroring) to any Odoo record via ir.attachment / documents.document
ECOSIRE designs, builds, installs and supports the module for you — this is not an off-the-shelf apps.odoo.com download. After purchase we run a short scoping call, register (or help you register) an Azure AD / Entra ID application for OAuth 2.0, then engineer the connector around your exact record types, ownership rules and sync direction preferences. Typical delivery is 2–4 weeks depending on scope.
Under the hood the module is proper Odoo engineering, not a fragile script. Sync jobs run as Odoo scheduled actions (ir.cron) on schedules you control, each Microsoft object is mapped to Odoo models (res.partner, calendar.event, mail.message, project.task, ir.attachment / documents.document) with stored external-ID and change-token fields so re-syncs are idempotent and never duplicate. Conflict resolution is configurable (Odoo-wins, Microsoft-wins, or last-modified-wins) and every sync is logged for auditability. Field mappings are data-driven so your admins can adjust them from a settings view without touching Python.
Contacts sync both ways between res.partner and the user's Outlook / Microsoft 365 address book, with folder and category mapping. Calendar sync keeps calendar.event and Outlook calendars aligned in both directions — including attendees, reminders, recurrence and free/busy — with per-user OAuth so each employee's events sync under their own identity. Inbound and outbound Outlook emails are logged against the matching Odoo record (lead, opportunity, sale order, partner) using the Graph message API and threaded into the Odoo chatter, so the full conversation history lives where your team works. Tasks / to-dos sync between Odoo activities or project.task and Microsoft To Do / Planner. And OneDrive / SharePoint files are linked (or optionally mirrored) to Odoo records so a document stored once in Microsoft 365 is one click away from the deal, project or customer it belongs to.
Security is handled the Odoo way: access controlled through ir.model.access.csv and record rules so users only sync and see their own data, secrets stored server-side, and OAuth refresh tokens managed so day-to-day sync never interrupts your users. Delivery includes the full module source, deployment, configuration, admin documentation and a post-go-live support window. You own the code.
Runs a team that lives in Outlook, Teams and OneDrive but manages sales, projects and customers in Odoo. Wants one source of truth so contacts, meetings and files stop being re-keyed and double-entered across two systems.
Needs every Outlook email and meeting with a prospect automatically logged against the Odoo lead or opportunity, so pipeline history is complete without reps copying and pasting — and reporting reflects real activity.
Owns the Azure AD tenant and the Odoo instance. Wants a secure, per-user OAuth integration with proper access rules, controllable cron schedules, an audit trail and clean code they can maintain — not a brittle unsupported script.
Buy the license on ecosire.com and download the Microsoft 365 / Outlook Two-Way Sync module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for Microsoft 365 / Outlook Two-Way Sync, and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Two-way sync of contacts, calendar, email, tasks AND OneDrive files | All five object types, bi-directional, in one module | Only if you scope and pay to build each one | Usually one or two objects (e.g. calendar only) | |
| Built, installed and supported for your exact record types and rules | Yes — scoped to your models, ownership and direction | Yes, but you manage the developer and risk | No — generic mapping you adapt to | |
| Outlook email auto-logged against Odoo leads/orders in chatter | Yes, via Microsoft Graph message API | Possible but must be built from scratch | Rarely; often manual or add-on only | |
| Idempotent, duplicate-safe sync with change tokens & audit log | Yes — external-ID + deltaLink, full audit trail | Depends on developer discipline | Varies; duplicates are a common complaint | |
| Configurable conflict resolution (Odoo/Microsoft/last-modified wins) | Yes, per object type | Only if explicitly built | Often fixed or not exposed | |
| Per-user OAuth 2.0 with proper ir.model.access.csv + record rules | Yes — per-user identity and least-privilege access | Must be designed and secured yourself | Sometimes; often a single service account | |
| Runs on Odoo 17, 18 and 19, Community and Enterprise | Yes, built and tested for your version | Whatever you commission and maintain | Depends on vendor version support | |
| Source code ownership and freedom to extend | Full source handed over — you own it | Yes | Usually licensed/obfuscated, no source | |
| Total cost of ownership | Fixed build price + optional support retainer | Open-ended developer time and risk | Low upfront but limited and per-user fees add up |
This is a build-to-order module, not an instant apps.odoo.com download. After purchase we run a short scoping call, then design, build, install and configure the connector for your environment. Typical delivery is 2–4 weeks depending on scope — how many object types you sync (contacts, calendar, email, tasks, files), your conflict rules, and whether you need webhook near-real-time updates or scheduled polling. You'll get a firm timeline confirmed during scoping.
Delivery includes a post-go-live support window (SLA agreed during scoping) covering bug fixes and adjustments. Because you receive and own the full source, your team can maintain and extend it freely. We also offer ongoing support and update retainers to keep the connector current with Microsoft Graph API changes and new Odoo releases (17 → 18 → 19). Microsoft occasionally deprecates Graph endpoints, so an active retainer is the safest way to stay running long-term.
Odoo 17, 18 and 19, on both Community and Enterprise editions. The module is built with standard Odoo primitives — models.Model, ir.cron scheduled actions, ir.model.access.csv, record rules and standard views — so it installs cleanly on your edition. Enterprise-only features (like the Documents app for OneDrive mirroring) are used only if you run Enterprise; on Community we fall back to ir.attachment linking.
Yes. The connector uses OAuth 2.0 through the Microsoft Graph API, which requires an application registered in your Azure AD / Microsoft Entra ID tenant. We guide (or perform) that registration, request the minimum Graph scopes needed for the objects you sync, and set up per-user consent so each employee's contacts, calendar and mail sync under their own identity. Secrets and refresh tokens are stored server-side, and tokens are refreshed automatically so sync doesn't interrupt users.
Every synced Odoo record stores the Microsoft external ID and a Graph change-token / deltaLink, so re-runs are idempotent and never create duplicates. When the same record changes on both sides between syncs, a configurable conflict-resolution strategy decides the winner — Odoo-wins, Microsoft-wins, or last-modified-wins — set per object type. Every sync writes to an audit log with per-record status and error detail so you can see exactly what happened.
Absolutely. Sync runs as Odoo scheduled actions (ir.cron) you control, with independent frequencies per object type — for example calendar every few minutes and files hourly. You can scope which contact folders, calendars and Odoo tags/companies participate, choose sync direction per object, and trigger a manual 'Sync now' at any time. Optional webhook change-notifications enable near-real-time calendar and mail updates instead of polling.
You own the module source and it runs entirely inside your own Odoo instance and your own Microsoft 365 tenant — there is no ECOSIRE-hosted middleman holding your data. If you part ways, the connector keeps running on your infrastructure. The only maintenance concern is future Odoo upgrades and Microsoft Graph API deprecations, which any competent Odoo developer (or an ECOSIRE retainer) can handle.
Bi-directional Odoo ↔ Microsoft 365 sync for contacts, calendar, email, tasks and OneDrive — built, installed and supported by ECOSIRE.