Why a self-hosted Calendly alternative for EU data residency is a transfer question
A DPO or CIO facing a Calendly renewal with EU invitee data has one core question: can invitee names, emails and answers leave the EU without Chapter V safeguards? They can only if a safeguard applies, and a self-hosted Easy!Appointments or Cal.diy instance in an EU datacenter removes the need for one, because the data never reaches a third country. Calendly states that it stores user and invitee data in US-based data centers run by Google Cloud and AWS, and it relies on Standard Contractual Clauses in its DPA for transfers from the EEA, plus a UK Addendum for UK transfers. Those clauses are a legitimate transfer tool, but they are a contractual arrangement you must document, not a change in where the data sits. Read the current DPA and the Calendly help center page on data storage and international data transfers before the renewal, and confirm with Calendly which sub-processors touch invitee records.
Under GDPR Article 44, every transfer of personal data to a third country, including onward transfers, must meet the conditions in Chapter V. The EDPB Guidelines 05/2021 make the test practical: storing data in a cloud outside the EEA is a transfer, and so is remote access from a third country, even if the person only views data on a screen for support or administration. That means a vendor's US support staff opening a booking record can count as a transfer, not only the database sitting in Virginia. When you run the software yourself in an EU datacenter, you control who administers the database and from where, so you can keep that test inside the EEA by design.
Your decision is therefore about where the database, backups, logs and administrator access sit, and who can reach them from outside the EEA. Ask your hosting provider whether backups, support access and any monitoring tools stay in the EU, and document the answer. Also confirm whether the hosting provider is itself subject to third-country law with extraterritorial effect, since the EDPB treats a request from such a authority as a potential transfer. Keeping data on your own servers changes the exposure profile, but it does not remove the need for an assessment, and independent auditors, not DeployOpen, decide whether your arrangement meets your obligations.
What GDPR Chapter V requires for booking data
Booking data is personal data: invitee names, emails and answers to intake questions. Each card below explains one part of the transfer rules that decide whether a hosted booking tool can keep that data where your organization expects it, and what to check before choosing a self-hosted replacement.
Every third-country transfer needs cover
Chapter V applies to each transfer of personal data to a third country, and to onward transfers that the first recipient makes further along the chain. For booking data, that means the hosted tool's sub-processors, backups and support tooling all count, not only its primary database. Ask the vendor for its sub-processor list and the regions each one uses, then map every location against the transfer mechanism you rely on.
Remote access also counts
Under the EDPB's guidance, a support engineer in a third country who can view invitee records on screen is making a transfer, even if the data never leaves the EEA at rest. Storage in a cloud region outside the EEA is also a transfer. For a hosted booking service, check where vendor staff can log in, not just where the database sits, and whether support access is logged and time-limited.
Schrems II kept SCCs, dropped Privacy Shield
In July 2020 the Court of Justice invalidated the EU-US Privacy Shield adequacy decision but held that standard contractual clauses remained valid. Calendly relies on SCCs for EEA transfers, so the question for your file is whether the clauses are backed by a transfer impact assessment that addresses US public authority access. Ask for that assessment, not only the signed DPA.
Data Privacy Framework depends on Latombe
The EU-US Data Privacy Framework gives adequacy only to US organizations on the Data Privacy Framework List, under Commission Implementing Decision (EU) 2023/1795. An appeal against the General Court's September 2025 judgment upholding it is pending as Case C-703/25 P. Until that appeal is decided, treat DPF listing as a fact to verify for each vendor, not a permanent basis for transfers.
Fines reach EUR 20 million
Infringements of the transfer rules in Articles 44 to 49 fall under the higher fine tier of Article 83(5)(c): up to EUR 20 million or 4% of worldwide annual turnover, whichever is higher. The exposure sits with the controller who chooses the tool, so the scheduling decision belongs in the record of processing and the transfer assessment, not only in procurement. Check with your data protection officer how that exposure is documented.
Where Calendly meets the constraint and where it does not
Calendly's help center states that it stores user and invitee data in US-based data centers managed by Google Cloud and AWS, and that its DPA relies on Standard Contractual Clauses for transfers from the EEA, with a UK Addendum for UK transfers. For a controller, that is a documented transfer mechanism, and the question that remains is not whether a mechanism exists but whether it holds up against the law of the destination country. Confirm the current wording in the Calendly help center before you rely on it, and have your own counsel review the DPA, the sub-processor list and the transfer impact assessment you are required to document.
The residual exposure sits in third-country public authority access. EDPB Recommendations 01/2020 state that where a cloud provider needs access to data in the clear and the destination's public authority powers go beyond what is necessary and proportionate, the EDPB cannot envision an effective technical supplementary measure. Encryption that the provider can break does not close that gap, so the assessment has to focus on who holds keys, what the provider can read, and what legal powers reach it. Note also that 18 U.S.C. 2713 applies regardless of where the data is located, so an EU data center operated by a US provider does not, on its own, remove the exposure. Ask Calendly in writing how it responds to government requests and whether it publishes a transparency report.
Self-hosting changes the question rather than answering it for every organization. When invitee names, emails and answers sit on servers you run in an EU data center, with the database, backups and logs under your own control, the transfer analysis narrows to your own subcontractors and to any remote access from outside the EEA, which the EDPB treats as a transfer. Your decision is therefore whether the self-hosted setup removes enough third-country reach for your risk appetite, and how to document that choice. Confirm who administers the server, where support staff connect from, and whether your hosting provider is itself subject to non-EU law with extraterritorial effect.
Which open-source options keep invitee data in the EU
Easy!Appointments is a self-hosted appointment scheduler. The code is licensed under GPL v3.0 and its content under CC BY 3.0, and it runs on PHP 8.2 or later with a MySQL database behind Apache or Nginx. Customers, providers, services and appointments are stored in the database you deploy, so keeping invitee names, emails and answers in the EU comes down to where you run the application, the database and the backups. Review the Easy!Appointments source repository before you commit.
- Data location: Place the web server, MySQL database and every backup copy in an EU region or EU-based datacenter that you contract directly.
- Google Calendar sync: Syncing bookings to Google sends event details to Google. That is a transfer to assess under Chapter V of the GDPR, so decide provider by provider whether the sync is required.
- Installation effort: Setup means creating a database, copying files, editing the configuration file and opening the install URL. The author sells installation, upgrades, migration and support as paid Premium Services.
- Feature gaps: SMS, payments, reports, reminders and other third-party integrations come through custom development, which is an additional cost and maintenance line.
- Support model: Community help runs through a Google group, GitHub and Discord. Any contractual support, uptime commitment or security response time has to come from a separate agreement.
Confirm the hosting location of every server, backup and mail relay, and whether the Google Calendar connection must stay enabled for each booking type.
Cal.diy is the community fork of Cal.com. It is 100% MIT licensed, with all enterprise and commercial code removed, and it is built with Next.js, tRPC, React, Tailwind CSS and Prisma. It requires Node.js 18 or later and PostgreSQL 13 or later, and a Docker image is published on Docker Hub. Deployed in an EU datacenter, bookings and invitee details stay on your infrastructure, but the project's own guidance limits where it should run, which matters for an EU booking flow that carries personal data.
- Intended use: The README says self-hosting is at your own risk and strictly recommended for personal, non-production use. Treat any EU deployment as a scoped pilot unless your own risk owner accepts that position in writing.
- Removed features: Teams, Organizations, Insights, Workflows, SSO and SAML were removed, so there is no central identity control and no team routing from the product itself.
- Connected services: Google Calendar, Microsoft Graph, Zoom, Daily.co, Webex, HubSpot, Zoho and Pipedrive connect from the Settings, Integrations page. Each one sends meeting or contact data to that provider and needs its own transfer assessment.
- Operating burden: The README calls for advanced knowledge of server administration, database management and securing sensitive data, and that work falls on your team or your contractor.
- Commercial contrast: Cal.com's hosted pricing offers a US or EU hosting choice on its paid plans. That is a managed route with a different contract, so compare its data processing terms with self-hosting rather than assuming equivalence.
Confirm the README's current guidance, your booking volume against the non-production position, and which external integrations you will disable to keep invitee data in the EU.
Nextcloud's Calendar app offers appointment slots that visitors book through public or secret links, with buffers, daily limits and email confirmation. For an organization already running Nextcloud in an EU datacenter, bookings, attendee details and calendar entries sit in the same instance, so scheduling data adds no new processor. The option only makes sense if Nextcloud is already in your estate, since its booking features are narrower than Calendly's routing, payments and integrations.
- No new processor: Appointment data lives in your existing Nextcloud database and file storage, so the residency question reduces to the instance you already operate.
- Email path: Confirmations leave through your mail server. Confirm that the SMTP relay and its logs are in the EU, or that any transfer outside it is covered by your assessment.
- Booking features: Slots, buffers, daily limits and public or secret links are available. Routing, payment collection and third-party integrations have no direct equivalent, so plan manual steps or custom work.
- Version and feature status: Confirm that the appointments feature is enabled in your release and which Nextcloud version you run, because feature sets change between releases.
- Ownership: Your Nextcloud operator also owns booking uptime, backups and access control, so scheduling is only as available as that instance.
Confirm the appointment settings in your own instance, the location of its database and mail relay, and whether your Nextcloud hosting provider is a processor you have assessed.
Comparing the options against EU residency criteria
This table compares Easy!Appointments, Cal.diy and Nextcloud appointments on the criteria that matter for keeping invitee data in the EU: storage location, licence, team and routing features, SSO and operator effort. Read each row as a question to answer in your own environment, and treat items marked to confirm as open until you have checked them with the project or your own deployment. The main takeaway is that residency depends on where you host the platform, not on the software alone.
| Criterion | Easy!Appointments | Cal.diy | Nextcloud appointments |
|---|---|---|---|
| Where data is stored | In the MySQL database on servers you choose, so EU residency depends on your hosting. Confirm backup and log locations. | In your PostgreSQL database on servers you control. Google, Microsoft or Zoom connections send data to those providers. | On your Nextcloud instance. Confirm where the instance, its backups and any email relay sit. |
| Licence | Code under GPL v3.0 and content under CC BY 3.0. | 100% MIT licensed, with enterprise code removed. | Confirm the licence of the Calendar app and its appointments feature in your Nextcloud version. |
| Team and routing features | Services and providers, online booking and Google Calendar sync. Confirm whether routing rules exist. | Teams, Organizations, Workflows and routing were removed. Plan for personal event types only. | Slots with buffers, daily limits, and public or secret links. Confirm whether any routing equivalent exists. |
| SSO support | Not covered by the supplied project facts. Confirm with the project before relying on it. | SSO and SAML were removed, so no SSO is available in Cal.diy. | Confirm whether your Nextcloud login or an SSO app covers appointment pages. |
| Operator effort | PHP 8.2 or later, MySQL, and Apache or Nginx. Installation is a database, file copy and config edit. Paid installation and support are offered by the author. | Node.js 18 or later, PostgreSQL 13 or later and Docker images. The README says advanced server administration skills are needed and self-hosting is at your own risk. | Depends on how your team already runs Nextcloud. Confirm who handles updates, backups and patching. |
How to deploy Easy!Appointments in your own EU datacenter
This sequence moves Easy!Appointments onto infrastructure you control in the EU, so invitee names, emails and answers are stored and processed on servers under your governance. Each step closes with a check you can verify before moving on.
Choose the EU hosting location and provider
Your team, or a partner you engage, selects an EU datacenter or private cloud region and the operator of that facility. Ask the provider in writing where backups, logs and support sessions are located, who holds administrative access, and whether any remote access can come from outside the EEA. Confirm the answers against the provider's contract and data processing terms. Done when you hold a written location and access-control statement that covers the server, the database and the backup target.
Provision the PHP, MySQL and web server stack
Create a Linux server in the chosen environment and install PHP 8.2 or later, a MySQL database and either Apache or Nginx, as the Easy!Appointments GitHub repository requires. Restrict database ports so only the application server can reach them, and keep the operating system and packages on a supported update path. Done when PHP reports version 8.2 or later from the command line and the database accepts a local connection from the application host only.
Create the database and copy the application files
Create a dedicated MySQL database and a database user limited to that database. Copy the Easy!Appointments files from the official GitHub repository or release archive into the web root, and verify the download against the checksum or signature the project publishes, where one is available. Keep the configuration file out of any publicly served directory. Done when the database exists, the user can log in with its own credentials, and the application files are in place.
Edit the configuration file and run the installer
Set the database host, name and credentials in the configuration file, then open the install URL in a browser to complete setup and create the first administrator account. Use a strong, unique administrator password and record it in your secrets manager. Once installation finishes, remove or restrict the installer so it cannot be run again. Done when the admin panel loads over the internal address and a test service and provider can be created.
Enable TLS, backups and access logging
Issue a certificate for the booking hostname and force HTTPS, so invitee details are encrypted between the browser and your server. Schedule encrypted database and file backups to storage in the same EU jurisdiction, and test one restore on a separate host. Turn on web server access logs and application logs, set a retention period that matches your policy, and restrict who can read them. Done when a restore test succeeds and the logs show requests to the booking page.
Assess and then connect Google Calendar
Before enabling the Google Calendar sync, complete a transfer assessment of that integration. Google receives calendar data from your instance, so identify what calendar fields are sent, where Google processes them and which contractual safeguards apply to that data flow. Record the outcome with your data protection lead. Only after the assessment is approved, add the Google Calendar credentials and run a test booking against a non-production calendar. Done when the assessment is signed off and the test event appears correctly in both systems.
Cut over booking links and reminders
Rebuild reminder and notification settings on the new instance, then replace the old booking links on your website, email signatures and invitations. Keep the previous booking page running for a short overlap period you agree in advance, and confirm that no new bookings are created there. Ask your data protection lead to confirm which invitee data remains in the old service and how it will be handled. Done when new bookings arrive only on the EU-hosted instance and every public link points to it.
Evidence a DPO or auditor will ask for
A DPO or auditor will test whether invitee data stays in the EU and whether every remaining flow out of it is documented. The cards below cover the records and assessments that show this for a self-hosted booking system. DeployOpen prepares this evidence with you, but auditors and supervisory authorities are the ones who assess it.
Records of processing and data location
Your Article 30 record should name the booking system, the categories of invitee data it holds (names, emails, answers to intake questions) and the physical location of the database and application servers. List every data store, including logs and exports, so none sits outside the record. Ask whether any support or administrative access comes from a third country, because remote viewing of data from outside the EEA is itself a transfer under EDPB Guidelines 05/2021.
Transfer impact assessment for external flows
Self-hosting does not remove every external flow. Calendar sync with Google Calendar or Microsoft 365, outbound email for confirmations and any SMS reminders each send invitee data to a third party. For each one, document the purpose, the data sent, the processor's location and the transfer mechanism, and assess the third-country law that applies. Where no adequacy decision or safeguard covers the flow, consider dropping the integration or minimizing the fields sent.
Access control and admin logs
Auditors will ask who can read invitee records, who can change availability and event settings, and how those actions are logged. Document the administrator accounts, how their access is granted and removed, whether single sign-on or multi-factor authentication protects the admin interface, and where web server and database logs are kept. Confirm that logs themselves contain no more personal data than necessary and that they are retained for a defined period.
Backup location and retention
Backups copy the full invitee history, so they are often the weakest point in an EU residency claim. Record where backups are written, which provider or site holds them, who can restore them and how long each copy is kept. Confirm that backup targets sit in the EU or in an approved location, that encryption keys are held separately, and that deletion requests reach backup copies within a documented window.
Article 48 position on third-country requests
If a third-country authority asks for invitee data, Article 48 means a judgment or decision is recognized in the EU only when it rests on an international agreement, such as a mutual legal assistance treaty. Write down who receives such requests, the steps for checking their basis, and when you would refuse or challenge them. Apply the same question to any hosting or support provider with a parent company outside the EU, because the CLOUD Act reaches data in a provider's control wherever it sits.
Questions buyers ask before moving EU booking data
What does a self-hosted booking migration cost, and what drives the price?
The cost comes from four separate components: hosting, integrations, installation and support. Hosting is the server, database, backups and monitoring in your own datacenter or cloud account, and it recurs. Integrations, such as Google Calendar or Microsoft 365 sync, reminders and payment connectors, are usually one-time build work, though each connected service has its own API credentials to maintain. Installation and upgrades are one-time or periodic, and ongoing support is a separate recurring line. Easy!Appointments is free to download with no recurring license fees or booking commissions, according to its website, so most of the spend is labor and infrastructure. Ask for a quote built from a written scope that lists each component on its own line, so you can see what recurs and what you can drop later.
How long does it take to move EU booking data off Calendly?
The pace is set by scope, not by the software. The main drivers are the number of event types or services, the number of calendars and providers to reconnect, how many integrations you need to rebuild, whether you must export historical meeting records, and how many booking links on your website must be cut over. Installation itself is a short technical step on a PHP 8.2 or later server with MySQL, but testing invitee emails, time zones and calendar sync takes longer. Agree on milestones and a cutover date in writing before work starts, and keep Calendly running in parallel until your test bookings pass.
What does our team need to provide for the work?
Expect to supply the people and access that only your organization holds. You will need a named owner for the booking business rules, a list of services, providers, locations and availability, access to the Google or Microsoft calendars to connect, and approval of invitee form fields so you can confirm what personal data you collect. Your infrastructure team must provide the target hosting, database, TLS certificates, backups and network controls inside your EU environment. Your data protection lead should confirm the processing record and the retention period for invitee data before cutover.
Can our internal team run this without outside help?
Yes, if you have people comfortable with PHP, MySQL, web server configuration and operating system patching. Installation is documented as creating a database, copying the files, editing the configuration file and opening the install URL, and the Easy!Appointments community supports users through a Google group, GitHub and Discord. Community help does not replace an on-call rota, a tested restore procedure or a security review of your public booking page. Many teams keep the platform in house and buy a fixed-scope installation, hardening or upgrade engagement only for the parts they cannot staff, and DeployOpen offers that kind of scoped work.
Are Calendly's Standard Contractual Clauses enough to keep EU invitee data compliant?
Standard Contractual Clauses are a transfer tool, not a guarantee of protection. Calendly states it stores user and invitee data in US data centers and relies on SCCs in its DPA for EEA transfers. Under GDPR Article 44 every transfer to a third country must meet Chapter V conditions, and the EDPB Recommendations 01/2020 say that where a destination's public authority powers go beyond what is necessary and proportionate, no effective technical supplement may be possible. The US CLOUD Act at 18 U.S.C. 2713 reaches data a provider controls regardless of location. Whether SCCs suffice for your organization is a legal assessment for your DPO or counsel. Keeping invitee data in your own EU datacenter removes the transfer question for that data.
What do the EU Data Act switching rights mean when we leave Calendly?
The Data Act has applied since 12 September 2025 and gives customers a right to switch from a data processing service to another provider or to on-premises infrastructure. Under the Act, the maximum notice period is two months and the transition period is 30 days, and switching charges are banned from 12 January 2027 (Articles 25, 29 and 50 of Regulation (EU) 2023/2854). Whether these rights apply to your specific Calendly contract, and how to exercise them, is a question for your legal team, so check your terms with Calendly directly. Before you give notice, export your booking history using the CSV reports and API, since the switching rights do not replace your own copy of the records.
Is Cal.diy suitable for production booking on our own servers?
Not as a default choice for a production booking service. The Cal.diy README says self-hosting is at your own risk, is strictly recommended for personal, non-production use, and requires advanced knowledge of server administration, database management and securing sensitive data. It also removes Teams, Organizations, SSO and SAML, which are Enterprise-only in Cal.com, and the README points commercial and enterprise scheduling users to Cal.com. If you need a customer-facing booking system for production, evaluate Easy!Appointments or a Cal.com deployment with the license terms and feature set you need, and confirm the current status of any feature with the project before you rely on it.
What changes for invitees and staff during cutover
Invitees will see new booking links, and that is the change most likely to cause confusion during cutover. Calendly links that appear in email signatures, website buttons, LinkedIn profiles and confirmation emails will keep pointing at Calendly until someone replaces them, so plan a window where both systems accept bookings and publish the new URL in every place the old one lives. Confirmation and reminder emails will also come from your own mail domain, which means SPF, DKIM and the sender address need to be set before the first live booking. Confirm these with your mail administrator, not only with the implementation team.
Staff keep their calendar connections, but the scope of each connection should be reviewed rather than carried over by default. Whether you use Easy!Appointments with Google Calendar sync or Cal.diy with Google or Microsoft 365, each account owner should re-authorize the integration on the new server, and the administrator should check which calendars are read and which are written to, so that no account gains more access than the booking flow needs. Remove the Calendly connection for each user only after bookings have been verified on the new system. Under the EU Data Act, customers have a right to switch providers or move to on-premises infrastructure. Its switching rules apply from 12 September 2025, and switching charges are banned from 12 January 2027 (Regulation (EU) 2023/2854), so ask your contract team what export and transition support your current Calendly agreement commits to.
Historical exports should be stored in the EU from the moment they leave Calendly. Meeting reports and any invitee records you download are personal data, so keep them on storage in your own datacenter or an EU location you control, restrict access to the people who run the migration, and set a retention date for them. Calendly's own export options are covered in the sibling page on exporting data from Calendly, while the step-by-step cutover for each platform is in the migration pages for Easy!Appointments and Cal.diy. Decide before cutover who signs off on the switch, who answers invitee questions during the first two weeks, and what happens to bookings made during the overlap period.
How DeployOpen deploys booking platforms under EU residency constraints
DeployOpen plans, implements, customizes, hardens, backs up and documents self-hosted open-source platforms inside the client's own infrastructure, including EU data centers or air-gapped networks. For EU residency work, the engagement starts by fixing where invitee names, emails and answers are stored, processed and administered, before any platform is chosen or installed.
How we scope
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.
- The written scope maps every place invitee data is stored, processed, logged or accessed for remote support.
- Scope records which booking platform fits, such as Easy!Appointments, Cal.diy or Nextcloud appointments, and why.
How we build
- Installation runs in your own EU data center or cloud account, with the database and file storage kept in the EU.
- Calendar integrations, such as Google Calendar or Microsoft Graph, are configured with credentials you control and documented.
- Access controls, administrator accounts, logging and backups are hardened and tested against the agreed scope.
How we hand over
- Handover includes architecture and data flow documentation showing every location and administrative access path for booking data.
- Compliance evidence is prepared for your assessors, such as records of hosting location and access configuration. DeployOpen does not issue audit reports or certifications.
- Your team receives runbooks for upgrades, backups and restores, and a list of what to confirm with your legal and privacy advisers.
How we support
- Ongoing support, upgrades and continuous security testing are available as retainers after handover.
- Security testing of the booking application and its APIs can be scoped separately from the platform build.
- Upgrade work is planned against the platform's release notes and your change process, with each change documented.

