Flectic
Odoo Modules

Odoo Calendar & Contacts: A Practical Guide to Scheduling and the Address Book

Odoo Calendar and Contacts form the productivity backbone of every Odoo deployment. Learn how events, attendees, shared availabilities, deduplication, and Google/Outlook sync fit together, and where Dynamics 365 takes a different path.

What Odoo Calendar and Contacts actually do

Odoo Calendar is the core scheduling app in Odoo 19, grouped under Productivity alongside Documents, Discuss, and the separate Appointments app. It opens to a calendar overview with Day, Week, Month, or Year views and a Show weekends toggle. Clicking any date opens the New Event popup with the signed-in user auto-added as the first attendee, so an event is never orphaned.

Odoo Contacts is the central repository for every business relationship in the system: customers, suppliers, partners, and individual employees. It is accessible as a standalone app and is the single source of truth that Calendar, CRM, Sales, Purchase, and Accounting all read from. The two apps are designed to interlock. A meeting scheduled from a contact, an opportunity, or a project task links back to that record through the Chatter, so context travels with the event rather than being copied into a separate system.

This tight coupling is the practical reason SMEs consolidate scheduling and contacts on Odoo instead of stitching together a calendar tool, a contact manager, and a CRM. There is one partner list, one attendee model, and one activity history per record.

Inside the Odoo Calendar event model

Every Odoo Calendar event supports All Day or specific start and end times, multi-day spans, manually added or auto-generated videocall URLs, and a full form with Duration, Organizer, Tags, description, Reminders, and Recurrent options. Recurrence is granular: you pick a repeat period, configure recurrence rules, and choose an end condition (a fixed count, an end date, or Forever), with explicit timezone selection so distributed teams do not lose an hour on daylight saving.

Attendees are partner records referenced through a many-to-many field, which means internal users and external contacts share one attendee model. Adding a guest is the same action whether the guest is a colleague or an outside customer, and removing them sends the right cancellation depending on the active sync provider.

Share Availabilities, also called Specific Slots, lets a user drag to select available time ranges, copy a shareable link, and configure the Appointment Title, Users, Location, and Video Link type. The configuration screen adds tabs for Availabilities, Questions, Communication (templates and reminders), and Options including auto-confirm, automatic CRM opportunity creation, and scheduling or cancellation windows. For more advanced self-service flows, the separate Odoo Appointments app adds user- and resource-based booking, published booking pages, capacity management, pre-booking windows, manual or auto confirmation, guest invites, and CRM opportunity creation.

Shared and team calendars in Odoo

Odoo does not ship a standalone team-calendar collection. Instead, the Calendar dashboard exposes an Attendees box that lists colleagues, and toggling individual users on and off shows or hides their availability when you are scheduling an event that involves multiple people. Sharing is therefore a function of attendee visibility and the Share Availabilities feature, rather than a separate object you have to create and maintain.

For SMEs this is usually sufficient. You see your colleagues free or busy inline, you add the relevant ones as attendees, and the event appears on each of their calendars through the same partner_ids link. Where a published booking page is needed (for example, for external prospects to self-book a discovery call), the Appointments app extends Calendar with a public-facing flow that still writes back into the same Calendar data.

Google and Outlook two-way sync

Odoo Calendar supports bidirectional, two-way synchronization with both Google Calendar and Microsoft Outlook. The Odoo documentation states the Google integration lets you see and manage meetings from both platforms with updates going in both directions, and the Outlook integration is described as a two-way process in which events are reconciled in both accounts.

Setup for Google requires a Google API Console project with the Google Calendar API enabled, an OAuth consent screen, Web application credentials, and the redirect URI set to your Odoo URL plus /google_account/authentication. The Client ID and Secret go in Odoo under Settings, Calendar, Google Calendar. Outlook setup requires an Azure (Entra ID) app registration configured as multitenant with personal accounts, a redirect URI of your Odoo URL plus /microsoft_account/authentication, and a client secret (Odoo recommends a maximum 24-month expiry). Those credentials go in Odoo Calendar under Configuration, Settings, Outlook Calendar.

One behavioural difference is worth flagging during implementation. When Odoo is synced with Google, creating an event or adding a contact triggers Google to send an invitation, and deleting or removing a contact sends a cancellation. With Outlook, the behaviour is more aggressive: creating an event, deleting an event, unarchiving an event, archiving an event, adding a contact to an event, removing a contact from an event, or editing the date or time of an event in Odoo each cause Outlook to send a notification to all participants, with no exceptions. Odoo's documentation explicitly describes this as a Microsoft-side limitation that Odoo cannot fix, so it should be set as an expectation with users before go-live.

