Revenue Intelligence

Price every hour at what the
demand will actually pay.

CourtIQ scores demand for every day-of-week × hour in your schedule, recommends a rate, and — with one click — applies it to every booking for the next 30 days.

0–100

Demand score per slot

30d

Rolling window per accept

14d

Dismissal cooldown

What it does

Stop re-doing pricing in a spreadsheet every quarter.

The engine looks at your actual bookings, not a generic industry playbook. You stay in control — accept what fits, dismiss what doesn't.

Demand-scored every hour of the week

Every day-of-week × hour slot gets a 0–100 demand score from your last 30 days of bookings. Weekend, evening, and morning modifiers applied on top. No manual maintenance.

One click applies the rate

Accept a recommendation and the new price lands in ciq_seasonal_pricing — the exact table the booking engine reads. Every booking at that slot for the next 30 days charges the new rate.

Dismiss what doesn't fit

Not every recommendation fits your league schedule or court etiquette. Dismiss and it disappears for 14 days — long enough to avoid noise, short enough to come back when context changes.

How it works

From demand signal to live rate in four steps.

The dashboard heatmap does the visualization. The engine does the math. You do the last mile — you know your facility, your community, your constraints.

01

Score demand by slot

Pull the last 30 days of non-cancelled bookings, group by weekday + hour, compute utilization, apply peak/off-peak modifiers. Output: a 0–100 score for every operating hour.

02

Recommend a rate

High demand (80+) → premium pricing. Medium → hold. Low → targeted discount. Floor $10, ceiling $75. Every recommendation comes with a one-line reasoning.

03

Accept or dismiss

Accept writes to ciq_seasonal_pricing with day-of-week + hour scope and a 30-day rolling window. Dismiss hides it for 14 days in org settings.

04

Booking engine quotes the new rate

getEffectivePrice() filters seasonal rates by booking date, day-of-week, and hour — picking the most-specific match. No code changes required; just the accept.

What's different

Most 'dynamic pricing' is just a spreadsheet with modifiers.

  • Grounded in your bookings. Not national averages, not survey data — your last 30 days.
  • One click to live. No exporting CSVs or re-typing rates into your booking system. We write directly to the table the engine reads.
  • Deterministic + auditable. Every recommendation ships with a one-line rationale. Nothing hidden in an LLM or a model nobody can explain.
  • Respects existing seasonal rules. Holiday and summer overrides still work. Recommendations live alongside them, scoped by day-of-week and hour.
  • You stay in the loop. Nothing auto-applies. Every change is an explicit Accept from a human.

Price floor $10, ceiling $75

Built-in guardrails. We will never recommend a price that embarrasses you in front of your members.

Weekend + evening premiums

Weekend slots with decent demand get a 10% premium. Prime-time (5–8 PM) gets another 5%. Mornings off-peak get an early-bird discount.

Surfaced in the daily digest

Every morning, the operator digest tells you how many pending recommendations are waiting — so you never forget to look.

Questions

The questions operators ask first.

No. Every cell has an Accept and a Dismiss button. Dismiss hides that slot's recommendation for 14 days; after that, if the signal is still there, it comes back.

Facility teardown

Let's look at your slot-level revenue.

Give us 30 minutes and we'll walk through your demand score, your pricing gaps, and three specific rates that would move the needle — whether or not you ever become a customer.