Verg Verg

Know where your next job is.

The map How it works Track record About Open the map
Sign in Start free

Methodology

How the forecast works

Verg estimates, for one neighborhood and one kind of work, how many homes are likely to pull a permit next month and how much they are likely to spend on that work on average. This page describes how that estimate is produced, what goes into it, and what it actually predicts.

The short version

  • The model predicts work per category per census tract.
  • We predict a rate of work per eligible home, then multiply by the number of eligible homes, which is what makes a small tract and a large one comparable.
  • We use two estimates: how many homes act, and how much each spends. Combined they give expected dollars.
  • We predict recent months using strictly earlier data, and test the model on cities it's never seen.
  • The model uses no personal data. Not yours, not a homeowner's. It is never been trained on your account, your searches, or your saved filters.
  • This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.

1. What the model estimates

For a given census tract (neighborhood) and category of work, the model produces two related quantities:

Forecast
The predicted rate of permit activity for the coming period, multiplied by the current number of eligible homes in the tract. Predicts about how many homes there are that are likely to pull a permit in a certain category in a month
Market potential
The de-seasonalized, steady-state rate multiplied by eligible homes. This is a ceiling rather than a forecast: how much work an area is capable of generating in a typical period, stripped of the month-to-month swing. If you are looking at where has the most potential to spend regardless of other factors, this metric is for that purpose.
Expected spend
Predicted home count multiplied by predicted average spend per home. Some areas do not carry valuation data, so areas that do are used to predict permit valuations in those areas.

2. The data the model uses

Everything the model consumes is public. Permit, code violation, and demographic data all come from government entities or their affiliates.

Building permits
Collected from city and county permitting authorities through their own public data portals and interface. Each record contributes an address, an issue date, a description, a declared valuation where the authority publishes one, and the contractor of record where named.
Census tract boundaries
The US Census Bureau publishes their census tracts, which are broken up by roughly equal population, via TigerWeb. Permits are assigned to a tract by their coordinates, and a tract that straddles two cities receives the permits reported by both. We use these tracts to roughly designate neighborhoods and as the unit for model predictions.
Tract demographics
American Community Survey five-year estimates, latest available vintage, at the tract level. Collected variables are listed in §4.
Parcel and assessment records
County assessor services, fetched on demand for the property-suggestion feature. These are used to rank properties within a tract you have already opened, and are not inputs to the forecasting model.
Building-code violations
Where a jurisdiction publishes them. These are categorized where possible as a predictor of future work. See §5.4.

3. How it works

3.1 The unit of observation

One row of training data is one census tract associated with a category and month. A census tract is a small statistical area, typically holding between one and eight thousand people. Nothing below that level is modeled, and all predictions of individual homes' work is done at runtime by matching property attributes and data from the previous period of work.

3.2 A rate per home, not a raw count

Rather than predicting a raw permit count, the model predicts a rate per eligible home and multiplies that by the number of eligible homes in the tract. The count model carries the logarithm of eligible homes as a fixed offset, which is what forces it to learn a per-home rate that it can apply to tracts with even sparse data or population.

The denominator is owner-occupied housing units, because most home-improvement permits are pulled by owners. This one modeling choice is what yields both deliverables in §1.

3.3 Two coupled models

Demand splits into how many people act and how much each spends. We model them separately because they behave differently and are driven by different factors, and some jurisdictions do not publish valuation data for their permits.

Frequency
A gradient-boosted Poisson model of the number of homes acting, with log(eligible homes) as the offset.
Severity
A gradient-boosted model of average declared valuation per home, trained only on cells that had activity.

Expected spend is the product of the two. Both are LightGBM models; the production models are persisted with their feature specifications and training-time category encodings, so a city with only a few months of history is scored against the same encodings the model was trained with rather than against a re-derived set.

3.4 What counts as “a home”

The target is the number of distinct home addresses that pulled at least one permit of the category that month, not the raw permit count. A house that pulls three roofing permits is one roofing home, though all three permits' dollars count toward its spend. Addresses are de-duplicated across data feeds, so a home on a city boundary reported by two authorities counts once. Permits with no usable address each count as their own home rather than being silently merged.