Sync is reset per user. From Settings, Manage Users, select the user, open the Calendar tab, and choose Reset Account, with options for the user's existing events (leave them, delete from external, delete from Odoo, or delete from both) and the next synchronization (new events only versus all existing events). A Pause Synchronization checkbox for Google temporarily disables sync without removing credentials.

Contacts, deduplication, and Data Cleaning

Odoo contacts come in two types: Person, for individuals (with a Job Position field and a parent Company field), and Company, for organizations that can have multiple associated contact persons and typed addresses. A contact form surfaces contextual tabs for Contacts (associated people and addresses typed as Contact, Invoice, Delivery, or Other), Sales and Purchases, Accounting, Internal Notes, and conditionally Partner Assignment and UBO (Ultimate Beneficial Owner, which requires the Equity app). Smart buttons at the top surface related Opportunities, Sales, Meetings, Invoices, and more.

Because Calendar, CRM, and Sales all write back to the same partner list, duplicates accumulate quickly. Odoo provides two layers of cleanup. The built-in Merge action lets you select two or more contacts, choose Action, then Merge, pick the Destination Contact (which defaults to the oldest record, i.e. the one created first in the system), and confirm. The Deduplicate the other Contacts tool searches by Email, Name, Is Company, VAT, or Parent Company, and records must match all selected fields to be suggested. The tool excludes contacts that have an associated user or journal items to avoid merging accounting-affecting records.

For higher-volume hygiene, the optional Data Cleaning app (Enterprise only) adds a dashboard with rules per model (including Contacts), similarity scoring, manual or automatic merge modes, scheduled daily cron actions, domain filtering, field cleaning (Formats rules for find-and-replace standardization), a Recycle feature that identifies outdated records to archive or delete, cross-company matching, and configurable similarity thresholds. Pair this with Partner Autocomplete, an Odoo in-app-purchase service that auto-fills company data (name, logo, phone, email, tax ID, address, UNSPSC tags) when creating a new company contact, reducing manual entry and duplicates at the source.

The Dynamics 365 equivalent: Activities, Account, Contact, and Bookings

Dynamics 365 does not ship a single Calendar plus Contacts app the way Odoo does. The closest equivalent combines three pieces: the normalized Account and Contact entities, the Activity-based scheduling model on Dataverse, and optional Microsoft 365 Bookings for external self-service booking.

On the contact side, Dynamics 365 separates Account (companies or organizations) from Contact (individual people). A contact is linked to one account at a time through a Company (parentcustomerid) lookup, giving a one-to-many relationship between account and contacts. This is more normalized than Odoo's unified res.partner model, where companies and individuals share one table and are differentiated by an is_company flag and parent-child links. The D365 split is cleaner for complex B2B hierarchies but means managing two record types per relationship.

On the scheduling side, Dynamics 365 models appointments, emails, tasks, and phone calls as Activity entities that all inherit from ActivityPointer, which Microsoft defines as any action which can be entered on a calendar and has time dimensions such as start time, stop time, due date, and duration. The Appointment table is defined as a commitment representing a time interval with start and end times and duration, with required and optional attendees, an organizer, a Regarding lookup (polymorphic to account, contact, opportunity, or case), recurrence through RecurringAppointmentMaster (pattern, interval, occurrences, with Master, Instance, and Exception handling), and Teams online-meeting fields. Participants are modeled through the ActivityParty table with roles such as Required attendee, Optional attendee, Organizer, Regarding, and Owner.

Dataverse also has a separate calendar table used by the scheduling engine to define when an appointment or activity is to occur, with types including Default, Customer Service (for SLA KPIs), Holiday Schedule, and Inner. This table is primarily used by Customer Service service activities and Field Service work orders and bookings, not day-to-day meeting coordination. For external self-service booking, Microsoft Bookings is a separate Microsoft 365 app, not a Dynamics 365 module, with booking pages, services (duration and pricing), staff availability, email and SMS confirmations, scheduling policies, and Teams meetings. Its data lives in Exchange Online shared mailboxes rather than Dataverse.

For SMEs that want contacts and scheduling in one place with minimal setup, the Odoo model is lighter and faster to stand up. For organizations already standardized on Microsoft 365, the D365 activity timeline plus native Exchange server-side sync and Teams integration is the differentiator.

Implementation considerations for SMEs

