Setting up a salon booking system in WordPress comes down to one plugin and a specific order of work. Install Amelia, add your stylists and the services they offer, then put the booking form on a public page.
What you end up with is an online appointment scheduling system that lives inside the salon’s own website. Clients pick a stylist and a time slot whenever they feel like it, 2 a.m. included.
The order isn’t a suggestion. Amelia won’t save a service until at least one employee exists, and that employee’s schedule can’t be booked until services are linked to it.
- How do you build a salon booking system with WordPress?
- Which Amelia plan does a salon booking system need?
- Installing and activating Amelia
- Employee schedules, days off and locations
- How to set up services, categories and pricing
- Global appointment settings worth checking
- Adding the booking form to your website
- Testing your first booking
- Setting up payments for a salon booking system
- Email notifications and reminders
- Salon Booking System with WordPress FAQ
- Keeping a Salon Booking System with WordPress Running
How do you build a salon booking system with WordPress?
Amelia handles every step from the WordPress dashboard, so there’s no second tool to juggle. Payments and reminders wait until the first test booking goes through.
- Pick a plan, or start with the free Lite version
- Upload and activate the plugin
- Enter the purchase code under Settings, Activation
- Add employees and set their working hours
- Add service categories and services, linked to those employees
- Add the booking form to a page
- Connect payments and deposits
- Set up reminders and calendar sync
It’s a dependency chain, really. Amelia’s quick start guide begins with an employee because every booking links to one, and a service can’t exist without somebody to perform it.
A brand new employee isn’t bookable at all until services are attached.
The smallest setup that works is a single employee with a single service and a form to book it.
Before you start, make sure your WordPress host accepts the Amelia zip upload. The theme barely matters, since the form goes in through a block or a builder widget, with a shortcode as the fallback. Starter and Standard licenses cover one domain.
The same sequence works for a booking website for a beauty salon, and just as well for a barbershop or spa. Amelia publishes demo sites for hair, beauty, nail and massage salons, plus spas and barbershops, so you can copy one instead of starting from a blank page.
Once it’s live, the paper appointment book at the front desk becomes redundant. Clients pick a slot online and staff see it in Amelia’s calendar.
Which Amelia plan does a salon booking system need?
Standard covers most single-location salons. Pro only matters if you sell service packages, share resources between staff or let clients book several services in one go.
As of October 2026, deposits and calendar sync start at Standard.
| Feature | Starter | Standard | Pro |
|---|---|---|---|
| Deposit payments | No | Yes | Yes |
| Recurring bookings | No | Yes | Yes |
| Calendar sync | No | Yes | Yes |
| Packages and resources | No | No | Yes |
| Multi-service booking | No | No | Yes |
Elite includes everything in Pro and adds the REST API, which Amelia’s documentation lists as Elite only. That one suits agencies building sites for clients, not a single salon.
The plan cards on Amelia’s pricing page group features differently from the plan descriptions, so check Starter against the comparison table there before you buy.
Free Lite installs from WordPress.org, and it’s also what Amelia falls back to when the purchase code isn’t activated. New subscriptions come with a 15-day money-back window.
Lite is a sensible way to test the workflow. It also sits among several free WordPress booking plugins worth comparing.
Where you buy changes the support terms. An Envato license equals the Standard plan with lifetime updates but only 6 months of support. Plans bought on Amelia’s site keep support and monthly updates for as long as the license stays active, which means renewing annual plans (lifetime plans are a one-time payment), per Amelia’s installation guide and pricing page.
Still weighing alternatives? A roundup of the strongest WordPress booking plugins shows how the main options compare.
My pick is Standard, unless your menu is built around bundles.
Installing and activating Amelia
Upload ameliabooking.zip under Plugins, Add New, Upload Plugin, click Install Now, then Activate Plugin. Until you enter your purchase code under Settings, Activation, Amelia runs on the free features of Amelia Lite.
Purchases made on Amelia’s site download from your Store account. The link in the confirmation email stays active for 30 days or 5 downloads, whichever ends first (Amelia installation guide, September 2026).
With a Store purchase, paste the code into the Purchase code field, click Activate, then Save. Envato buyers skip the code, click Activate with Envato, sign in and confirm.
Skip activation and customers can still book, with plan features and integrations unlocking once the code is in.
After the first activation, a Welcome onboarding guide offers to create an employee, then a service or event. It shows once and returns only if all Amelia data is deleted on deactivation.
If you are starting from scratch, you can even build your salon site with AI, which generates a matching theme and sets up your services and staff automatically before you refine the details.
If the upload fails, unzip the file and upload the ameliabooking folder to /wp-content/plugins/ over FTP, then activate it under Plugins.
Upgrading from Amelia Lite

