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.

It is first-party data: a direct statement about openings our own scanner caught, not a model of the agency’s inventory and not a feed resold from anywhere else. That is narrower than “will a spot become available”, and it is the only version of that question anybody has actually measured. Getting the spot is the next step after that, and it comes down to how fast you act on the opening.

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. That 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 alert, 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

Every permit borrows strength from every other one. 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. A permit with four windows of history gets a number backed by the whole fleet rather than noise dressed as precision:

α = 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 rather than a cross-validated one, which is not feasible with this little total history.

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.

When a permit gets a forecast

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.

Clear all four and the permit carries a number. Below the threshold there is no number and no placeholder standing in for one, so an absent forecast means unmeasured, never a measured zero.

Bands and ranges

Every estimate maps to one of three bands:

  • Low chance: under 31%.
  • Moderate chance: 31% to 60%.
  • Good chance: 60% or higher.

Every band is published alongside 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.

How to read it

  • A likelihood, banded rather than pinned to a date.
  • Recomputed daily from real scan history.
  • Pro scans faster than free, so its numbers move sooner.

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