Microsoft Bookings vs Easy!Appointments

Microsoft Bookings suits organizations already inside Microsoft 365 that want booking pages tied to Teams and Exchange. Easy!Appointments suits teams that need customer bookings on servers they run, with the operating work that comes with it.

On this page

When Microsoft Bookings or Easy!Appointments is the better fit for customer appointments

Microsoft Bookings fits best when your customer appointments already run through Microsoft 365 and the people who book them are inside your tenant. If your staff live in Outlook, your meetings are Teams meetings, and your identity is managed in Microsoft Entra ID, Bookings puts the booking page, the Exchange calendars and the Teams links in one place with no servers for you to run. Bookings has no separate license, so its cost sits inside the Microsoft 365 plan you already pay for. Renewal planning is the moment to check whether Bookings is used heavily enough to justify keeping that plan tier, and whether anyone depends on it for reminders or staff calendars. Confirm with your Microsoft account team which features your current plan includes, since availability varies by plan and region.

Easy!Appointments fits when you want the booking data on servers you control and have people who can run a PHP and MySQL application. It is licensed under GPL v3.0, requires PHP 8.2 or later, a MySQL database and Apache or Nginx, and it organizes services and providers, lets customers book online, and synchronizes with Google Calendar. Choose it when a residency or confidentiality requirement means invitee details must stay in your own data center, and when your team can patch the web server, database and PHP runtime on a schedule. Check the Easy!Appointments repository for the integrations you need before you commit, because Teams links, Exchange sync and SMS are not part of the core product.

The decision turns on three questions: who owns the hosting, how much operating capacity you have, and which integrations the business actually needs. If the answer to hosting is a provider you do not control, or the answer to capacity is no one, Bookings is usually the lower-risk choice even if its data sits in Microsoft's cloud. If the business depends on Teams meetings, Exchange calendars and Microsoft Entra sign-in, moving away means rebuilding each of those links, and that effort should be scoped before the renewal date. Write down the required integrations, the people who will maintain the server, and the data location rules, then compare each option against that list.

Which option fits which scenario

This table matches common situations to the option that usually fits best, with the condition that would change the answer. Read each row as a starting point: the deciding factors are usually who will maintain the server, whether staff live in Teams, and whether data must stay inside a defined boundary.

ScenarioBetter fitReason and conditions
A single clinic or salon needing self-hosted bookingsEasy!AppointmentsCovers online booking, services and providers without recurring fees, provided someone can run a PHP 8.2 and MySQL server or pay a provider for installation and upkeep.
Microsoft 365 organization with Teams-centric staffMicrosoft Bookings (stay) or Nextcloud appointmentsBookings links to Teams meetings natively, which Easy!Appointments does not provide. Moving away only makes sense if Teams meeting links can be replaced by another video tool.
Team with no PHP operations skillsMicrosoft Bookings (stay) or a managed Easy!Appointments engagementSelf-hosting adds patching, backups, TLS and database upkeep. Without someone who owns those tasks, the hosted option is safer unless a support contract covers them.
Regulated body needing data inside its own boundaryEasy!Appointments on your own infrastructureBookings data sits in Microsoft cloud storage. Easy!Appointments keeps customer details and calendars on servers you control, but you must confirm the hosting, backup and access controls your assessor expects.
Clinic needing SMS reminders or card paymentsEasy!Appointments with custom developmentNeither product offers these out of the box in the way Bookings users may expect. The author's site says custom work can add SMS, payments and reminders, so confirm scope and cost in writing first.
Organization needing multi-staff service calendars with shared reportingConfirm before choosingTest provider assignment and reporting with real service rules in a staging install. Bookings is a fuller fit if reporting depends on Microsoft 365 admin tooling.
Calendar sync with Google CalendarEasy!AppointmentsThe project documents Google Calendar synchronization. Check the sync direction and conflict handling for your staff accounts before relying on it.

Where bookings, invitee details and calendars live

