1. Quote one groom
2. Paste the requests
3. The day
Every request, by net per table hour
| # | Dog | Size | Minutes | Price | Net | Per table hour | Price for your target |
|---|
Book
| Dog | Size | Table minutes | Net | Per table hour |
|---|
Skip
| Dog | Why |
|---|
This plan against the usual shortcuts
| Rule | Net for the day |
|---|
Prefer a CLI?
Same logic, zero dependencies, one command — reads a file or stdin:
node cli.mjs plan requests.csv --capacity 480 --turnover 10 --target-hourly 45 --max-large 2 --json node cli.mjs price --minutes 80 --supplies 6 --target-hourly 45
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: How much to charge for dog grooming.
What's recognised
| Input | Handling |
|---|
The plan is exact for the numbers you type (search over every allowed combination, up to 40 requests). Temperament, a coat you have not seen, groomer-and-bather splits and cancellations are not modelled; enter the minutes a dog will really take.
Common questions
Does it upload my client list?
No. The browser page works on the text you paste, in your own browser, and never sends it anywhere. The CLI reads a local file or stdin and makes no network call.
How is the price worked out?
Table time is the groom minutes plus the turnover between dogs. The price is table hours times your target net per hour, plus the supplies that groom uses.
Why would it skip a dog that is profitable on its own?
The day only has so many table minutes, and you may cap dogs or large dogs. The tool compares every allowed combination and keeps the one with the highest total net, and says what taking a skipped dog instead would cost.
Is the plan guaranteed to be best?
It is the exact best answer for the minutes and prices you typed, checked against trying every combination in the tests. It cannot see temperament, a matted coat you have not seen or a client who cancels, so it is a decision aid, not a forecast.
Who is it for?
Independent dog groomers, salon owners and mobile grooming vans deciding what to charge and which requests to take.