A permit labeled with several kinds of work contributes to each of them. The synthetic “all work” category counts each home once regardless of how many labels its permits carry.

4. What the model uses as inputs

The complete feature set the model is trained on:

The tract's own history
Lagged activity at one, three, and twelve months back, and trailing sums over longer windows. Every one of these is strictly backward-looking.
Calendar
Month of year (as a category, to carry seasonality) and year (to carry trend).
Data completeness
A settlement-age value for each cell. How many months that month has had to finish being reported. See §6.2.
Work type
The category being predicted, as classified by our system.
Tract demographics (from the ACS)
Population, total housing units, occupied housing units, owner-occupied housing units, renter-occupied housing units, median household income, median year the housing was built, and median value of owner-occupied homes. The owner/renter mix and home values carry signal beyond raw size, which is why they appear alongside the offset rather than being folded into it.

Those eight ACS variables are the only demographic data we collect at all. We do not collect, store, or model race, ethnicity, age, national origin, language, household composition, disability, or any other protected characteristic, at any geographic level. They are not in the database to be used.

5. What the model deliberately does not use

Each of the following was tested and rejected on measured evidence rather than assumed. We record the numbers because a model card that lists only what worked is an advertisement.

5.1 Your data

The models have never been trained on subscriber information of any kind. Not your account, not your profile, not your searches, not your saved filters, not the tracts you open, not the properties you look at. There is no feedback loop from product usage into the forecast. See our privacy policy.

5.2 The city's identity

The model does not know which city a tract is in. This allows us to predict broader trends and ensure our model is useful nationwide.

5.3 Environmental and hazard data

Soil, flood, hail, wind, solar, and drought data were all tested as model inputs, but as yet still lead to a less accurate model. We actively seek to make our model as accurate as possible.

6. How it is validated

6.1 Time-based splits only

The backtest predicts the most recent months using strictly prior data. We never use a random train/test split. Every model is scored against naive baselines — a seasonal-naive forecast and a trailing-twelve-month average — on the same rows. Beating those baselines is the bar; a model that does not clear it is never published.

6.2 Recent months are incomplete, and the model is told so

Permit records arrive late. The most recent months in any extract are under-reported, sometimes substantially, and how late varies by jurisdiction. The common fix is to discard the recent tail, which throws away the freshest and most valuable data.

Instead, every cell carries a settlement age: how many months it has had to finish being reported, capped at three, with fully-settled months all sharing the cap. The model takes it as a feature and can learn that a low recent count may be under-reported rather than genuinely low. When predictions are graded, only fully-settled months are scored, so nothing is ever measured against a partial actual.

6.3 Transfer to unseen cities

Because the product onboards new metros, the question “how good is this in a city we have never trained on?” is a first-class metric rather than an afterthought. The leave-one-city-out harness answers it directly, and its results drove the decisions in §5.2 through §5.4. A newly onboarded city is scored by the saved production models with no retraining; its forecasts start out coarser, because the seasonal and lag features have little history to work with, and sharpen as months accumulate.

7. Reading a prediction

A raw number is close to meaningless without a sense of what is normal for the place it describes. Four homes acting is extraordinary in a quiet tract and unremarkable in a dense one.

Every shipped prediction therefore carries a self-relative reading: how many standard deviations it sits from the median of that same tract and category's own actual results over the twenty-four months immediately before the predicted period. The median rather than the mean, because permit dollars are skewed enough that one large commercial job would drag an average. Only months the tract actually permitted in are counted, so the comparison is against a typical active month rather than a typical calendar month. Where there is too little history to judge, the figure is absent rather than zero — “we cannot say” and “exactly typical” are different answers.

8. How the track record is graded

The predictions shown on our track record are graded against settled actuals after the fact, per city, state, month, and category. A prediction qualifies for display only if it is a genuine hit under one of two definitions:

Rank hit
The tract was predicted to be among the top few in its group by expected spend, and it actually was. The card shows the predicted and actual rank, and how many places the call was off by. The threshold is ten places.
Value hit
The predicted spend or predicted home count landed within 15% of the actual. Where both are available, the card reports whichever error term is lower, but only among figures that carry real signal.