Upload the full zip over the Lite install and choose Replace current with uploaded. Lite doesn’t need to be deactivated first, and the upgrade guide covers the full sequence.
One trap here. If you deactivate and delete Lite, leave the delete tables, roles, files and settings checkbox unticked, because ticking it permanently removes appointments, employees and services.
Clear your caching plugin, server cache and CDN cache afterwards, or the new files won’t load.
Fixing the “link you followed has expired” error
That message is a WordPress upload limit, not an Amelia fault. The premium zip grows with every release, and the server’s maximum upload size is too small for it. Amelia documents the fix on its upload size limit page.
upload_max_filesizepost_max_sizemax_execution_time
Raise those values in php.ini or the hosting panel, or ask your host to do it.
Employee schedules, days off and locations
Creating your first stylist
Open Amelia, Employees, then click + Employee. First name, last name and email are required, and Amelia won’t save the profile without them.
Switch on Show on website. If it stays off, clients can’t pick that stylist in the booking form, which is the most common reason a new profile “doesn’t show up”.
Phone number, badge, location and time zone are optional. The time zone defaults to your WordPress setting, so only change it for staff who work in another one.
New employees inherit the company working hours, which default to Monday to Friday, 09:00 to 17:00, and you edit them in the Work hours tab.
Assigning services to employees
The Services tab inside an employee profile lists every service grouped by category. It only becomes useful after services exist, since Amelia won’t create a service without at least one employee attached (assigning services).
Each category checkbox has three states. Checked means the stylist does every service in the category, a dash means some, and empty means none. Click the checkbox to assign a whole category at once, or expand it to pick services one by one.
Expand a single service and you get two overrides that apply to that stylist only.
- A custom minimum and maximum capacity
- A custom price, shown automatically on the booking form
That’s how a senior colorist can charge more than a junior one without duplicating the service.
Several stylists can share one service, and each one takes their own appointments. Five free stylists at 10:00 means up to five bookings, so one booking doesn’t block the rest. To cap the total for a service across everyone, you need Resources on Pro or Elite.
Work hours and breaks
Amelia has no separate break setting. Split the day into two periods instead, such as 09:00 to 12:00 and 13:00 to 15:00, and the gap becomes a one-hour break.
- Add periods from earliest to latest, because Amelia rejects a period that starts before an existing one
- A period can be limited to a single service or location
- Apply to all days copies one day’s periods to every active day
Changes take effect as soon as you save the employee.
Days off and special days
A day off beats everything else.
Amelia’s days off documentation states that days off override both special days and regular work hours.
A day off can be a single date or a range, always the whole day, and a Repeat yearly option covers fixed holidays. Company days off appear in each profile but can only be edited in company settings.
Special days work the other way round. They give chosen dates a custom schedule that replaces the weekly hours for that range, which fits late openings and workshops, or a visiting stylist who’s only in for a day.
Running several salon locations
Set a default location in the employee profile, then change it per work period or per special day. Locations are configured inside employee profiles, not on the Locations page.
Typical patterns are Location 1 on Monday, Wednesday and Friday with Location 2 on Tuesday, Thursday and Saturday, or a split day with one location until noon and another after 13:00. A single period can also list several locations when they’re rooms in the same building.
When several locations share one work period, booking a slot at one of them closes that slot at the others in the same period. That rule prevents double-booked appointments across rooms without extra settings, and multiple locations covers the wider setup.
How to set up services, categories and pricing

