What we are building
A price table on a grooming site is not a picture of a list. It is a small set of records with fields, rendered as a grid on a laptop and as stacked cards on a phone, matching the prices set in your booking platform, and editable by you in ten minutes when they change.
This is the build order we use. It takes an afternoon the first time.
1. Get the pricing out of your head and into a grid
Before anyone touches a website, write the grid. Sizes down the side, coat types across the top, one price in each cell.
Size bands need a definition an owner can apply themselves, which means weight, not adjectives. Small up to ten kilos, medium to twenty, large to thirty, extra large above, or whatever matches how you actually work. Coat types are usually smooth, double, wire and curly or wool, though some salons split wool and curly.
If a cell has no realistic dog in it, leave it blank rather than inventing a number.
2. Add breed examples to every cell
This is the step that makes the table usable. Owners do not know what a double coat is. They know they have a cocker spaniel. Two or three breed examples per cell turns a technical grid into a lookup.
Put the common local breeds in first. Cockapoo, cavapoo, labradoodle, shih tzu, cocker, border collie, westie, mini schnauzer, labrador. Say plainly that a mix is priced by coat and size, not by name.
3. Set it in the booking platform before the website
Configure the services and pricing in MoeGo, Gingr, Savvy Pet Spa, Fresha or whatever runs your diary first, with the duration for each combination as well as the price. Then write the website table from the platform.
Doing it in that order means the price an owner reads on the site is the price the booking flow quotes and the till charges. Doing it the other way round guarantees the two drift apart within a season.
4. Model it as records, not as a hard-coded table
In the CMS, a price row is a record with fields: size, weight band, coat type, breed examples, price, typical duration, and an optional note. An add-on is a separate record with name, price or price unit, and a short description.
The page renders whatever records exist. Add a coat type and a column appears. Change a price and the page re-renders. Nobody has to open code, and nothing goes stale because a developer was busy.
5. Build the add-on list underneath
The matrix prices a standard full groom on a coat in reasonable condition. Everything else is its own line: de-matting charged by the quarter hour, hand stripping, nails alone, teeth, ear plucking, anal glands if you do them, flea or medicated bathing, a puppy first groom as a shorter cheaper service, and a second groomer where a dog needs two pairs of hands.
Price units matter here. "De-matting, per fifteen minutes" is honest and defensible. "De-matting, from" is not.
6. Write the conditions note
Three or four sentences under the table, in your own voice. What moves the price on the day: coat condition and the point at which de-matting is charged or a shave-down is kinder, dogs well past their usual interval, handling that needs a second person, a dog at the top edge of a band. This paragraph prevents almost every awkward conversation at collection.
7. Lay it out for a phone
Most of the traffic is on a phone, and a wide grid does not fit one. Either let the table scroll horizontally inside its own container with the size column pinned, or stack it: one card per size band, coat types listed inside. Test it on a real handset, not just a narrowed browser window.
Keep type large enough to read one-handed and do not put the prices inside an image, which is invisible to search engines and unreadable to screen readers.
8. Put booking next to the price
Under the table, a Book button deep linked to the platform with the service pre-selected. The owner has just decided what their dog costs, which is the exact moment they are willing to act. Sending them back to a menu to find the booking page loses a share of them.
9. Handle the dogs you cannot quote
Add one line offering an assessment or consultation slot for badly matted coats, rescue dogs of unknown history and dogs long past their interval. That routes the genuinely unquotable into your diary rather than into a phone call, and it keeps the table honest for the ordinary ninety percent.
10. Test, then set a review date
Check the site price, the platform price and the till agree for three combinations. Confirm the table matches on mobile. Then put a reminder in the calendar twice a year to reread it, and edit the day you actually change what you charge rather than the week after.
Where this sits
An editable price matrix by size and coat, add-ons priced as their own records, and booking next to the number are part of every dog grooming salon website we build, and the same table pattern is used across our pet business websites. The packages that include it are on pricing. Build it once as records and it stays true for years.