Bookings keeps appointments, invitee details and calendar data inside Microsoft 365, with scheduling mailboxes in Exchange Online. Easy!Appointments puts the same records in a MySQL database on a server you operate, so the questions shift from Microsoft's tenant controls to your own backups, access logs and account management.

Bookings data in Microsoft 365

Bookings stores business profiles, services, staff and customer appointments within the Microsoft 365 service, and each booking calendar is backed by an Exchange scheduling mailbox. Your data residency and retention depend on the tenant's region and Microsoft's service terms. Confirm with your Microsoft account team where scheduling mailboxes reside, how long deleted bookings persist, and who in your tenant holds administrator rights over them.

Exchange scheduling mailboxes

Each Bookings calendar relies on a mailbox that holds confirmations and calendar entries, so invitee details can also appear in mail and calendar stores outside Bookings. Map every mailbox that receives booking traffic before migration, including shared and resource mailboxes. Deleting a Bookings calendar does not automatically clear every copy, so check mailbox retention and eDiscovery holds first.

Self-hosted database and backups

With Easy!Appointments, customers, services, providers and bookings live in a MySQL database that your team installs, backs up and restores. Backup scope, encryption at rest, restore testing and database retention become your responsibility. Ask who owns the backup schedule, where copies are stored, and how a restore is verified before you retire any Bookings calendar.

Access logs and server controls

Web server access logs, PHP and database logs record who opened booking pages, submitted forms and changed records, but only if you configure them. Bookings activity is captured in Microsoft's audit tooling under your tenant. On your own server, decide which logs are kept, where they are shipped, how long they are retained and who can read them, since invitee names and contact details may appear in them.

Microsoft Entra accounts versus local accounts

Bookings staff sign in with Microsoft Entra accounts, so offboarding a employee in Entra removes their access to the scheduling pages. Easy!Appointments uses its own user accounts with roles for administrators, providers and secretaries, and it does not inherit Entra sign-in. Plan who creates and disables these accounts, whether single sign-on is available for your setup, and how leavers lose access to the database and calendars.

Compliance evidence and attestation

Moving bookings data changes which controls you must document, such as access reviews, backup testing and log retention. DeployOpen can plan, configure and document these controls and assemble the evidence an assessment will request. Independent auditors and certification bodies issue any audit report or attestation, so agree with your auditor early which records they will accept from each platform.

What GPL v3.0 and CC BY 3.0 mean for an Easy!Appointments deployment

Easy!Appointments is licensed under GPL v3.0 for its code and CC BY 3.0 for its content, and that split matters for how your organization uses it. Under GPL v3.0 you can install the software, run it internally for your own booking staff and customers, and modify it to fit your services, providers and reminder rules without paying a license fee to the author. The license obligations that matter most arise when you distribute copies or modified versions to other parties, such as a partner or a hosting provider who gives the software to someone outside your organization. Under CC BY 3.0, the content (such as documentation and images) may be reused with attribution. Confirm with the project's license files in the Easy!Appointments GitHub repository which files carry which terms, and record that in your deployment notes.

The commercial comparison is simpler. Microsoft Bookings is not sold as a standalone product with its own license. It is an app included in certain Microsoft 365 plans, so the cost sits inside the subscription you already pay for, and you cannot keep Bookings' functions by buying it separately. Easy!Appointments is free, with no recurring fees and no booking commissions, according to the project website. Your recurring costs therefore shift to hosting, PHP and MySQL administration, and any support you buy. The author sells Premium Services for installation, upgrades, migration, support and customization, so ask whether those are needed and quote them against your written scope.

Before you deploy, ask counsel to confirm your obligations for your own scenario. Internal use inside one organization differs from hosting Easy!Appointments for clients, reselling a customized build, or embedding it in a product you ship. If you plan any of those, have counsel review GPL v3.0 source-availability duties for your modifications and check whether any custom code you commission is covered by the same license. Keep a record of the version you deploy, such as the 1.6.0 release published on May 27, 2026, along with any patches, so you can show exactly what you changed.

What you pay for in each option

