Phorest is asked, for one service at a time, when it could actually be booked. Openings differ completely between a 45 minute blowout and a three hour color, so the service picker drives this panel. It always looks at the next seven days and ignores the date range above. 59 possible start times came back for women's haircut & blowout.
60 minutes · typical price $81 · bookable online · offered by 8 of 8 stylists
| Stylist | Wed23 Sep | Thu24 Sep | Fri25 Sep | Sat26 Sep | Sunclosed | Mon28 Sep | Tue29 Sep |
|---|---|---|---|---|---|---|---|
| Nora | · | 1 | 2 | · | 1 | · | |
| Priya | · | 4 | 1 | 1 | 3 | · | |
| Marcus | · | · | 2 | 2 | · | · | |
| Jenna | · | 2 | 3 | 1 | 1 | · | |
| Tasha | · | · | · | · | · | · | |
| Bea | · | 4 | 4 | 2 | 1 | · | |
| Colette | · | · | 3 | 1 | 4 | · | |
| Iris | · | · | 4 | 3 | 1 | · | |
| Options | 0 | 11 | 19 | 10 | closed | 11 | 0 |
Phorest · example figures
| Stylist | Bookings | Online | Revenue | Avg |
|---|---|---|---|---|
| Jenna | 98 | 41 | $20,279 | $207 |
| Nora | 97 | 39 | $18,379 | $189 |
| Priya | 72 | 37 | $16,674 | $232 |
| Marcus | 90 | 34 | $16,052 | $178 |
| Tasha | 56 | 22 | $11,153 | $199 |
| Bea | 44 | 21 | $8,103 | $184 |
| Colette | 42 | 14 | $7,375 | $176 |
| Iris | 20 | 8 | $4,329 | $216 |
| Total | 519 | 216 | $102,344 | $197 |
Phorest · example figures
| Service | Services | Online services | Revenue | Avg |
|---|---|---|---|---|
| Women's Haircut & Blowout | 298 | 124 | $24,138 | $81 |
| KurlPro Cut + Wash N' Go | 72 | 34 | $12,168 | $169 |
| Full Highlight | 47 | 20 | $11,562 | $246 |
| Custom Dimensional Color | 26 | 10 | $7,696 | $296 |
| Hand Tied Maintenance/Moveup - 2 Rows | 33 | 13 | $7,326 | $222 |
| Partial Highlight | 39 | 17 | $7,215 | $185 |
| Custom Dimensional Color (half-head) | 27 | 9 | $6,507 | $241 |
| Hair Color Retouch | Grey Coverage | 53 | 22 | $5,141 | $97 |
| All other services | 259 | 103 | $20,591 | $80 |
| Total | 854 | 352 | $102,344 | $120 |
Phorest · booking channel
Phorest records the channel a booking came through. It does not record what brought the client to the salon, so this is not a marketing source and never becomes one.
GA4 · access pending · salon wide · not changed by the filters above
Website sessions for the whole site. These sit beside the bookings, not joined to them. Nothing here says which session became which appointment.
Google Ads · access pending · salon wide · not changed by the filters above
| Campaign | Spend | Impressions | Clicks | Conversions | Cost per conversion |
|---|---|---|---|---|---|
| Brand · Dwell Studio | $286 | 9,120 | 412 | 31 | $9.23 |
| Hair extensions · Fort Worth | $642 | 21,400 | 388 | 18 | $35.67 |
| Balayage & color | $401 | 15,980 | 264 | 11 | $36.45 |
| PMax · Salon services | $751 | 58,390 | 690 | 31 | $24.23 |
| Color & highlights | $318 | 26,100 | 301 | 14 | $22.71 |
| Cuts & styling | $244 | 19,850 | 257 | 12 | $20.33 |
| Extensions | $189 | 12,440 | 132 | 5 | $37.80 |
| Total | $2,080 | 104,890 | 1,754 | 91 | $22.86 |
These figures cover the whole salon. The stylist and service filters do not apply to them, because neither Google Ads nor GA4 carries a stylist or a service on a click, and nothing in either account maps to one. Conversions are counted by Google Ads on its own attribution window. They are not matched to Phorest appointments, so a conversion here is not a confirmed booking. Performance Max is broken out by asset group. A salon running no Performance Max sees only its own campaign rows.
So the same word means the same thing every month
| Total bookings | One client on one date. Phorest returns a row per service, and it sets a bookingId on only 349 of 990 rows, almost all of them online. So rows are grouped by bookingId where there is one and by clientId plus appointment date where there is not. Both groupings independently returned 498 on a full month of live records, where counting distinct bookingId alone would have returned 203. | Verified with Dwell’s API |
| Services booked | One row per service on a booking. Phorest also writes zero priced placeholder rows such as No Add On, and those are excluded. | Verified with Dwell’s API |
| Online bookings | A booking with at least one service that came through the salon website. Phorest calls that source ECOMM_WEB_APP. | Verified with Dwell’s API |
| Total clients | Clients with at least one booking inside the period, counted once each. | Verified with Dwell’s API |
| New clients | Clients whose Phorest clientSince date falls inside the period and who also have a booking inside it. Measured against Dwell on 10 September, over 6 August to 5 September: 215 client records were created, 109 of those people had their first appointment inside the window, 44 were booked but their first appointment falls after it, as late as 19 October, and 62 have no appointment at all. This tile counts the 109 only, so a new client who books three weeks ahead lands in next month’s figure rather than this one. | Verified with Dwell’s API |
| Revenue | Scheduled, not completed. The sum of the price written on each service appointment in the period. In a live month at Dwell 954 of 990 service rows were in a paid state and 36 were still booked, worth about 2.7% of the total, and some of those sat in the past. Phorest has no sales endpoint, so there is no completed-sales figure to compare it with. Tips, discounts and part payments are not in it. | Verified with Dwell’s API |
| Average ticket | Scheduled revenue divided by bookings, not by services. A client who has a cut and a gloss is one ticket. On a live month that is $185.25 per booking, against $93.18 per service row, which is the figure most tools show and call a ticket. | Verified with Dwell’s API |
| By stylist and by service | Bookings, online bookings and revenue for each, from the same rows as the totals. | Verified with Dwell’s API |
| How bookings were made | Phorest’s own channel field. Four values appear in live data: online, in salon, front desk terminal and third party. | Verified with Dwell’s API |
| Openings, next 7 days | Asked of Phorest one service at a time. It answers with possible start times per stylist, which overlap. | Verified with Dwell’s API |
| How far ahead people book | The gap between when a booking was created and the appointment date. Phorest returns both. | Verified with Dwell’s API |
| Website traffic | Salon wide GA4 sessions by channel. They cannot be filtered by stylist or service, because a session carries neither. Access was granted on 4 September and the read is a straight OAuth connection, no approval queue. | Documented, access pending |
| Google Ads spend, clicks, conversions, PMax asset groups | Salon wide, and not filterable by stylist or service for the same reason. All reported by the Google Ads API. It needs a developer token, which is applied for through a Manager account and reviewed by Google. | Documented, access pending |
| Which marketing brought a booking | Phorest stores no campaign, no UTM and no analytics id on a booking, and GA4 exposes no booking id. Joining them needs new tracking on the booking confirmation step, which has to be tested before it is promised. | Requires additional tracking |
| Retail product sales | Phorest exposes no endpoint that reads sales. The purchase route accepts writes only, and no sale, transaction, receipt or order route exists. | Not available from Phorest |
| Cancellations and no-shows | A full month of live records returned only booked and paid states. No cancelled or no-show state appeared. | Not available from Phorest |