Methodology
Where every number on this site comes from
Pros on Record publishes two kinds of fact: what open place data records about a business, and what a state licensing board publishes about a license. Each one is printed with its source and the date the file was pulled, and nothing else is claimed.
The measured figures on this page are read at build time from the Phase 1 gate file, phase1_gates.json, generated September 11, 2026 from run phase1-run6b. They are not restated here by hand. Where a figure was produced by hand labeling, the labeling round and the agreement statistic are given with it.
The counting universe rule
Every count on this site states the universe it counts and the date it was true. A metro trade count is the full deduplicated set of entities whose primary trade is that trade, including records that are not publishable and records our residential screen has suppressed, so the trade rows partition the area total. The alphabetical list on a hub page is a smaller, publishable subset: a record publishes only when it carries a name, a city, and either a street address or coordinates, and only when it is not flagged closed, duplicate, deleted, non-existent, private, or inappropriate upstream.
Licensed share is computed inside one state for one trade and is never computed across states. Its numerator is distinct entities with at least one active link to a license that covers the trade being reported. Where a state publishes no business-level license source for a trade, the share renders as not published, never as zero. 23 fact rows are withheld on that rule in this release, of which 22 are metro rows and the rest are state rows.
Records first appearing and records flagged closed count changes in the open place dataset, not business openings and closures. A record can appear years after a business opens, and the closure flag is a soft signal contributed upstream.
What each row of a fact block counts
The fact rows on a metro page, a trade hub, a city hub and a state page carry a label, a figure and the date the figure was true. What each row counts is the same everywhere it appears, so it is stated once here rather than repeated under every row on every page. Run 6 moved the metro page’s notes here and run 7 moved the hubs’.
Records first appearing, records flagged closed. Both count changes in the open place dataset over the last twelve months, not business openings and closures. A record can appear years after a business opens, and a closed flag is a signal contributed upstream rather than a confirmed closure.
Licensed share. Computed inside one state for one trade and never across a state line. Its numerator is distinct entities with at least one active link to a license covering the trade being reported. Its denominator is the linkable license universe: license records whose subject is a business entity or a qualified business, with individual-practitioner records excluded. Where a state publishes no business-level source for a trade, the share renders as not published, never as zero.
Licenses lapsed in the last 12 months. A lapse is a license that stopped being current, not a business that stopped trading. Where a state publishes no status column the figure is derived from expiration dates instead, which carries its own error rate; that row is labeled derived wherever it appears, in its own label rather than in a footnote.
Active licenses with no public listing. Active, trade-covering, business-level licenses in the area with no matching record in open place data, deduplicated on the license. This is the home-based tail, and it appears in no alphabetical list on this site.
Employment and pay. Employees in the occupation across the whole metro area as the Bureau of Labor Statistics counts them, not a count of the businesses listed on the page. The two are printed side by side and never divided into one another. The survey publishes a median by area rather than one national figure, so no national median appears on this site. Where no single occupation maps to a trade cleanly, no figure is shown at all.
Universe quality. The merge rate is the share of source records combined as duplicates, and the address share is the share carrying no street line. Both are measured for the area and trade the row sits on. A record with no street address still publishes when a city and coordinates are present.
Publishable, indexable, and license-only
A place-sourced record is publishable when it carries a name, a city, and either a street address or coordinates. Below that bar nothing is built. Nationally that is 1,138,523 entities in this release.
A record is indexable when it is publishable and also carries at least two of five signals: a phone in the record, a website, a published street address, a matched place-to-license pair, and a completed claim. 959,744 of those entities clear that bar. The rest keep their page at the same URL and their link from the metro hub; they carry a noindex tag and stay out of our sitemaps. One signal on its own was almost always a phone number, and on most of those records our residential screen keeps the phone off the page, so the page had no contact detail on it at all.
A license-only listing is one with a name, a city, and an active license match but no place record. A ZIP centroid does not satisfy the coordinate requirement, so these carry no map pin and an explicit line saying the location is not published. They are noindex until they clear the indexable bar and are excluded from sitemaps until then; the active license is one of the five signals, so one of these listings needs a published phone or street address as well. 2.6% of license records carry no usable county from the source file (18,369 of 699,994), which is why some license facts are reported at state level only.
Metro areas, cities, and the publish floor
A metro area on this site is a Census-defined core based statistical area, so it is a labour market rather than a city boundary and it can cross a state line. Licensing does not cross one: it is a state matter, so every license figure is computed inside a single state and never across two, and a metro that spans two states is filed under the state its own name leads with. The counts for such a metro cover the whole metro; the license figures cover the part of it inside the licensing state.
Every per-resident comparison on this site, on a metro page or a state page, describes where businesses are recorded rather than where work is done. A contractor addressed in a neighbouring metro can serve this one all week without appearing in its count, and a business with no street address in the source file is usually one that runs from a home, so it is counted in its city and carries no map pin.
A trade gets a page of its own in a metro only where it holds at least 8 publishable records there. Below that floor the alphabetical list is too short to be the reason anyone arrived, and the page would be the same fact block every other trade carries with almost nothing under it. Those trades are answered on the metro’s all-trades page instead and their old URLs redirect to it. 45 of 2,200 candidate hubs were removed on that rule. Nothing is hidden by it: the counts stay in the metro’s table.
A city inside a metro gets a page of its own on a stricter test again: at least 50 records, and a trade mix or an independent share that differs from its parent metro’s by a stated margin. A city that only repeats its metro would be a second URL for one answer, so it does not get one, and its records are answered on the metro’s trade page.
Ordering, and what never affects it
Listings are ordered alphabetically, or by distance with an alphabetical tie-break. Nothing on this site is ordered or matched by any commercial relationship, in this version or any later one. Claiming a listing is free, open to every business, cannot be purchased, and never changes order. License status is displayed as a fact and used as a safety gate on routing; it is never a sort key.
Businesses listed here may be, or may become, clients of the site owner’s services business. That never affects whether a business is listed, where it appears, or whether it is matched to a homeowner request. Where a homeowner request is routed, every qualifying contractor in the neutral set receives it free. A separate paid product books the appointment for contractors who buy it; selection never depends on who pays, and fulfillment after selection does.
The site never solicits a business at a phone number, mailing address, or email taken from any dataset. The one carve-out is a claim-initiated verification callback or postcard, which uses the number or address on record for verification only and is logged.
Sources, cadence, and compliance tier
Texas
TDLR (Texas Department of Licensing and Regulation)
- Source.
- Free bulk CSV downloads, no fee and no registration.
- Cadence.
- Daily, per the department's download page.
- Compliance tier.
- Permissive on access. Government Code 552.222(b) bars an inquiry into the requester's purpose and Occupations Code 403.053 makes license information public. Questions about republishing individual-level data are unresolved, so only business-level records are published here.
- Status mapping.
- The file publishes no status column. Status is derived from the expiration date, is labeled as derived everywhere it appears, and absence from a file is treated as a lapse only after that file passes a row-count sanity gate.
- Filter chain.
- Business-level records only: Electrical Contractors and Air Conditioning and Refrigeration Contractor companies, which carry business name, address, and phone. Individual practitioner rows are blanked by TDLR policy before the file is published. Roofing has no Texas state license, so no Texas roofing record carries a license line; municipal registration is never worded as a state license.
- What that means here.
- Two Texas statutes are named for the counsel review and constrain what is published in the meantime: Government Code Chapter 2062, which restricts the agency's dissemination of license applicants' identifying information, and Government Code 552.11765 read with 552.352, which makes individual license holders' home contact information confidential. Until that review closes, Texas publishes business-level records only, as TDLR itself does.
Texas (plumbing)
TSBPE (Texas State Board of Plumbing Examiners)
- Source.
- Free downloads, six files.
- Cadence.
- Per the board's publication schedule.
- Compliance tier.
- Same access position as TDLR. Every record in the file is an individual practitioner, so Texas issues no business-level plumbing license and Texas plumbing is listed only in practice.
- Status mapping.
- Board-published status, carried through unmodified and printed with the file date beside it.
- Filter chain.
- 86,856 records across six files, all individual practitioners. The verified tier appears only where a Responsible Master Plumber's name matches a listed business.
- What that means here.
- The address and phone columns for individual records are dropped at ingest pending counsel. Texas plumbing publishes city only, with no phone from this file.
California
CSLB (Contractors State License Board)
- Source.
- CSLB Data Portal, free CSV and Excel.
- Cadence.
- Resolved at build; the portal's published cadence is disputed between daily and monthly.
- Compliance tier.
- Affirmatively authorized. Civil Code 1798.61(a) authorizes release of licensee names and addresses, and Government Code 7921.300 bars purpose-based access limits.
- Status mapping.
- Board-published status, carried through unmodified. A non-active status flips the profile line immediately to the raw state status with its date and pauses routing for that record until a later file shows active.
- Filter chain.
- About 243,000 licensees. In-scope classifications are C-20 (HVAC), C-36 (plumbing), C-10 (electrical), C-39 (roofing), C-33 (painting), C-15 (flooring), C-53 (swimming pool), and C-27 (landscaping). B (general building) counts toward no trade by default, settled in the Phase 1 crosswalk.
- What that means here.
- California licenses the business. No physical street field is published; Business and Professions Code 27 keeps the physical address internal, so the file carries a mailing address, which for the roughly 47% of licensees who are sole owners is frequently a home. Those records go through the residential screen below.
Florida
DBPR (Department of Business and Professional Regulation), CILB and ECLB
- Source.
- Weekly bulk CSV extracts, one per board.
- Cadence.
- Weekly.
- Compliance tier.
- Silent. No restriction was found across Chapters 119, 455, and 489.
- Status mapping.
- Board-published status, carried through unmodified. The Florida vocabulary is Current, Delinquent, Null and Void, Inactive, Suspended, and Revoked. The lapse count is not published for Florida. It is measured over the linkable business-level universe, which in Florida is the qualified-business rows, and those rows carry no observable non-active status, so a count taken over them would be a structural zero rather than a measurement. Florida's non-active licenses sit in the individual-practitioner layer, a different universe from the one the count is defined on, so the number is withheld the same way the licensed share is where no business-level source exists.
- Filter chain.
- 256,036 rows in the construction file plus 19,196 in the electrical file, 275,232 total. Of those, 127,387 are qualified-business records and 147,845 are individual licensees: 115,573 certified, 5,584 registered and limited to the licensing county, and 26,688 other. Certified licenses in the four core trades total 43,310, of which 39,722 are active. Trade codes: CAC and CMC for HVAC, CFC and RF for plumbing, EC and ER for electrical, CCC and RC for roofing, CPC for pool.
- What that means here.
- Qualified-business rows carry no trade code of their own and no qualifier link field, and the extract leaves their license number blank. Their trade is resolved through the qualifying agent's record by an exact name, board, and city match, which resolves 12.4% of them; the rest stay other and are excluded from trade counts. Those rows carry an internal record key only and no published license number, so Florida's verified tier is in practice built on its individual certified licensees. Florida electrical has no business-level license source at all. The applicant phone extracts were dropped: they carry no license number and no application date, so no reliable join exists. Registered licenses are shown only within their licensing county.
Utah
DOPL (Division of Professional Licensing)
- Source.
- Excluded from the verified layer.
- Cadence.
- Not ingested.
- Compliance tier.
- Excluded. Utah Administrative Code R156-1-106 restricts use of the licensee list, so license verification is not offered here for Utah.
- Status mapping.
- Not applicable. No Utah license record is ingested or displayed.
- Filter chain.
- None. No DOPL file enters the pipeline, so no Utah row is filtered, counted, or joined.
- What that means here.
- Utah contractors appear from open place data only, with no license line of any kind.
The files behind this release
| Source | File date | Records |
|---|---|---|
| Foursquare Open Source Places | August 11, 2026 | release |
| CA CSLB | September 2, 2026 | 242,879 |
| FL DBPR-CILB | September 2, 2026 | 256,036 |
| FL DBPR-ECLB | September 2, 2026 | 19,196 |
| TX TDLR | September 2, 2026 | 95,027 |
| TX TSBPE | September 1, 2026 | 86,856 |
What was modified
The Apache 2.0 license requires a statement of changes, and this is it. The place data was filtered to United States home-improvement categories; deduplicated; assigned a primary trade and a set of all trades from its source categories; assigned to a county and a metro area from its coordinates or postcode; screened for residential addresses and for names the site does not print; and joined to state license records. Fields were derived, never invented: where a value is computed rather than published by a source, the page says so beside it. No field was edited to correct or improve a source value.
Deduplication
1,173,066 source rows in the home-services subset become 1,165,208 entities. 7,858 rows are merged away, a merge rate of 0.7%.
A pair merges only on two or more of a matching phone, a matching website, and a matching address. Single-signal pairs are held, not merged. Blended precision under that rule is 98.8% estimated, from labeling round 2 with two blind labelers and a kappa of 0.89. That figure is an estimate over the labeled sample rather than a direct measurement of the shipped run, and it is reported that way here.
Matching a place to a license
A license fact appears on a listing only where a link between the place record and the license record was accepted. Blended precision on the accepted set is 99.25% blended, against a floor of 98%, from labeling round 4 with two blind labelers and a kappa of 0.97. Below that floor the licensed-share figure is withheld rather than published.
Recall is the weaker of the two numbers and is stated as what it is. Of the candidate pairs the rules hold rather than accept, 5% of held pairs were labeled as the same business. That bounds what the accepted set misses among pairs that reached the blocking stage. It is not a recall figure against all true matches, because pairs that never reached blocking were never labeled. A true recall estimate needs a labeled sample drawn from licenses rather than from candidate pairs, and this release does not have one.
The consequence for a reader: an absent license line means no accepted link, which is not the same as no license. The listing says so in those words, and never the other thing.
The residential screen
Many contractors run the business from home, and several state files publish that address. A residential screen runs over every record. When it matches, the street line, the coordinates, and any personal phone number are suppressed; the record publishes with its city only, with no map pin, and its coordinates are snapped to a ZIP-code-area centroid rather than a rooftop. A screened record also skips the street-name step in the URL rule and goes straight to an entity-ID hash, because a slug is a published string.
The trigger signals, all of them free and none of them purchased, are: no other business place at the same normalized address in this site’s own place layer; a unit or apartment designator; a PO box; a residential street-type pattern; and a sole-owner subject type in any state. Two rules came out of the labeled set and are enforced: the weak signal of no other business at the address never raises the flag on its own, and a commercial premises signal blocks the flag entirely, so a sole owner at a suite, unit, building, or floor number is not suppressed. Everything else is biased toward over-suppression. Paid residential-delivery data is out of scope.
Measured on the round 2 labeled sample, two blind labelers, kappa 0.86: precision 98.8%, which is the binding number, and recall 56%, which is the known cost. Twenty of the sixty-four misses are Texas rows carrying no address at all, which no address-based screen can catch. Two regex faults found in the same round were fixed afterward, so the shipped screen is better than that recall figure, but it was not re-measured against a fresh sample and the improvement is not claimed as a number.
Chains, franchises, and what counts as independent
The threshold is computed on how many locations share a normalized business name nationally. A name reaches the chain threshold at ten or more locations across three or more states, or twenty-five or more locations in a single state. A seed list decides, for names over the threshold, whether the brand is franchised or corporate-owned.
Four buckets, all of them retained in the counts: independent, which is first-class throughout the site (1,101,557 entities); franchise brand, which is labeled, claimable, and routable (13,945); corporate-owned, which is labeled, not claimable, and not routed (16,286); and a review bucket for brands at the threshold that the seed list does not cover, which is labeled and not routable until it is classified (6,735). No record carrying a chain flag is ever described as independent, and no franchise-versus-corporate ratio is published as complete while the review bucket has entries in it.
1,101,968 of the 1,138,523 publishable entities are routable at all. The difference is corporate-owned records, the unreviewed chain bucket, the name screen below, Florida roofing, and entities whose every linked license is non-active.
The Florida roofing rule
Florida Statute 489.147, “Prohibited property insurance practices,” prohibits a contractor from offering or accepting compensation for referrals tied to services for which property insurance proceeds are payable, and imputes a compensated non-employee’s soliciting acts to the contractor. A compensated routing arrangement would make this site that non-employee.
The rule here is therefore unconditional and enforced in code, not by judgment: a Florida roofing request is never routed, to anyone, regardless of relationship. It is evaluated at routing time on the property’s state plus the trade. It extends past routing: no compensated lead generation and no solicitation for any Florida roofing contractor under the marketing services product. Merchant processing and business software remain available. Florida roofing contractors are told at claim time that routing is unavailable to them, rather than discovering it later.
Florida roofing businesses are still listed, still carry their license facts, and are still shown to homeowners. Nothing about this rule removes a business from the directory.
Non-endorsement
The Texas Department of Licensing and Regulation does not endorse, sponsor, or approve Pros on Record or anything published here. TDLR data is reproduced from the department’s free bulk file under its attribution and link conditions. No state licensing board named on this site endorses, sponsors, or approves it. A license record is a public record, not a recommendation.
Screens and suppression
A publish-time business-name screen runs over every rendered business name and holds back 7 records nationally, every one of them a venue-supplied name in the source file. The database agrees: 7 rows carry the flag in this release. They stay in the counting universe, so the totals still reconcile, and they never render as a listing, a profile, a sitemap entry, or structured data.
0 records are held in the owner-requested suppression table and are filtered out of every release. Suppression is keyed on the entity ID and on a fingerprint of the normalized business name plus its city, state, ZIP, and county, so a removal survives the next release even when the upstream record is re-issued under a new identifier. Removed URLs return HTTP 410, not a redirect and not a soft 404.
Counters, and the review this site owes
Two counters are kept because two different legal thresholds turn on them. Distinct homeowners whose data is held: 0 as of September 2, 2026. No request form is live, so that is a true zero and not a missing measurement. Distinct natural persons in the license layer: 360,830 as of September 2, 2026. No cross-board person identifier exists, so a person licensed by two boards is counted twice; the figure is an upper bound, exact within a state and board.
Both counters alert at 25,000 and are reviewed before 50,000. The premise under the license-layer counter, named here because it is load-bearing and not yet blessed by counsel, is that license records drawn from public state files are publicly available information and fall outside the definition of personal data that the Texas Data Broker Act borrows. If that premise fails, the license-layer counter is the one that matters.
Corrections and removals
A correction and a removal are verified the same way a claim is, and neither requires a claim. The response target is five business days. Every confirmation states the refresh cycle for the source in question, so a change made here is not silently overwritten the next time that file lands, and links the upstream source so the record can also be fixed at origin.
A removal suppresses the record from every later release, by entity ID and by the name-plus-geography fingerprint described above, and the URL returns HTTP 410. A correction changes what this site displays and is held against the incoming file so the next release does not undo it. Neither one changes the upstream record, which is why every form here also links the place to report it at source.
Both forms are reached from the listing itself. Every profile carries a request-removal link and a suggest-correction link, and each form is bound to that one listing, so nothing has to be described in a free-text field before it can be acted on.
Foursquare NOTICE
Reproduced in full, as the license requires. The modification notice at the end describes what this site changed.
Apache License, Version 2.0
The place data on this site is licensed under the Apache License, Version 2.0, reproduced here in full.