Bookings and Easy!Appointments bill you in different places, so the comparison is about who is paid for what, not a list price. Each card below names one cost component, whether it is one-time or recurring, what moves it, and what to request in writing.

Bookings inside Microsoft 365

Bookings has no standalone license. Its cost is folded into the Microsoft 365 or Office 365 plan your organization already pays for, so the line item rarely appears as Bookings. Check with your Microsoft reseller or licensing contact which plan includes Bookings for your users, and whether that plan is one you would keep if you leave. Recurring cost moves with seat count and plan tier, not with the number of bookings.

Easy!Appointments license and fees

The software itself carries no license fee. Easy!Appointments is GPL v3.0 code with no recurring fees or booking commissions, according to its website. The cost you do carry is everything around the code: the server, the database, your staff time and any outside help. Ask any implementation partner to confirm in writing which parts of the work are paid and which are included.

Hosting, runtime and patching

This is the main recurring cost. You need a server or cloud instance running PHP 8.2 or later, a MySQL database, and Apache or Nginx. Costs rise with user count, availability targets, backup frequency and the number of environments you keep, such as test and production. Ask for the expected hosting footprint, who applies PHP and MySQL security patches, and how often.

Installation, migration and integration build

These are the main one-time costs. Installing Easy!Appointments is a short technical task, but moving services, staff and customer records from Bookings, connecting calendars and rebuilding confirmation emails takes longer. The effort depends on how many staff calendars you migrate and how many custom rules you carry over. Request a fixed scope with named deliverables before work starts.

Support, upgrades and custom features

Premium Services and custom development are optional. The author sells installation, upgrades, migration, support and customization. SMS, payments, reports and third-party integrations are not in the core product and would be built to your specification. Ask whether support is retainer-based or per incident, what response commitment is included, and who owns the custom code after delivery.

What a move from Bookings to Easy!Appointments involves

The sequence turns Bookings services, staff and history into a self-hosted Easy!Appointments instance that customers can book against, with the Exchange scheduling mailboxes retired once bookings run cleanly on the new system.

  1. Inventory services, staff and booking history

    Start by listing every Bookings calendar, the services it offers, the staff members assigned to each service, and the customer details and future appointments you need to keep. Bookings exposes a 120-day appointment report from the Home tab, but full history usually needs Microsoft Graph or EWS, as covered in the export guide. The step is done when a signed-off inventory lists each calendar with its services, staff, working hours and the appointments that must carry over, and the owner of each calendar has confirmed it.

  2. Stand up the PHP and MySQL environment

    The platform team installs the runtime Easy!Appointments requires: PHP 8.2 or later, a MySQL database, and Apache or Nginx, inside your own cloud account, data center or private network. Confirm the current requirements against the project's repository before you build, since the stack is set by the release you choose. The step is done when the web server answers on an internal hostname, the database is reachable only from the application tier, and the install URL loads, with TLS and backups configured by the same team that runs your other internal services.

  3. Install and configure the application

    Create the database, copy the Easy!Appointments files to the web root, edit the configuration file with database credentials and the public URL, then run the installer from the browser. Choose the release deliberately, because the project publishes stable and beta builds and the upgrade path differs between them. The step is done when an administrator account can sign in, the installer has completed without errors, and the application's own settings reflect your organization's name, time zone and language.

  4. Configure services and providers

    Recreate each Bookings service as an Easy!Appointments service with its duration, buffer and category, then add each staff member as a provider and link providers to the services they deliver. Set working hours, breaks and holidays per provider so availability matches what Bookings showed. Compare a sample of slots for each service against the original calendar. The step is done when every service has at least one linked provider, the availability for a test week matches the Bookings view, and the business owner has signed off the list.

  5. Connect calendars and sync

    Connect each provider's calendar to the application using the calendar sync option, which currently covers Google Calendar. If your staff calendars live in Exchange or another CalDAV or iCalendar source, confirm the supported integration before you commit, since the Google Calendar sync is the documented path and anything else needs custom development or a different tool. The step is done when a booking made in the public page appears in the staff member's calendar and a change in that calendar blocks the matching slot.

  6. Rebuild confirmation and reminder messages

    Bookings sends its own confirmation and reminder emails, so write equivalent templates for Easy!Appointments, covering the booking confirmation, rescheduling, cancellation and any reminder timing your customers expect. Confirm which notifications the installed release sends natively and which need custom development, such as SMS. Check that the sending mail account is one your organization controls and that headers and reply addresses are correct. The step is done when a test booking triggers each message type and a reviewer has approved the wording.

  7. Replace Teams meeting links

    Where Bookings created Teams meetings for appointments, decide how each meeting type will work after the move, whether that is a self-hosted video tool, a phone call or an in-person location. Put the new meeting instruction or link into the booking confirmation and reminder templates. The step is done when every appointment type has a defined meeting method, the templates reference it, and staff who ran Teams meetings from Bookings know the replacement.

  8. Run parallel bookings and cut over

    Publish the new booking page alongside Bookings for a short overlap, and route new customer bookings to Easy!Appointments only after staff have checked that calendars, reminders and provider availability agree. Keep the Bookings page reachable with a notice pointing to the new address during the overlap. The step is done when a defined set of test and live bookings have matched across both systems, the public link has been switched, and the old Bookings page has been set to stop accepting new appointments.

  9. Retire the Exchange scheduling mailboxes

    Once no active appointments remain in Bookings and your records are archived, remove the Bookings calendars and the Exchange scheduling mailboxes behind them, after confirming that retention and legal hold rules allow it. Revoke any Graph or EWS application permissions used for the export. The step is done when the mailboxes are removed or set to the retention your policy requires, the export archive is stored under your records process, and the Bookings and Graph access has been removed from your tenant.

