If you have arrived here from a search about connecting Google Calendar to WordPress, you are probably at one of three points. You are deciding whether to do it at all. You are halfway through the Google Cloud console and it has just asked you something you were not expecting. Or you are already live and wondering why a slot you blocked out this morning is still showing as bookable.
This page is the map. It covers the subject in the order you actually meet it — the three technical routes and why two of them disappoint, the setup path from start to finish, how availability is really calculated, what to change once it works, and what running the thing looks like month to month. Each section links to the article that goes deeper.
Worth saying up front: we make a plugin that does this, so we are not a neutral party. What we can do is be accurate about where it fits and straight about where it does not, which is what the rest of this page tries to be.
The short version
- Three routes exist — an embedded iframe, a hosted scheduler like Calendly, or a plugin that talks to the Google Calendar API. Only the third keeps the booking on your own domain.
- The one-time cost is a service account — roughly twenty minutes in the Google Cloud console, and the only genuinely fiddly part of the whole exercise.
- After that, your calendar is the database. Block out Thursday afternoon in Google Calendar and Thursday afternoon disappears from your site. There is no second schedule to maintain.
The three ways to connect the two
Almost every approach is a variation on one of three ideas, and they differ in a way that matters more than any feature list: where the booking actually happens.
Embed your calendar as an iframe. Free, takes two minutes, and shows people your schedule. The catch is that it only shows — a Google Calendar embed has no concept of taking a booking, so visitors end up emailing you to ask what suits. Why Google Calendar iframes do not work for real booking covers this in detail, and How to add Google Calendar to WordPress: iframe vs plugin walks through both side by side if you want to see the difference before committing.
Send people to a hosted scheduler. Calendly and its peers work well and are genuinely easy to set up. What you give up is the last step of your own funnel: the visitor leaves your domain at the exact moment they were ready to commit, and lands on a page carrying someone else’s branding. How to keep clients on your website when they book is the argument for caring about that, and Why I stopped using Calendly on client sites is the same conclusion reached the long way round.
Use a plugin that talks to the Calendar API. The booking form lives on your site, reads your real availability, and writes the appointment straight back into your calendar. More setup than the other two, and the only one where nobody leaves your domain. Plugin vs iframe vs SaaS compares all three properly, including the cases where a hosted tool really is the better answer.
Setting it up, in order
If you take the plugin route, the work happens in this sequence. Doing it out of order is the usual source of the “it says my calendar is empty” support email.
- Create a Google service account. This is the part people get stuck on, so it has its own article: How to set up a Google service account for WordPress. A service account is a robot user with its own email address — you share your calendar with it exactly as you would with a colleague.
- Share your calendar with it and connect the plugin. The full walkthrough from empty site to working widget is in How to add Google Calendar booking to your WordPress site.
- Set your working hours, slot length and buffer. This is where you decide what the widget is allowed to offer, as opposed to what your calendar happens to leave free.
- Test it before you announce it. How to test your booking setup before going live is a checklist rather than an essay — book a real slot, check the email, check the calendar, cancel it, check it freed up.
How availability is actually calculated
This is the part worth understanding properly, because it explains most of the surprises.
A slot appears on your site when two things agree: your working hours say the slot exists, and Google Calendar says nothing is already in it. The second half comes from your calendar’s free/busy data, read live at the moment someone opens the widget. Nothing is copied or cached into WordPress, which is why blocking out an afternoon in Google Calendar removes it from your site immediately, with nothing to sync and nothing to remember.
The corollary catches people out: anything in that calendar blocks a slot, including events you would not think of as appointments. A lunch, a reminder, an all-day event marked busy. That is usually the answer when someone asks why Tuesday vanished.
Two visitors landing on the same slot at the same moment is a separate problem, solved with a lock rather than a calendar read — How to prevent double bookings in Google Calendar with WordPress explains what actually happens in that race and why free/busy alone is not enough to win it.
Making it look like it belongs to you
The reason to self-host the booking step is that it looks and behaves like the rest of your site. That only pays off if you actually take the ten minutes to style it — a default widget on a carefully designed page is its own kind of jarring.
How to style the booking widget to match your theme covers colors, fonts, corner radius and the custom CSS escape hatch for the cases the settings do not reach.
The other half of fitting your business is what you ask for. Every field you add costs you some completions, so the question is which ones earn their place — How to collect intake information at booking makes the case for doing most of it with one well-labelled notes field instead of a long form.
What happens after someone books
The booking itself is the easy part. The confirmation email is what the client judges you on, because it is the only artefact they keep.
Automatic booking confirmation emails in WordPress covers the templates, the tokens that fill in names and times, and the calendar invite that lets the guest add it to their own diary in one tap.
If the appointment is a call rather than a visit, the meeting link should be created at the same moment as the booking rather than sent by hand afterwards. How to add a video meeting link to every WordPress booking goes through the options — including which ones need a Google Workspace account and which work on a personal Gmail.
Running it once it is live
Most articles about booking plugins stop at the moment the first appointment lands, which is roughly where the actual work starts.
Day to day, the calendar is enough — it is where the appointments are, and it is already on your phone. What the calendar cannot do is answer questions about the shape of your work: how many consultations you ran last quarter, which of them turned into paid work, what to put on an invoice at the end of the month.
That is what the bookings dashboard in WordPress is for. It holds every booking ever made, searchable and filterable by status, timeframe or a specific date range, and it will export the filtered list to a CSV — so pulling one month for invoicing does not mean scrolling a calendar and retyping. Because the data sits in your own database rather than someone else’s, that export is always available to you, at no tier and with no limit. The documentation on exporting covers the columns and how the filters carry through.
It is also the honest answer to the question of what happens if you stop paying. Your appointments are in your Google Calendar and your records are in your database. Neither is hostage to a subscription.
If you are coming from Calendly
Most people reading this already have something working. The move is less disruptive than it sounds, mainly because Google Calendar is on both sides of it — your existing appointments are already in the calendar, so nothing has to be migrated in the usual sense.
- How to migrate from Calendly to WordPress — the step-by-step, including what to do about links you have already sent out.
- Calendly vs CalNative Booking — the direct comparison, feature by feature.
- 5 Calendly alternatives for WordPress without the monthly fees — the wider field, ours included but not alone.
- Self-hosted vs Calendly for coaches — the same decision framed around one profession.
Choosing between WordPress booking plugins
“Booking plugin” covers an enormous range, from a single-purpose widget to something closer to practice-management software. Picking the wrong end of that range is either overkill you never grow into or a ceiling you hit in month two.
The quickest way to place yourself: if a client has to choose which person they are booking, or money changes hands to secure the slot, you need a full booking system rather than a calendar widget. If neither is true, a widget is the right size.
- Best WordPress booking plugin for small business — the broad overview if you are starting from nothing.
- Amelia vs CalNative Booking — Google Calendar sync compared.
- LatePoint vs CalNative Booking — a full booking system against a calendar widget.
- Simply Schedule Appointments vs CalNative Booking.
- WooCommerce Bookings vs CalNative Booking — relevant the moment you need to take payment.
- CalNative Booking vs Alnora — a calendar widget against a full practice-management system.
The version for your line of work
The mechanics are the same everywhere, but what counts as a good booking flow is not. A therapist has confidentiality and intake questions to think about; a wedding planner is being judged on presentation from the first click; an accountant has a January that looks nothing like the rest of the year. These take the same setup and argue it through one profession at a time.
- Therapists and counsellors
- Freelance consultants
- Private tutors
- Photographers
- Personal trainers
- Solicitors
- Interior designers
- Nutritionists and dietitians
- Accountants and financial advisors
- Virtual assistants
- Wedding planners
- Yoga and Pilates instructors — including where it does not fit, since group classes are a different problem.
Where to start
If you are still deciding, read plugin vs iframe vs SaaS and stop there until you have picked a route. The setup articles are not much use before that.
If you have decided and want it working today, go straight to the service account walkthrough. It is the only step that requires patience; everything after it is filling in settings.
And if you already have a booking widget live and something about it is not behaving, the answer is usually one of two things: an event in your calendar you had forgotten was there, or a working-hours setting that disagrees with what you assumed. Both are covered in the testing checklist, which is worth running even on a site that has been live for months.