Creating a category and your first service
Go to Amelia, Catalog, create a category such as Hair, Nails or Massage, then click Add Service inside it. Categories only group services in the catalog and on the booking form.
Fill in the service name, pick a color, choose the category and select at least one employee. Switch on Show on website, or clients cannot book the service.
Then open the Pricing and Duration tab and set the duration and price. Name, category, employee, duration and price are all mandatory.
You can also add a short description or limit how many appointments one customer may book. Both are optional, and the services guide covers gallery images and capacity.
Duration, buffers and price
A 30-minute service with 30 minutes of buffer before and 30 after occupies a 90-minute slot, according to Amelia’s pricing and duration page (July 2026).
Buffers always apply and merge, so use one where you can. Duration fields also follow the Default time slot step in General settings, which means a 30-minute step gives 30-minute increments.
Set the price to 0 for a free service. That removes the price and the payment options from the booking form.
Amelia can price a service by duration, with one price per length of the same service, or by group size, where the price changes with the number of people. It can also vary price by date and time, handy for charging more at peak hours and less when the chairs are empty.
These custom pricing models need the Custom pricing feature enabled under Features and integrations, and only one can run at a time. Custom pricing is available on Standard and above. Each employee can also carry their own price in the Services tab of their profile.
Extras, packages and recurring bookings
Extras sit on top of a service, such as a conditioning add-on on a haircut, and they can change the appointment’s duration and price. The Extras step in the booking form shows up only when the Extras feature is enabled.
Service packages bundle several services at a discounted price and need the Pro plan.
Clients who return every few weeks can book recurring appointments daily, weekly or monthly on Standard and above.
One catch. The repeat prompt appears only on standalone service bookings, never when the service is booked through a package.
Booking rules per service
Each service can override the global booking rules.
- The default appointment status, pending or approved
- Minimum time before booking, canceling and rescheduling
- How far ahead clients can book
- A redirect URL after booking
A cancellation cut-off is the simplest way to limit late cancelled appointments, and you can set a stricter one on longer treatments than on quick ones.
Global appointment settings worth checking
These live under Amelia, Settings, Bookings, Appointments. Most sliders are on by default, so the defaults are fine for a first launch.
Default appointment status is the one to decide on early. Approved confirms every booking instantly, while Pending holds each one until you approve it. Group appointments for services with a capacity above 1 always arrive as Pending until the minimum capacity is met.
Time slots deserve a second look if you sell long treatments. With Use service duration for booking a time slot turned off (the default), a 1-hour service on a 30-minute step shows 09:00 to 10:00 and 09:30 to 10:30.
Turn it on and the same service shows 09:00 to 10:00, then 10:00 to 11:00. Cleaner for back-to-back work, though clients get fewer start times.
If you use buffers, the Include service buffer time in time slots option decides whether the gap is built into the grid or applied only after someone books. With a 30-minute buffer and a 1-hour service, the fixed grid reads 09:00, 10:30, 12:00.
Employee selection logic matters when clients don’t pick a stylist. Options are Random (default), Round-robin, Highest price and Lowest price. Lite and Starter always assign a random available employee, per Amelia’s appointment settings page.
Adding the booking form to your website

Clients can’t book until the form is on a public page. Amelia’s quick start recommends the step-by-step booking form as the fastest route.
Three ways to place the form
Create a new WordPress page, then pick one method.
- Add the Amelia block in Gutenberg (see Gutenberg integration)
- Use the Amelia widget in Elementor or Divi
- Paste the shortcode
[ameliastepbooking]into the editor
Publish the page and the form appears on the front end. The shortcode works even without a page builder, so it’s the safest fallback.
Filtering the form with shortcode parameters
A plain shortcode shows every service and employee. Add parameters to narrow it down, which is useful for one landing page per treatment type.
[ameliastepbooking category=3]shows services in category 3[ameliastepbooking service=5]shows only service 5[ameliastepbooking employee=2 location=1]filters by stylist and location[ameliastepbooking show=packages]shows only packages
The numbers are IDs from your own Amelia setup. Several values go in as a comma separated list, like employee=1,3,7, and the full list sits in the shortcodes reference.
Prefer a browsable menu? [ameliacatalogbooking] shows services as category cards instead of a wizard, and takes the same filters.
Pre-selecting a service through the URL
You can also pre-fill the form from a link. Adding ?ameliaServiceId=5&ameliaEmployeeId=1 to the booking page URL pre-selects service 5 and stylist 1.
That helps when a button on your homepage should open the form already set to Balayage with a specific colorist. Parameters also exist for category and location.
Opening the form in a popup
If you’d rather keep a Book now button on every page, add trigger, trigger_type and in_dialog=1 to the shortcode, or set the same options in the builder widget. Amelia then opens the form in a dialog when the trigger element is clicked.
What clients see, step by step
The form adapts to your setup. If you only have one service, one stylist or one location, those selectors are skipped automatically.
- Service, stylist and location. Dropdowns act as filters, so choosing a stylist narrows the services
- Extras, only if the service has them and the Extras feature is on
- Number of people, only if the service allows group bookings
- Date and time, showing only slots that respect hours, days off, special days and buffers
- Customer details, including any custom fields assigned to the service
- Payment, with coupons if enabled. Free services skip this step
- Confirmation, with add-to-calendar buttons for Google, Outlook, Yahoo and Apple
Those calendar buttons are a convenience for the client. They work without any Google or Outlook integration on your side.
The first screen has two layouts. List shows every selector at once, while Steps splits them into three screens, and you switch under Amelia, Customize, Step-by-step form.
Testing your first booking
Open the published page in an incognito window so you see what a client sees. Pick a service, choose a slot, enter your details and confirm.
Back in WordPress, go to Amelia, Bookings, Appointments. The test booking is there, and you can approve, edit or cancel it directly.
Don’t skip this. If the page shows an empty service list, the usual causes are Show on website switched off, or a service with no employee attached.
Setting up payments for a salon booking system