Who runs an Easy!Appointments server after launch

Once Easy!Appointments is live, someone inside the organization owns a PHP and MySQL server that takes bookings from the public internet. The operating work falls into five recurring tasks: applying PHP and MySQL security updates, applying Easy!Appointments releases, testing backups, renewing certificates and watching the service. Microsoft runs all of this for Bookings today, so the handover should be written down before cutover. Assign each task to a named role, with a backup person, and record the schedule in your change calendar.

Release management needs a deliberate decision. Easy!Appointments 1.6.0 was published on May 27, 2026, and 1.6.1 is in beta, according to the release page on the project's GitHub releases. Confirm the current stable version before you go live, then decide who tests a new release in a staging copy before it reaches production. Restore tests matter more than backups alone: restore the database and files to a separate host at least once a quarter and confirm that bookings, providers and services come back intact. Certificate renewal and uptime checks are routine, but they fail quietly unless someone is alerted.

Support routes are community channels: a Google group, GitHub and Discord, as listed on the project website. Those are useful for diagnosis but carry no response commitment. Your internal team needs Linux administration, web server and PHP configuration, MySQL backup and restore skills, and enough time each month for patching and testing. A retainer makes sense when no one on staff can handle a failed upgrade within a working day, when the booking site is customer facing at fixed hours, or when you need a contractual support window. Ask any provider to put response times, upgrade responsibilities and restore testing in writing.

Questions buyers ask before moving off Bookings

What does it cost to switch from Microsoft Bookings to Easy!Appointments?

The software itself carries no license fee, since Easy!Appointments is free with no recurring fees or booking commissions, according to its website. The real cost is the work around it: a server running PHP 8.2 or later with MySQL, a web server, backups, patching, and the time to rebuild services, staff, booking pages and reminder emails. Bookings has no standalone license, so its cost sits inside your Microsoft 365 plan, which means the saving depends on what else those plans cover. Ask any quote to split one-time work (installation, migration, customization) from recurring work (hosting, upgrades, support), and to state which Microsoft 365 licenses you can actually drop.

How long does a move from Bookings take?