Two guards keep this honest. Cells with no activity never qualify — a prediction of zero against an actual of zero is arithmetically perfect and tells you nothing. And a comparison only counts as a value hit if at least one of the predicted or actual figures is non-zero, which excludes the same artifact from the dollar side. Re-grading a month replaces that month's entries outright, so a prediction that looked good against partial data cannot linger once the month has settled.

The metro shown rotates, and the city and state together form the key — US city names repeat, and keying on the name alone merged two different Arlingtons into one leaderboard.

9. How often it updates

Daily
The current and next month are re-forecast from the saved models, with no retraining, so that late-arriving permit reports flow through into the numbers. The two months are produced in one pass and are internally consistent. Note that this does not nowcast permits inside the current month: daily movement comes from late reports landing against earlier months and from the calendar rolling.
Monthly
The models are retrained on the full panel and re-saved.
On onboarding
A newly added city is scored immediately by the saved models, with no retraining and however much permit history it has.

10. Known limitations

These are the things we would want to know if we were buying this.

  • A forecast is not a guarantee of work. It is a statistical estimate of activity in an area, with real uncertainty around it. Treat it as a way to prioritize effort, not as a commitment that a job exists.
  • Dollar figures are declared valuations, not quotes nor revenue. The valuation on a permit is what the applicant declared to the permitting authority. Practice varies by jurisdiction and by applicant, some authorities publish no valuation at all, and the figure frequently differs from what the work actually cost.
  • Unpermitted work is invisible. Work that does not require a permit, or that is done without one, does not appear in the data at all. The share of work that falls into that gap varies by trade and by jurisdiction.
  • Coverage and quality are uneven. Different authorities publish different fields, at different cadences, with different reporting lags and different standards of address quality. A quiet tract may be genuinely quiet or may sit in a jurisdiction that reports slowly.
  • Categories are inferred from free text. Work type is derived from the description a jurisdiction publishes. Descriptions are terse and inconsistent, and a permit that names several kinds of work is counted under each of them.
  • Demographics are estimates are not perfect. ACS five-year figures are survey estimates, not a census. They carry margins of error that widen for small tracts, and they describe a five-year window rather than the present moment.
  • The transfer results are measured at a small number of cities. The decisions in §5.2 through §5.4 were taken at roughly eleven cities. They are the right decisions at that scale and may not be at fifty. They are scheduled to be re-measured, not assumed to hold.
  • Property suggestions are not a part of the forecast. When you open a tract, the properties we surface are ranked by resemblance to the homes that recently permitted there, using public assessor records. That ranking is not a prediction that any specific home will pull a permit, and it carries no probability.
  • We do not model who will win the work. Nothing here estimates your close rate, your competitors' pricing, or whether a homeowner will hire anyone at all.

11. Responsible use

The model consumes area-level demographic variables, including median household income and median home value. We say so plainly because it would be easy not to. They are used as covariates for estimating demand for construction work in an area, and the output is an estimate of permit activity overall.

Verg is a commercial prospecting tool and nothing else. Its output must not be used as a factor in any decision about an individual's eligibility for credit, insurance, housing, employment, or any other benefit or service. Verg is not a consumer reporting agency, its output is not a consumer report, and it is not assembled or evaluated for any purpose covered by the Fair Credit Reporting Act.

This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.

You are responsible for contacting prospective customers lawfully. See §6 of our privacy policy.

12. Changes to this page

This page describes the model as it currently ships. When the feature set, the validation approach, or the grading thresholds change, this page is updated in the same change. If you have a question it does not answer, send it through the contact form — the gaps people ask about are how this page gets better.

Last reviewed 21 August 2026.

Verg Verg

Public permit records, scored. We never contact homeowners, and your leads are never resold.

Product

  • The map
  • How it works
  • Track record

Company

  • About
  • Methodology & model
  • Privacy
  • Contact / feedback

© 2026 Verg. Forecasts are estimates derived from public permit records and census data at the census-tract level, and are not guarantees of work. Dollar figures are modeled estimates, not quotes.

Report a bug / feedback

What's going on?