Payments are optional. Out of the box Amelia uses On-site payment, so clients book now and pay at the chair.
Open Amelia, Settings, Payments to set the currency, symbol position, price separator and number of decimals (zero to five). You can type a custom currency symbol if the built-in one doesn’t fit. The payment settings page covers every field.
Amelia supports On-site, PayPal, Stripe, WooCommerce, Razorpay, Mollie, Square and Barion. Stripe, Square and PayPal take payment inside the form, while WooCommerce, Mollie, Razorpay and Barion redirect to an external checkout.
Connecting Stripe
Stripe is the usual pick for card payments, and it’s available on Standard, Pro and Elite. The Stripe integration guide has the full detail.
- Go to Features and integrations, Integrations, and switch on Stripe
- Click Set up, which opens Settings, Payments, then scroll to the Stripe section and turn it on
- Paste your keys from the Stripe Dashboard under Developers, API keys
- Edit each service, open its Settings tab and confirm Stripe is ticked
Stripe turns on for existing services automatically, but Amelia itself recommends checking each one. Amelia validates the keys when you save, so an invalid key blocks the integration instead of failing at checkout.
Start in Test mode. Switch it on in both Stripe and Amelia, paste the test publishable and secret keys, and run a booking with a test card that matches your country.
For real payments, turn Test mode off and use the live keys. Live payments need a valid SSL certificate, and Stripe won’t process live amounts below $0.50.
Stripe can also email receipts on its own. That’s a Stripe account setting, and you can turn it off if you’d rather send Amelia’s own notifications.
Payment links and auto-approval
If at least one online method is on, the Pay with payment link option appears. Amelia then generates a unique link that clients receive in their notifications.
With the default status set to Pending, you also get Auto-approve booking after payment. The booking flips to Approved as soon as Amelia registers the payment. The payment link placeholder must be added to your message templates, or clients never receive the link.
Taking deposits to reduce no-shows
Deposits let a client pay part of the price upfront and the rest later, on-site or through a payment link. They’re available on Standard, Pro and Elite.
Setup takes two steps. First turn on Deposit payment under Features and integrations. Then open Catalog, pick a service, go to Pricing and duration, and switch on the Deposit payment slider, because deposits are configured per service (service deposits).
You choose between two types.
- Fixed amount is a set value, with an option to multiply it by the number of people
- Percentage is calculated on the full booking price, including extras and extra people
Percentage is the better fit when stylists have different prices, since it follows each stylist’s rate. Fixed ignores extras unless you multiply it per person.
Tick Allow customers to pay full amount if clients may choose between the deposit and the whole price. Leave it off and they can only pay the deposit.
Two limits to know. Deposits show up only when an online payment method is on, so an on-site-only setup never displays them. A service priced at 0 has no deposit options at all.
When a deposit is paid, the payment shows as Partially paid on the Finance page. After the client settles the rest at the salon, open the payment details, edit the amount and status, and save, and it becomes Paid.
Email notifications and reminders