Three decisions drive most of the value from an Odoo Calendar and Contacts rollout. First, decide early whether you will sync with Google, Outlook, or both, because user training and the Outlook all-participants notification behaviour should be set as expectations before go-live. Second, plan a one-time deduplication pass using the built-in Merge tool plus Partner Autocomplete before turning on any CRM or email-marketing workflow that creates contacts automatically; cleaner seed data prevents the duplicate snowball. Third, decide where the line is between Calendar's Share Availabilities (good for internal and simple external scheduling) and the Appointments app (better for published booking pages with questions, capacity, and auto-confirm), so users are not improvising both.

Because Contacts is foundational to every other Odoo app, getting the company-versus-person structure right at import time pays compound interest across CRM, Sales, Purchase, and Accounting later.

Frequently asked questions

Is Odoo Calendar included with Odoo, or is it a separate app?

Odoo Calendar is a core Productivity app bundled with Odoo 19 and provides Day, Week, Month, and Year views plus recurring events, reminders, and videocall URLs. The separate Appointments app extends Calendar with published booking pages, custom questions, capacity management, and auto-confirm for self-service scheduling.

Does Odoo Calendar sync two-way with Google and Outlook?

Yes. Odoo Calendar supports bidirectional sync with both Google Calendar and Microsoft Outlook. Setup uses OAuth: a Google API Console project for Google, and an Azure (Entra ID) app registration for Outlook. Note that Outlook sends a notification to all participants on every create, delete, archive, unarchive, contact add/remove, or date/time edit on an event in Odoo, a Microsoft-side limitation documented by Odoo that cannot be fixed.

How does Odoo handle duplicate contacts?

Odoo offers two layers. The built-in Merge action lets you select contacts, choose Action, Merge, pick a destination contact (defaults to the oldest record), and confirm. The optional Data Cleaning app (Enterprise) adds similarity-scored rules, scheduled daily cron deduplication, automatic or manual merge, field cleaning, and a recycle bin. Partner Autocomplete also reduces duplicates at the source by auto-filling company data when you create a new company contact.

What is the Dynamics 365 equivalent of Odoo Calendar and Contacts?

Dynamics 365 splits the function across the Account and Contact entities, Activity-based scheduling on Dataverse (Appointment, ActivityParty, RecurringAppointmentMaster), and the separate Microsoft 365 Bookings app for external self-service booking. It is more normalized than Odoo's unified partner list and integrates deeply with Exchange and Teams, but requires managing multiple entities rather than one shared contact and attendee model.

Can I share a team calendar in Odoo?

Odoo does not have a standalone team-calendar collection. The Calendar dashboard lists colleagues in an Attendees box, and toggling each user shows or hides their availability when you schedule an event. For publishing available slots to external contacts, use Calendar's Share Availabilities feature or the dedicated Appointments app.

Planning an Odoo or Dynamics 365 rollout?

Flectic is a platform-neutral ERP and CRM implementation partner serving SMEs across Canada, the UK, and the USA. We implement both Odoo and Microsoft Dynamics 365, with AI-accelerated delivery designed to deliver up to 3x faster than a traditional implementation. Whether you need Calendar, Contacts, and CRM configured cleanly on day one or a deduplication and sync strategy across Google, Outlook, and Teams, we can scope it on a single call.

Book an ERP Readiness Call
Response within one business day

