Reporting period · August 2026 · Month 4
One number matters here: revenue from court hours that would otherwise have gone unsold. Everything else on this page exists to show you how we got to it.
Attributed revenue against total cost
Program-to-date: $42,544 returned on $9,580 invested — 4.4×.
Where the revenue came from
August, by revenue line in CourtReserve.
Ancillary counts only what the same member rang up within two hours of a credited booking. It is the smallest line and the one we are strictest about — a café tab three days later is not ours.
Counted separately, on purpose
Nine members joined after a CourtStack touch. We keep them out of the ROI number above.
Reconciliation
Why the campaign table adds to more hours than we claim.
Inventory
Utilization across all 12 courts, hour by hour. The gold outline is the target block we contracted to move — Monday through Friday, 9am to 3pm.
Still open, still worth money
The eight softest remaining blocks, ranked by unsold court-hours per week.
| Block | Util. | Empty hrs/wk | Value/wk |
|---|---|---|---|
| Total unsold |
How the target block moved
Mon–Fri 9a–3p · 12 courts · 1,548 court-hours a month.
The hours that moved
Four slots account for 71% of the lift. The rest of the block barely budged.
| Slot | Baseline | August | Hrs gained |
|---|---|---|---|
| Tue/Thu 12p | 26% | 61% | 58 |
| Wed 10a | 29% | 58% | 32 |
| Mon/Wed/Fri 9a | 33% | 55% | 41 |
| Fri 1p | 30% | 44% | 39 |
| Everything else in block | 32% | 38% | 71 |
Baseline is the mean of the twelve weeks before launch, seasonally matched against the same block a year earlier. It was agreed in writing before the first campaign went out and it does not move.
Activity
No blasts. Each campaign picks the few hundred members most likely to book one specific hour, and is measured only on that hour. Select a row to see who was targeted and what happened.
| Campaign | Slot targeted | Channel | Reached | Booked | Court-hrs | Revenue | Cost / hr |
|---|---|---|---|---|---|---|---|
| 8 campaigns |
Methodology
This is the part your GM will push on, so it is written to survive the push. Four rules, applied the same way every month, and a ledger you can open row by row.
The four rules
Applied in order. A booking that fails any one of them earns no credit.
They received an email, a text, or clicked an ad we ran — logged with a timestamp in Klaviyo, Twilio, or the ad platform. An unopened email still counts as a touch; an undelivered one does not.
Not any slot. If the campaign was Tuesday noon and they booked Saturday morning, that booking is not ours. This is where most agency reporting quietly cheats.
72 hours from the touch for email and SMS, 7 days for paid social and search. Longer windows inflate credit; we would rather under-claim.
We read the transaction the club actually collected — court fee, clinic fee, drop-in, plus anything rung up on the same member account within two hours. Cancelled and refunded bookings are reversed on the next sync.
What we never claim
The exclusions matter more than the inclusions.
Baseline
Agreed before launch. Frozen for twelve months.
Booking ledger
Every credited booking is auditable to this level. Ten of 366 shown.
| Booking | Member | Slot booked | Touch | Booked | Gap | Hrs | Revenue | Credit |
|---|
Data
CourtStack connects with a read-scoped API key you issue and can revoke. We pull inventory and transactions; we never write to your calendar and we never take payments.
Data flow
One loop, running every fifteen minutes.
Connections
What we read from CourtReserve
API access requires an Advance, Momentum, or Enterprise plan. Permissions are set per data area on the key you generate.
| Data area | Scope | What it powers |
|---|---|---|
| Reservations & scheduling | Read | Dead-hour map, booking match-back |
| Members & memberships | Read | Audience scoring, dormancy, tenure |
| Events & programs | Read | Clinic and league fill campaigns |
| Transactions & payments | Read | Revenue figures, refund reversals |
| Multi-location | Enterprise | Per-site revenue and court usage |
Before anyone gets a text
The consent work happens once, up front, and it is not optional.
Sample data. Built by Klik Marketing for CourtStack.