How Lead-Qualification Software Actually Filters Construction Projects by Trade

A building permit almost never says "this project needs an electrician." It says "new single-family dwelling" or "interior alteration, commercial" or a scope-of-work line written by a permit clerk for a different purpose entirely. Every trade-matching system, whatever it's built on, starts from that gap. Here is what actually happens between a raw filing and a feed that claims to be sorted by trade. Builtie's project feed is one of those systems, scoring every permit per trade before a project reaches a contractor, so the steps below apply to it as much as to any other.
The three things a system actually has to work with
Permit type. A coarse category the municipality assigns: new construction, addition, alteration, demolition, mechanical, electrical, plumbing. Some cities split mechanical/electrical/plumbing into their own permit types with their own numbers; most fold them into one "building permit" and the trade detail lives in the text.
Scope-of-work text. A free-text field the applicant fills in, ranging from a full paragraph to three words. This is where most of the real signal lives, and it's also where most of the noise lives — "renovation" tells you nothing; "kitchen renovation, relocate plumbing, new electrical panel" tells you three trades and roughly which order they're needed in.
The applicant of record. The name filed on the permit. In some markets this reliably names the general contractor or builder. In most others it names whoever filed the paperwork — an expediter, the architect's office, a permit-filing service — which is a different problem from trade classification but trips up the same naive systems in the same way.
Why a plain keyword filter over-matches
The obvious first approach is a keyword list: match "solar" for solar installers, "HVAC" or "furnace" for mechanical, "pool" for pool builders. This works well for trades with a distinctive vocabulary and works badly for trades that share language with general renovation — a landscaping search on "outdoor" or a flooring search on "flooring" pulls in every renovation permit that happens to mention a floor, most of which are not landscaping or flooring jobs at all. The fix isn't a longer keyword list; it's requiring the trade term to appear as the subject of the scope line rather than anywhere in it, and increasingly, classifying the whole scope text against a trained set of labeled examples rather than pattern-matching words.
Even a well-tuned classifier inherits the ceiling of its input. A one-line scope of work ("general renovations") gives a classifier nothing to work with regardless of how it's built. That's a data quality problem, not a modeling problem, and it varies enormously by municipality — some cities require a detailed trade breakdown at filing, others accept three words and move on.
The classification that actually matters more than the category
Trade category answers whether a project is relevant. It doesn't answer when — and when is where most of the wasted outreach happens. A single-family new-build permit is relevant to an electrician for months, but only genuinely actionable for roughly a third of that window: after the structure is framed and before the sub-trades are already awarded. Reach out at excavation and you're too early to quote; reach out once finishing work has started and the trade was already decided months ago.
So the more useful filter isn't "does this project need my trade" — most systems can get that roughly right — it's "is this project at the point where my trade gets decided right now." That requires inferring construction stage from permit status, inspection history, or issued-date age, which is a separate and generally less mature part of the pipeline than trade classification itself, and it's stale the moment nobody re-checks it. A stage inferred from data that's three months old is a guess dressed as a fact.
What this means for evaluating any lead feed
Ask three questions of any trade-filtered construction feed before trusting it: how is the trade inferred (keyword, classifier, or manual tagging), how often is the applicant-of-record actually the party who'll award your trade rather than a filing service, and does the feed say anything about timing or only about category. A feed that answers all three honestly — including where it's weak, because permit data quality is set by what each municipality actually publishes, not by any vendor's software — is worth more than one that promises perfect matching and says nothing about how it works. Builtie's own feed leans on stage inference for exactly this reason: a correctly-categorized project reached at the wrong moment is still a wasted message.
Frequently asked questions
Why doesn't a permit just list the trades it needs?
Most municipal permit systems record a project type and a scope-of-work description, not a bill of trades. "New single-family dwelling" and "interior alteration" cover thousands of projects that need completely different subcontractors, so the trade has to be inferred, not read off the form.
How accurate is automated trade matching?
It varies by city and by trade. A trade with a distinctive scope-of-work vocabulary (pool, solar, fire suppression) matches cleanly. A trade that overlaps with general renovation language (flooring, painting) produces more false positives, and that is worth checking against a sample before trusting a feed at scale.
Is a bigger, less-filtered feed better than a narrow one?
No. A feed of 200 loosely-matched projects a week is worse than 20 tightly-matched ones, because every loose match costs a real person's time to rule out. The filter's job is to spend that time on your behalf, not to maximize row count.
Builtie Team
Intelligence and outreach for North American construction trades.