Notifications are what cut no-shows. Channels (email, SMS, WhatsApp) are configured under Settings, Notifications, and individual templates are switched on or off in the Notifications menu.
Amelia ships with a template for each booking event. These are the ones a salon uses most, based on the customer notifications guide.
| Template | When it is sent |
|---|---|
| Approved | A booking is confirmed, or its status changes to Approved |
| Pending | The default status is Pending and the booking needs confirmation |
| Rejected | An admin, manager or permitted employee rejects the appointment |
| Canceled | The client cancels from the link, or it’s canceled in the back end |
| Rescheduled | The date or time changes, including moves made in a connected Google or Outlook calendar |
| Next day reminder | Scheduled, sent at a time you choose the day before |
| Follow up | Scheduled, sent hours or days after the appointment ends |
| Birthday greeting | Scheduled, sent on the birthday saved in the client profile |
If the stylist, location or extras change, Amelia sends Details changed. If the date or time changes, it sends Rescheduled instead, not both.
Edit templates in the template editor and use placeholders for client name, service, stylist and time, so text updates itself. Click Save after any change, including timing.
Making scheduled reminders actually send
Reminders, follow ups and birthday messages rely on a cron job on your server. Amelia only provides the command, and the timing depends on your hosting.
The command is shown inside each scheduled template. A typical one looks like this, with your own domain in place of the example.
*/15 * * * * wget -q -O - "https://yourwebsite.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/notifications/scheduled/send"
Depending on the host, the format changes. Amelia’s scheduled notifications page lists the variants for different panels.
Can’t edit server cron jobs? Install the WP Crontrol plugin, add a 15 minute schedule under Tools, Cron Events, Cron Schedules, then add a PHP Cron event that calls the same URL with file_get_contents. A real server cron is more reliable on busy sites, so treat WP Crontrol as the backup.
If reminders still don’t go out, check these first.
- The host allows external cron jobs
- A firewall isn’t blocking calls to your own domain
- WordPress cron isn’t disabled (if you use WP Crontrol)
- The scheduler URL opens without redirects in a private window
- On WHM or cPanel, Restrict outgoing SMTP is turned off
To test, set a reminder a few minutes ahead and book a slot that falls inside the window. Amelia’s own docs say a failure is almost always the cron or hosting side, not the plugin.
Salon Booking System with WordPress FAQ
Do I need technical skills to set this up?
No coding is needed. The Welcome onboarding guide creates the first employee and service, and the form goes in through a block, a builder widget or a shortcode. The only technical chore is the server cron job behind scheduled reminders.
Can clients cancel or reschedule their own appointments?
Yes. Cancellation is always available in the Customer panel, which you add with [ameliacustomerpanel appointments=1] and link under Settings, Roles and permissions, Customer. Rescheduling is optional, so switch on Allow customers to reschedule their own appointments in the same area.
Which tasks can stylists handle without WordPress access?
The Employee panel, added with [ameliaemployeepanel appointments=1], lets stylists manage their own appointments, work hours, days off, special days and services. They log in with a password, and Roles and permissions decide which of those things they may edit.
Does Amelia support discount coupons?
Coupons come with all paid plans. Enable Coupons under Features and integrations, then create codes under Finance, Coupons with a fixed or percentage discount, a usage limit and an expiry date. Codes are case sensitive by default.
How do I change the colors and fonts of the booking form?
Open Amelia, Customize and pick the form. Each form has its own editor for colors, typography, buttons and labels, with a live preview, so no custom CSS is needed. Clear your site cache after saving so the new styles load.
How do I bring in existing client records?
Import a CSV file under Amelia, Customers. Use no header row, separate first and last name columns, phone numbers with country codes and unique emails. Failed rows come back as a downloadable CSV, so you can fix them and upload again.
Why can’t clients see a service or stylist on the form?
Check three things. Show on website must be on for the service and for the employee, and the service needs at least one employee assigned. Without a direct link between them, Amelia shows no time slots.
Can I show only one service on a page?
Yes. Use a filtered shortcode such as [ameliastepbooking service=5], or pass ameliaServiceId in the page URL. Amelia ignores unsupported combinations safely, so a wrong parameter won’t break the page.
Can I take a deposit but still allow full payment?
Yes, on Standard and above. Set the deposit on the service, then tick Allow customers to pay full amount, and the client chooses at checkout. At least one online payment method must be on, or deposit options won’t appear.
Why aren’t my reminder emails going out?
Nine times out of ten it’s the cron job. Confirm it runs every 15 minutes and that the scheduler URL loads, then check that the template is switched on for the channel you use.
Keeping a Salon Booking System with WordPress Running
Upkeep after launch is light, but a couple of things bite if you ignore them. Calendars are the first. Amelia 9.9 added two-way Google Calendar and Outlook sync, and any calendar connected before that update needs a one-time disconnect and reconnect to switch two-way sync on (Amelia documentation, September 2026).
Reminders deserve a quick retest whenever the hosting changes, since they depend on that server cron job.
Renewal is worth planning. An unrenewed annual license keeps the plugin and all data working, and it pauses monthly updates and support, so annual plans renew automatically unless canceled (Amelia pricing FAQ, October 2026).
Updates are how improvements like that two-way sync reach your site, which is the practical argument for keeping the license active.
Once upkeep is routine, the next gain comes from ways to get more bookings into the system.