Sources

  • Odoo Calendar is the core scheduling app in Odoo 19 (Productivity), with Day/Week/Month/Year views, a Show weekends toggle, and the signed-in user auto-added as the first attendee on new events; events support All Day or specific times, multi-day, videocall URLs, Duration, Organizer, Tags, Reminders, and Recurrent options with repeat period, recurrence rules, end conditions, and timezone.https://www.odoo.com/documentation/19.0/applications/productivity/calendar.html (verified 2026-06-28)
  • Odoo Calendar's Share Availabilities (Specific Slots) feature supports drag-to-select ranges, shareable links, Appointment Title/Users/Location/Video Link, plus Availabilities, Questions, Communication, and Options tabs including auto-confirm and CRM opportunity creation.https://www.odoo.com/documentation/19.0/applications/productivity/calendar.html (verified 2026-06-28)
  • The separate Odoo Appointments app provides more advanced self-service booking flows (user- or resource-based), published booking pages, capacity management, pre-booking windows, manual/auto confirmation, guest invites, and CRM opportunity creation, tightly integrated with Calendar.https://www.odoo.com/documentation/19.0/applications/productivity/appointments.html (verified 2026-06-28)
  • Odoo supports shared/team calendars via the Calendar dashboard Attendees box; there is no standalone team-calendar collection; sharing is via attendee visibility and Share Availabilities.https://www.odoo.com/documentation/19.0/applications/productivity/calendar.html (verified 2026-06-28)
  • Odoo Calendar supports bidirectional (two-way) sync with Google Calendar; setup requires a Google API Console project, Google Calendar API, OAuth consent screen, Web application credentials, redirect URI {odoo_url}/google_account/authentication, and Client ID/Secret in Odoo Settings, Calendar, Google Calendar; sync reset is per-user with options for existing events and next synchronization.https://www.odoo.com/documentation/19.0/applications/productivity/calendar/google.html (verified 2026-06-28)
  • Odoo Calendar supports bidirectional sync with Microsoft Outlook via an Azure (Entra ID) multitenant plus personal accounts app registration, redirect URI {odoo_url}/microsoft_account/authentication, client secret (max 24-month expiry), with credentials in Odoo Calendar, Configuration, Settings, Outlook Calendar; Outlook sends a notification to ALL participants on every create, delete, archive, unarchive, contact add/remove, or date/time edit with no exceptions.https://www.odoo.com/documentation/19.0/applications/productivity/calendar/outlook.html (verified 2026-06-28)
  • Odoo Contacts is the central repository for all business contacts, with two types (Person with Job Position and parent Company, and Company with multiple associated contacts/addresses typed as Contact, Invoice, Delivery, or Other) and contextual tabs (Contacts, Sales & Purchases, Accounting, Internal Notes, Partner Assignment, UBO when Equity app installed) plus smart buttons for related records.https://www.odoo.com/documentation/19.0/applications/essentials/contacts.html (verified 2026-06-28)
  • Odoo supports manual contact deduplication (select contacts, Action, Merge, choose Destination Contact which defaults to the oldest/first-created record) and the Deduplicate the other Contacts tool matching on Email, Name, Is Company, VAT, or Parent Company, excluding contacts with an associated user or journal items.https://www.odoo.com/documentation/19.0/applications/essentials/contacts/merge.html (verified 2026-06-28)
  • The Odoo Data Cleaning app (Enterprise only) provides advanced deduplication with rules per model, similarity scoring, manual/automatic merge, scheduled actions (daily recycle cron), domain filtering, field cleaning (Formats rules), Recycle records, cross-company matching, and configurable thresholds.https://www.odoo.com/documentation/19.0/applications/productivity/data_cleaning.html (verified 2026-06-28)
  • Partner Autocomplete is an Odoo In-App Purchase (IAP) service that enriches newly-created company Contacts with business name, logo, phone, email, Tax ID, address, and UNSPSC activities as Tags; it only works for new company contacts, not existing ones or person contacts.https://www.odoo.com/documentation/19.0/applications/sales/crm/optimize/partner_autocomplete.html (verified 2026-06-28)
  • Microsoft Dataverse defines an activity as any action which can be entered on a calendar and has time dimensions (start time, stop time, due date, duration); every activity type has a row in the shared ActivityPointer table plus its own specialized table.https://learn.microsoft.com/en-us/power-apps/developer/data-platform/activitypointer-activity-entity (verified 2026-06-28)
  • The Dataverse Appointment table is a commitment representing a time interval with start/end times and duration, with required/optional attendees, organizer, Regarding, recurrence via RecurringAppointmentMaster, and Teams online-meeting fields; participants are modeled via ActivityParty with participationtypemask roles (5=Required attendee, 6=Optional attendee, 7=Organizer, 8=Regarding, plus Owner).https://learn.microsoft.com/en-us/power-apps/developer/data-platform/reference/entities/appointment (verified 2026-06-28)
  • In Dynamics 365 Sales/CE, Account represents companies/organizations and Contact represents individuals linked to one account at a time via the Company (parentcustomerid) lookup (one account to many contacts), contrasting with Odoo's unified res.partner model.https://learn.microsoft.com/en-us/dynamics365/sales/accounts-contacts (verified 2026-06-28)
  • Microsoft Bookings is a separate Microsoft 365 app (not a Dynamics 365 feature) for simplifying appointment scheduling with customers, providing a booking page, Services, Staff, Customers, Appointments with email/SMS confirmations, scheduling policies, and Teams meetings; all Bookings data is stored in Microsoft 365/Exchange Online shared mailboxes, not Dataverse.https://learn.microsoft.com/en-us/microsoft-365/bookings/bookings-overview?view=o365-worldwide (verified 2026-06-28)