Skip to content

How PermitCast forecasts work

A PermitCast forecast is one number, computed one way, published in full here. No marketing gloss — this page is the math.

What we estimate

For a permit and a window of 7, 14, or 30 days: the probability that our scanner detects at least one genuine availability opening in that window. An “opening” is a real new date appearing in the booking system that wasn’t there on the previous scan — the exact same event our drop feed and drop report count, never “slots returned” noise.

This is deliberately narrower than “will a spot become available” (we can only report what our scanner catches) or “will you get a spot” (that depends on your alert speed). It is a direct statement about our own detection history.

The base rate

We split a permit’s scan history (only real, post-2026-07-03 change data) into non-overlapping windows of the forecast length, starting at its first scan and ending yesterday. For each window we record one binary outcome: was at least one opening detected, yes or no. The raw rate is simply:

p̂ = (observed windows with at least one opening) / (observed windows)

We use non-overlapping windows on purpose. Overlapping windows would produce correlated observations that make the estimate look more precise than it is — the conservative choice, given we’re publishing a probability.

One more rule: a window only counts as observed if our scanner was actually running on at least half of its days. Windows where scanning wasn’t happening — a lapsed watch, a paused adapter, an outage — are excluded from the calculation entirely, on both sides of the fraction. They are never counted as “no opening,” because not looking is not the same as looking and finding nothing.

Shrinkage toward a shared prior

Most permits have only a handful of windows of history, so a raw rate off of, say, four windows would be noise dressed as precision. So we shrink each permit’s rate toward a pooled prior — the same rate computed across every qualifying permit — using a standard Beta-Binomial update (the same family as regressing a batting average toward the league mean):

α = p_global × k,  β = (1 − p_global) × k  (k = 8)
p_shrunk = (successes + α) / (windows + α + β)

The constant k = 8 means the shared prior carries the weight of eight extra windows. A permit that just crossed the 6-week floor is therefore heavily pulled toward the prior; a permit with many months of consistent history increasingly dominates its own estimate. k = 8 is a judgment call — it isn’t derived from a cross-validation study (which isn’t feasible with this little total history), and we say so plainly rather than pretend it’s optimized.

We deliberately do not use a Poisson or machine-learned model. Those assume more about the data than a few months can justify. A shrunk empirical frequency is the simplest thing that’s defensible here.

The minimum-data threshold

A permit shows a forecast only when all of these hold:

  • At least 6 weeks (42 days) of scan coverage since our change epoch.
  • At least 30 scans in that window (guards against sparse or broken scanning).
  • Scans in at least 3 distinct calendar weeks.
  • Enough pooled history across all permits for the shared prior itself to be trustworthy for that window.

Below the threshold we publish nothing — not a zero, not a “coming soon” number. Below threshold, the honest position is “we don’t have enough data to have an opinion,” so we don’t show one.

Bands and ranges

Every estimate maps to one of three bands:

  • Low chance — under 15%.
  • Moderate chance — 15% to 40%.
  • Good chance — 40% or higher.

Pro users also see a numeric range (for example, “20–35%”), rounded to 5-point steps and always at least 10 points wide. The width is itself an honest statement of uncertainty at this sample size — we never show a single point estimate, because one number would imply precision the data doesn’t support.

What this is not

  • Not a guarantee that a permit will open up.
  • Not a prediction of a specific date.
  • Not applicable to lottery permits (no cancellation-scan history to forecast from).
  • Not a real-time signal — it’s a slow-moving statistic recomputed once a day from data that’s already at least a day old.
  • Based on our own scan cadence, which is faster for Pro than for free accounts.

Why this is hard to copy

A forecast like this is only as good as the scan history behind it. PermitSnag runs roughly 15,000–28,000 availability scans a day against this inventory, and has been recording real change data since July 2026. The forecast is a direct read of that history — there’s no shortcut to it without the same continuous scanning over the same time span.

See a live forecast

Browse permits and open any one that’s cleared the threshold to see its bands for all three windows.

Browse permits