The duration depends mostly on how many services, staff members and booking pages you have, how much booking history you need to keep, and how many confirmation and reminder emails must be rebuilt. Easy!Appointments installs by creating a database, copying files, editing the configuration file and opening the install URL, so the technical setup is short; the configuration and data mapping take longer. Parallel running, where both systems accept bookings for a short period, adds time but reduces risk. No duration is fixed here, so ask any provider for a timeline in writing, tied to a defined scope.

Can our own team migrate from Bookings without outside help?

A team with comfortable PHP, MySQL and web server administration can install Easy!Appointments in-house, because the installation steps are documented on the project's GitHub repository. The harder parts are exporting history, mapping Bookings services and staff to providers, and replacing Teams meeting links, which need someone who can work with Microsoft Graph or exports and test end to end. Also plan for ongoing ownership, since upgrades, security patches and backups become your responsibility. Outside help is useful for a fixed-scope migration with written deliverables, or for a retainer covering upgrades and support.

What does the move require from IT and operations teams?

IT needs to provision a server or virtual machine, a MySQL database, TLS certificates, DNS records, backups and monitoring, and to decide how the system authenticates staff. Operations needs to own the service catalog, provider schedules, holiday rules and the customer-facing booking page. Someone must also decide how Google Calendar synchronization is configured for each provider, since that is the calendar link Easy!Appointments documents. Confirm who is on call for outages and who approves changes before the cutover date.

Can Easy!Appointments take payments or send SMS?

Not out of the box. The project's website says custom development can add SMS, payments, reports, reminders and third-party integrations, so these features are a scoped build rather than a setting. If you take payments for appointments, confirm the payment provider, how card data is handled, and who is responsible for PCI DSS obligations before scoping the work. For SMS, confirm the messaging provider and its consent and sender requirements in your own region.

How are Teams and Exchange users affected by the switch?

Bookings is tied to Exchange mailboxes and produces Teams meeting links, so those dependencies end when the booking calendars move. Staff who used Bookings calendars will need Easy!Appointments provider accounts, and existing Teams meeting links in invitations will need replacing with whichever video tool you choose. Keep the Exchange scheduling mailboxes running until bookings have been migrated and confirmation emails are tested, then retire them. Ask your Microsoft 365 administrator to confirm which licenses and mailboxes are affected before anything is removed.

What should we check in a quote before agreeing a scope?

Ask for the scope in writing: the number of services, providers and booking pages, the data to migrate and the period of history to keep, the integrations in use, and the acceptance tests. Ask which items are one-time and which recur, and what is excluded, such as payments, SMS or custom reports. Confirm who holds the server, backups and credentials after handover. DeployOpen plans and implements self-hosted platforms in your own infrastructure and provides fixed-scope engagements with scope and deliverables agreed in writing before work begins.

How DeployOpen helps you evaluate, implement or migrate

DeployOpen plans and implements self-hosted Easy!Appointments inside your own infrastructure, so appointments, customer details and staff calendars stay on servers you control. We start from your Bookings services, staff and reminder rules, then agree the work in writing before any build begins.

How we scope

  • Inventory your Bookings services, staff members, durations and customer-facing booking rules
  • Map each Bookings staff calendar to an Easy!Appointments provider and confirm the Google Calendar sync need
  • Agree in writing which reminders, payments and Teams meeting replacements are in scope, and which are not

How we build

  • Install Easy!Appointments on PHP 8.2 or later with MySQL in your own environment, with the version confirmed at build time
  • Configure services, providers, working hours and booking pages, then test bookings, cancellations and reminders end to end
  • Document any custom development for SMS, payments or reports as a separate, costed item in the written scope

How we hand over

  • Deliver runbooks for installation, configuration changes, backups and restores of the MySQL database
  • Provide an admin guide for staff who manage services, providers and customer records after go-live
  • Agree a cutover plan covering Exchange scheduling mailboxes and retirement of old Bookings pages

How we support

  • Offer ongoing support, upgrades and testing as a retainer after the fixed-scope engagement ends
  • Plan upgrades against the Easy!Appointments release notes and test them in a staging copy first
  • Confirm with your team which support channels and response expectations go into the retainer before signing

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.