WooCommerce cannot sell time. A product has a stock number, not a calendar, so the moment you need to sell a 90-minute slot on a specific Tuesday, a three-night rental, or a chair with one stylist attached to it, you need a booking plugin — and the choice comes down to $0, $79/yr, $199/yr or $249/yr, with a real difference between each.
Below: the criteria I judged each one against, a table of versions and prices checked on 29 September 2026 against WooCommerce 11.1.2 on WordPress 7.1.2, the two failures that break booking stores regardless of which plugin you bought (cart holds and page caching), and one widely-recommended option that has been closed on WordPress.org since February 2025.
What a booking plugin actually adds to WooCommerce
Worth being precise about, because the feature lists all blur together and the differences that matter are structural. A booking plugin bolts four things onto the product object that core has no concept of:
- A calendar in place of a stock count. Availability stops being an integer and becomes a set of date and time ranges with rules layered on top — opening hours, blackout dates, minimum and maximum duration, buffer time between bookings. Every one of those rules has to be evaluated on every page view.
- Resources. Three massage rooms, five instructors, twelve kayaks. The customer books a service; the plugin assigns capacity. Without resources you are limited to one bookable thing at a time, which is fine for a one-person studio and useless for a salon.
- A second state machine. A booking has its own status — pending, confirmed, cancelled, complete — that runs alongside the WooCommerce order status and is not the same thing. Most of the operational pain in this category comes from those two states disagreeing after a refund, a failed payment or a manual edit.
- A hold on inventory that expires. A slot in someone’s cart has to be unavailable to everyone else, but only for a while, or one abandoned cart takes Saturday morning off sale permanently. This is the least-advertised feature in the category and the one that causes the most damage when it is missing.
Everything else — Google Calendar sync, reminder emails, deposits, printable tickets — is convenience layered on those four. Which is why a plugin can have an impressive feature list and still be the wrong choice, if it handles the fourth one badly.
Three questions that narrow this to one or two options
The five criteria I judged each WooCommerce booking plugin on
Stated up front so you can reweight them if your store looks nothing like the one I assumed: a US business doing between 20 and 500 bookings a month, customers in more than one time zone, mid-tier managed hosting, payment taken at the time of booking, and nobody on staff who wants to maintain custom code.
- Whether the WooCommerce integration is in the free tier or behind a licence. This is the single biggest dividing line here, and it is not obvious from install counts. Several of the most-installed booking plugins on WordPress.org run their own checkout and treat WooCommerce as a paid payment add-on. If you want bookings inside your existing cart, coupons, tax rules and order list, that distinction decides everything.
- Booking shape: duration versus date range. Appointment plugins are built around a slot on a day. Rental plugins are built around a start date and an end date with a nightly rate. A plugin that does one well usually does the other awkwardly, and no feature list admits it.
- What happens to a slot sitting in an abandoned cart. Whether the plugin holds it, for how long, and whether it releases it automatically. Get this wrong on a store doing 200 bookings a month and you are manually freeing slots every week.
- Maintenance signals, read strictly. Tested-up-to version, time since the last release, and whether the WordPress.org listing is even open. This code touches your cart and holds customer appointment data; a stale booking plugin is a liability, not just a missing feature.
- What renewal actually costs. First-year discounts are standard in this category and renewal prices are not always on the same page. A $159 first year that renews at $199 is a $199 plugin.
WooCommerce booking plugins compared
Versions, install counts and ratings come from WordPress.org and the vendors’ own listings; prices come from each vendor’s pricing page. All checked on 29 September 2026. On a narrow screen this table stacks into one card per option rather than scrolling sideways.
| Option | Where bookings live | What you get for nothing | Paid price (29 Sep 2026) | Where it falls short |
|---|---|---|---|---|
| WooCommerce Bookings (Woo, official) | A WooCommerce product type, in your cart and order list | Nothing — paid only | $249/yr, 30-day money-back guarantee. v3.10.0, updated 18 September 2026. Fixed slots or customer-defined ranges, resources with individual availability schedules, group discounts and time-based rates, two-way Google Calendar sync, customer time zone display, confirmation and cancellation controls | The most expensive option here and the only one with no trial, so you evaluate it by buying it and using the refund window. The product page does not state a site count next to the price — confirm that at checkout before you assume it covers a staging site too. Availability rules are evaluated per request, which makes it the heaviest option on a store with many bookable products |
| Booking & Appointment Plugin for WooCommerce (Tyche Softwares) | A WooCommerce product type, in your cart and order list | Nothing — paid only | Starter $199/yr for 1 site, $159.20 first year. Business $299/yr for 5 sites, $239.20 first year. Enterprise $399/yr for 10 sites, $319.20 first year. Lifetime single store $349 one-off. 30-day no-questions refund. v9.0.0, updated 10 September 2026. Starter covers single-day, multi-night, time-based and multi-date bookings on all standard product types, plus rescheduling, resources, two-way Google Calendar sync, reminders, a front-end availability calendar and customer time zone conversion | The tiering puts ordinary things high up: deposits, printable tickets, Outlook and Zoom sit in the $399 Enterprise tier, and multi-vendor plus WooCommerce Subscriptions compatibility sit in the $299 Business tier. If you take deposits — normal for weddings, venues and high-ticket rentals — your real entry price is $399, not $199 |
| Booking Activities (free on WordPress.org) | Its own calendar, with a free WooCommerce integration | v1.18.9, 3,000+ installs, 5/5 across 120 reviews, tested to WP 7.1.2, PHP 5.6+, updated two weeks ago. Unlimited calendars, activities and bookings, drag-and-drop scheduling, repeated events and grouping, booking forms by shortcode, permission management, and a WooCommerce integration in the free version — calendar on the product page, cart expiry, and order-to-booking status sync | Free core. Paid add-ons for custom booking fields (Advanced Forms), resources (Resource Availability), pricing options (Prices and Credits), SMS and push (Notification Pack), booking on a customer’s behalf (Order for Customers) and waiting lists | 3,000 installs is a small base for code that sits in your cart, and the 5/5 rating rests on 120 reviews rather than thousands. Resource management is an add-on, so a salon or a rental fleet is not a free configuration. The interface is built around activities and calendars rather than appointments, which is a genuine mental adjustment coming from an appointment-first tool |
| Booking and Appointment for WooCommerce (Extendons, on the Woo marketplace) | A WooCommerce product type, in your cart and order list | Nothing — paid only | $79/yr with a 30-day money-back guarantee. v1.1.8, updated 28 September 2026. The cheapest way to get bookings into the native WooCommerce cart | The marketplace listing shows no star rating and no review count, so there is no public track record to read — unusual for a paid extension and the main reason to treat it as a trial rather than a decision. A third of the price of Bookings buys you a correspondingly smaller feature surface; check resources, deposits and time zone handling against your actual requirements during the refund window |
| Bookly | Its own booking system; WooCommerce is a Pro-only payment route | v28.3, 60,000+ installs, 4.4/5 across 579 reviews, tested to WP 7.1.2, PHP 5.3.7+, updated six days ago. Five services maximum, unlimited customers, a codeless booking form, email and SMS notifications, WPML support | Bookly PRO, $199 one-off on CodeCanyon under the Envato Regular License, including six months of support. 56,406 sales, 4.53 average from around 1.2K ratings. Envato listing last updated 24 March 2026 | WooCommerce support is not in the free version, and even in Pro it is a payment bridge rather than native product integration — bookings do not become WooCommerce products. The five-service cap makes the free tier an evaluation, not a plan. Six months of support on a one-off purchase means year two is unsupported unless you extend |
| Amelia | Its own booking system; WooCommerce is a paid-tier payment route | v2.4.11, 90,000+ installs, 4.6/5 across 790 reviews, tested to WP 7.1.2, PHP 7.4+, updated five days ago. Step-by-step and catalog booking forms, event booking across multiple days, Square payments, back-end calendar, services and categories, double-booking prevention, email and SMS notifications, a KPI dashboard, CSV customer import, 20+ languages | Paid tiers only for WooCommerce, with a 15-day money-back guarantee. The pricing page is permanently discount-flagged rather than showing a stable list price, so check it on the day rather than trusting a figure quoted anywhere else — including here | Same structural issue as Bookly: bookings are not WooCommerce products, so your coupons, tax rules and order reports do not apply to them natively. The free tier takes payment through Square only. If your requirement is genuinely “appointments on a WordPress site” it is a strong tool; if it is “bookings in my existing store”, it is the wrong shape |
The honest summary of that table: three of these six put bookings in your WooCommerce cart, and three run a parallel system that can take money through WooCommerce. Those are different products sold under the same search term, and the install counts favour the second group for a reason that has nothing to do with stores — a solo consultant with no shop still needs a scheduler.
BookingPress: closed on WordPress.org since February 2025
One more worth naming so you do not waste an evening on it: Simply Schedule Appointments is genuinely good — v1.6.12.33, 50,000+ installs, 5/5 across 155 reviews, updated five days ago — and it is not a WooCommerce plugin. Its payment integrations are Stripe, PayPal and form plugins. If you find it recommended in a WooCommerce context, that recommendation is wrong.
Cart holds and double bookings: test this before you buy
Two customers open the same 2pm Saturday slot at the same time. Both add it to the cart. One pays. What happens to the other one decides whether your Saturday mornings are pleasant or not, and it is almost never on a feature comparison page.
There are three behaviours a plugin can have here, and they are not equally good:
- No hold at all. The slot stays available until an order completes. Both customers pay, you have two people booked for 2pm, and you find out when they both arrive. Cheap plugins do this and do not mention it.
- A permanent hold. The slot is blocked the instant it enters a cart and stays blocked. No double bookings, but every abandoned cart permanently removes a sellable slot until you clear it by hand. On a store where most carts are abandoned, this quietly eats your calendar.
- A hold that expires. The slot is blocked for a set window — typically 15 to 60 minutes — then released automatically. This is the correct behaviour, and it is the one to verify. Booking Activities lists cart expiry in its free WooCommerce integration; for the paid options, find the setting in the documentation before you buy, not after.
Test it yourself during the refund window, in ten minutes: open the same bookable product in a normal window and a private window, add the slot to the cart in one, then reload the other and try to book the same slot. If it lets you, there is no hold. If it blocks you, note the time, abandon the first cart, and check back in an hour to see whether the slot came back on its own.
Expiring holds are usually implemented as scheduled jobs, which means they inherit every problem WP-Cron has on a low-traffic site. If nobody visits your store between 2am and 8am, nothing scheduled in that window runs until the first morning visitor arrives, and a hold set to expire at 3am releases at 8am instead. Stores with scheduling problems tend to have this one too — the missed schedule error in WordPress covers switching to a real system cron, which is the fix for both.
# WooCommerce Bookings stores each booking as a wc_booking post.
# Count what you actually have, by status, before debugging anything.
wp post list --post_type=wc_booking --post_status=any --format=count
wp post list --post_type=wc_booking --post_status=unpaid --format=count
# A large and growing "unpaid" count is the abandoned-hold problem,
# not a payment problem. Check the oldest ones first.
wp post list --post_type=wc_booking --post_status=unpaid \
--orderby=date --order=ASC --posts_per_page=20 \
--fields=ID,post_date,post_title
Other plugins use their own post types or custom tables, so substitute accordingly — the point is the ratio. If unpaid or pending bookings are growing faster than completed ones, your hold logic is not releasing, and no amount of calendar tweaking fixes that.
Why your bookable product page cannot be cached
This is the performance fact that surprises people who have optimised a normal WooCommerce store. A bookable product page renders a calendar of live availability. That availability changes every time someone books. Serve that page from a full-page cache and you are showing a snapshot — customers pick slots that were taken twenty minutes ago and get rejected at checkout, which reads to them as a broken site.
So your single highest-intent page is the one page your cache cannot help with. Three consequences follow, in order of how often they bite:
- Every bookable product view is a full PHP request. Plan hosting capacity on uncached page views, not on the cache hit rate your speed-test plugin reports. A booking store on entry-level shared hosting hits its PHP worker limit far earlier than a catalog store with the same traffic.
- Availability is a query, and it grows. Every calendar render checks existing bookings against the rules for that product. As bookings accumulate, that check gets slower on exactly the pages you most want fast. Archive a season’s worth of past bookings before you blame the plugin.
- Object caching earns its keep here. Redis or Memcached can cache the expensive parts of the availability lookup even when the page itself cannot be cached. On a booking store this matters more than page caching does, which is the reverse of normal WooCommerce advice.
Practically, that means adding your bookable product URLs to the cache exclusion list alongside cart, checkout and account, and confirming the exclusion works while logged out. The mechanics are the same ones that keep the rest of a store behaving — WooCommerce caching plugins: what breaks and what works covers which plugins set store exclusions automatically and which need them written by hand. If the admin side is dragging as well, a growing bookings table and a backed-up Action Scheduler queue are the first two things to check, and diagnosing a slow WordPress admin dashboard is the sequence for reading that queue.
Time zones and cancellations, for a US store
If you sell anything delivered online — consultations, lessons, remote sessions — and your customers span more than one US time zone, time zone display is not a nice extra. A Pacific customer booking what your site calls “2pm” and arriving at 2pm Pacific for a 2pm Eastern appointment is the most common no-show cause on booking stores, and it is entirely preventable.
Both WooCommerce Bookings and the Tyche plugin list customer time zone display, including in the Tyche Starter tier. Verify it covers three places, not one: the calendar on the product page, the confirmation email, and the calendar invite. Getting it right on the product page and wrong in the email is common and is worse than not having it, because the email is what people diary from. Set your WordPress time zone to a real city rather than a UTC offset under Settings > General, so daylight saving is handled for you — a store on “UTC-5” is an hour wrong for eight months of the year.
Cancellations are the second policy decision, and it is a decision, not a setting. WooCommerce order status and booking status are two different state machines. Refunding an order does not necessarily free the slot; cancelling a booking does not necessarily refund the money. Decide your rule before launch — how many hours ahead a customer may cancel, whether that refunds automatically, and what happens to a no-show — then configure the plugin to match and write the rule on the product page. Refunds also carry a real cost: on most US gateways the processing fee on the original charge is not returned, so a cancelled $200 booking costs you money even at a full refund. WooCommerce payment gateway fees for US stores has the per-gateway detail, which is worth reading before you set a generous cancellation window.
Deposits change which tier you need
The bill after the licence: emails
A booking store sends far more transactional mail than a normal store: confirmation, reminder at 48 hours, reminder at 2 hours, reschedule notice, cancellation notice, follow-up. Every one of those is load-bearing — a missed reminder is a missed appointment, and an appointment nobody attends costs you the slot and the revenue.
Default WordPress mail sends through PHP’s mail() from your web server, which is exactly the sending pattern mailbox providers treat as suspicious. This is the first thing to fix on a booking store, before you tune anything else: route mail through an authenticated SMTP service with SPF, DKIM and DMARC set up on your domain. WooCommerce SMTP plugins compared for order emails covers the options and what each one actually verifies, and WordPress emails not sending is the diagnostic sequence when reminders are silently disappearing.
Separately from deliverability, there is marketing mail that no booking plugin covers: the “book again” nudge six weeks after a haircut, the seasonal note to last year’s customers, the review request three days after a session. Booking plugins send transactional reminders; they do not run sequences. FluentCRM is the established WordPress option for that and the one I would point most stores at. My own Send Emails does newsletters and automated sequences from the dashboard too — disclosure: I build and maintain it — and judged by the same maintenance criteria I applied in the table above, it is a young plugin with fewer than a hundred active installs and one review. That is a real mark against it for a store that depends on the mail going out. Try it on a small list if you like the idea; do not make it load-bearing yet.
What to pick for your situation
- You want bookings in your existing WooCommerce cart and have a budget. WooCommerce Bookings at $249/yr, or the Tyche plugin at $199/yr if you do not need deposits. Both put bookings in your order list, your coupons and your tax setup, which is the whole reason to choose a WooCommerce-native plugin over a cheaper scheduler.
- You take deposits. Price the real configuration. Tyche Enterprise is $399/yr with deposits included; WooCommerce Bookings is $249/yr plus a separate deposits extension. Whichever way that lands for you, do not budget from the headline tier.
- Multi-night rentals, cabins, equipment hire. The Tyche plugin, which handles multi-night and multi-date shapes in the Starter tier. Rental pricing by night is where appointment-first tools get awkward, and that awkwardness does not show up until you are configuring it.
- Budget is the constraint and you want to try before committing. Booking Activities, free, with a WooCommerce integration and cart expiry in the free version. Accept the small install base and the add-on cost for resources. It is the only way here to run a real booking store for nothing.
- You want native cart integration at the lowest price. The Extendons extension at $79/yr, treated as a 30-day trial rather than a decision. With no public reviews, the refund window is your only evidence — use it deliberately: test cart holds, time zone display in emails, and your exact booking shape in the first week.
- You run a service business and the store is incidental. Amelia or Bookly. If you have five services or fewer, Bookly’s free tier runs a real business. If you want a polished booking flow and a dashboard, Amelia. Just go in knowing bookings will not be WooCommerce products, so your store reporting and theirs will never reconcile.
- You only need a delivery or pickup date at checkout. Not this category at all. Choosing a delivery window is a checkout field with availability rules, not a bookable product, and a $249 bookings licence is the wrong tool for it.
Frequently asked questions
Can WooCommerce handle bookings without a plugin?
No, not in any way you would want to run a business on. A WooCommerce product tracks stock as a number; it has no concept of a date, a duration, a time slot or a resource. You can sell a “1-hour consultation” as a simple product and sort out the scheduling by email afterwards, and for a handful of bookings a month that is honestly fine. The moment you need customers to see live availability and pick a slot themselves, you need something that adds a calendar to the product object — which is the entire job of every plugin in this comparison.
Is there a genuinely free WooCommerce booking plugin?
Booking Activities is the one that qualifies. Its WooCommerce integration is in the free version, not behind a licence, and it includes cart expiry — the feature that stops abandoned carts from permanently blocking slots. Unlimited calendars, activities and bookings, no artificial caps. The honest caveats: about 3,000 active installs, resource management is a paid add-on, and the interface is organised around activities and calendars rather than appointments. Bookly and Amelia both have large free tiers, but their WooCommerce integration is paid-only, so “free” there does not mean free for a store.
Why do bookable product pages slow my store down?
Because they cannot be served from a full-page cache. The calendar has to show live availability, and availability changes with every booking, so a cached copy shows slots that are already gone. That makes every view of your highest-intent page a full PHP request hitting the database, and the availability query gets slower as bookings accumulate. Three things help: exclude bookable products from page caching deliberately rather than letting a stale cache cause checkout failures, run a persistent object cache such as Redis so the expensive lookups are reused, and archive old bookings at the end of each season. On a booking store, object caching matters more than page caching — the opposite of normal WooCommerce advice.
How do I stop two customers booking the same slot?
You need a hold that expires: the slot becomes unavailable as soon as it enters a cart, and is released automatically after a set window if the order is not completed. Check your plugin has that setting and what the window is — 15 to 60 minutes is typical. Then check the hold actually releases, because expiry usually runs as a scheduled job, and WP-Cron only fires when someone visits the site. On a store with quiet overnight hours, a hold due to expire at 3am releases whenever the first morning visitor arrives. Switching to a real system cron fixes that. Test the whole cycle in a private window before you launch, not after the first double booking.
Is WooCommerce Bookings worth $249 a year?
It depends on one thing: whether you need bookings to be WooCommerce products. If you do — because you want coupons, tax rules, your existing gateways, your order list and your reporting to cover bookings the same way they cover everything else — then it is priced in line with the alternatives that do the same job, and it is maintained by the same team as WooCommerce itself. If you do not, you are paying $249/yr for cart integration you will not use, and a $0 to $199 scheduler does the visible part just as well. The awkward part is that there is no free tier and no trial, so you evaluate it by buying it and relying on the 30-day money-back guarantee. Use that window on cart holds and time zone display in emails, not on the admin screens.
What is the difference between a booking plugin and an appointment plugin?
In marketing terms, nothing — the words are used interchangeably. In practice there are two shapes. Appointment tools are built around a duration on a given day: a 45-minute slot with a named person, repeated through opening hours. Rental and reservation tools are built around a start date and an end date with a rate per night or per day, plus rules about minimum stays and changeover days. Most plugins claim both and are clearly better at one. Work out which shape you sell before you shortlist, because a plugin fighting its own model is a configuration problem you will never finish solving.
Do booking plugins work with High-Performance Order Storage?
Check per plugin, and check before you migrate rather than after. HPOS moves WooCommerce orders out of the posts tables into dedicated order tables, and any extension that reads order data directly has to be updated for it. Most actively maintained booking plugins declare compatibility, but a booking plugin that has not shipped a release in a year is exactly the kind of extension that breaks. WooCommerce reports extension compatibility under WooCommerce > Settings > Advanced > Features, and that screen is the authoritative answer for your specific install — read it there rather than trusting a vendor page.
The short version
Answer the three questions first — duration or date range, resources or not, payment now or later — and the shortlist writes itself. If bookings need to be WooCommerce products, you are choosing between $79, $199 and $249 a year, and the deposit requirement is what moves that number. If they do not, a free or one-off scheduler does the visible job and you keep the licence fee.
Then spend the refund window on the two things that actually break booking stores: whether a slot in an abandoned cart comes back on its own, and whether the time in the confirmation email matches the time in the customer’s head. Neither is on a feature comparison page, including this one, and both cost you real revenue when they are wrong.

Leave a Reply to This Post