Google Calendar and Booking for Joomla
Google Calendar events on your website and online appointment booking — no copying by hand
One calendar for the website and the team. No double bookings. A fast site even when Google is down.
Events, opening hours, room occupancy or free consultation slots — chances are you already keep them in Google Calendar. SemaCalendar shows that calendar on your website — as a month, week or list and in a module — and lets visitors book a free slot. A confirmed booking is written straight into the Google Calendar of whoever is being booked.
Why you need it
An embedded Google Calendar frame looks foreign on a website, is awkward on a phone and shows either everything or nothing. Booking by phone and email means back-and-forth messages, copying into the calendar and now and then two people for the same slot.
What a website calendar should do
- Look like part of the site, not a foreign frame
- Show only what the visitor is allowed to see
- Read comfortably on a phone
- Load fast, even when Google is down
- Let search engines find the events
What booking without a system costs
- Calls and emails about every free slot
- Copying appointments into the calendar by hand
- Two people booked for the same time
- Bookings with a fake email address or from a bot
What SemaCalendar solves
You keep managing the calendar in Google as you always have. The website regularly copies it into its own database, so pages are fast and nobody asks Google on a page view. The only thing the website writes to Google is confirmed bookings.
Calendar on the website
- Month, week and list — phones get the list, browsers without JavaScript a list of upcoming events
- Several calendars on one page — each in its own colour, each visitor sees only the ones they may
- Event page — description, location and structured data for search engines
- Module — upcoming events or a small month anywhere in the template
What visitors see
- Three visibility levels — full details, title and time only, or just “busy”
- Joomla access levels — a calendar for logged-in members only, for example
- Safe descriptions — links and formatting from Google stay, scripts and embedded frames don’t
Appointment booking
- Resources and purposes — who or what is booked (a person, a room, a service) and for what (length, buffer, location)
- Only truly free slots — based on the resource’s working hours and on busy times in its Google Calendar
- Email confirmation — the slot is held until the visitor confirms it by link; captcha and consent to data processing
- Written to Google, with an invitation — the confirmed booking lands in the resource’s calendar and the visitor gets an invitation for their own
- Cancel with one link — a cancelled booking disappears from the calendar and the slot is free again
How it works
Step by step
Share the calendar
The website gets its own Google service account and you share the calendar with it like with a colleague. No password to your account, and you can revoke access any time.
The scheduler loads events
Every few minutes it brings changes from Google into the website’s database. The Verify Access button tells you right away that the connection works.
Add a page
A Calendar or Booking menu item, or the module. The site template takes care of the look.
For the site owner
- Dashboard overview — Events and bookings for the next 14 days and the sync status of every calendar.
- Bookings in the administrator — Confirm a slot agreed by phone on the visitor’s behalf, cancel a booking with one click.
- A Google outage does no harm — The booking is confirmed anyway and the scheduled task writes it to the calendar later.
- GDPR without manual work — Export and erasure through Joomla Privacy, old bookings are anonymised automatically, in Google Calendar too.
- Conversion tracking — With the SemaTrack extension every confirmed booking arrives as an event, without personal data.
What you can configure
| Setting | Description |
|---|---|
| Calendars | Google calendar, colour, visibility, access level, period back and ahead |
| Calendar page | Default view, week hour range, number of events without JavaScript |
| Module | Upcoming events or a small month, link to the calendar page |
| Resources | Working hours, Google calendar, email for copies, lead time, booking horizon |
| Purposes | Length, buffer between bookings, location, resources |
| Booking | Hold time, captcha, consent text |
| Emails | Five templates in Joomla Mail Templates |
| Personal data | Anonymise bookings after a chosen number of months |
| Running | Joomla Scheduled Tasks, sync interval |
| Appearance | Template overrides for the calendar, event, booking and module |
Technical details
| Property | Value |
|---|---|
| Joomla | 5.2 and later, 6.x |
| PHP | 8.1 and later, openssl extension |
| Database | MySQL 8 / MariaDB 10.6+ |
| Google Calendar API, service account | |
| Hosting | shared hosting is enough, no Composer or Google libraries |
| Parts | component, module, scheduler plugin, privacy plugin |
| Languages | Czech, English |
| Licence | GNU GPL v2 or later |
Frequently asked questions
Do I have to give the website my Google password?
No. The website uses a Google Cloud service account, and you share the calendar with it just like with a colleague. Stop sharing and the access is gone.
Do I pay Google anything?
No. A Google Cloud project and the Google Calendar API come without fees. The website asks Google only from the scheduled task, not on every page view.
How fast does a change in Google show on the website?
At the next sync, depending on the task interval — usually within 5 to 15 minutes. The Sync Now button loads it immediately.
Will the calendar show private events?
Only as you set it. A calendar with “busy only” visibility shows the time without a title or description, and an access level can hide it from guests completely.
Can two people book the same slot?
No. Availability is checked when the form is sent and again on confirmation. An unconfirmed slot is released to others after the hold time.
What if Google is down?
Pages show the last state loaded into the website’s database. A confirmed booking is saved and the scheduled task writes it to Google Calendar as soon as Google responds.
Do I have to use booking?
No. The website calendar works on its own; booking starts once you add resources, purposes and a menu item. And the other way round: a resource doesn’t need a Google calendar, bookings then stay on the website only.
Can visitors pay for a booking?
Not yet. Version 1 has no payments or recurring bookings — it is made for appointments that need no deposit.
What about GDPR?
Bookings plug into Joomla Privacy (export and erasure on request) and are anonymised automatically after the period you set, in Google Calendar too. The component sets no cookies.
Will it run on shared hosting?
Yes. SemaCalendar needs neither Composer nor Google libraries, and the sync runs through Joomla Scheduled Tasks — on site visits or from the hosting’s cron.