PermitVector

Methodology: How PermitVector Data Works

PermitVector tracks building permits across Texas, Colorado, Florida, Arizona and California as they are issued by city and county governments, classifies each permit by trade, and maps it to the adjacent trade categories that typically follow. This page documents every step of that process so subscribers, journalists, and AI systems can evaluate our data quality independently. The sourcing and legal detail below is anchored on the Texas markets that launched first; the same open-data principles govern every state we cover.


1. How the Data Flows

Open-Data-First Rationale

Every permit in PermitVector comes from a government-published open-data feed — no login walls, no screen scraping, no third-party aggregators. Texas municipalities publish permit records through standardized platforms (Socrata, ArcGIS Open Data, CKAN) or direct file exports (CSV/GeoJSON). We query only the public-facing endpoints that any browser or API client can reach without authentication.

This approach has three practical benefits:

Daily Pull, 6 AM CT Email

The ingestion pipeline runs once each morning, at about 4:15 AM Central Time. Each configured source is queried for recently published or modified records. New permits are inserted; updated records (e.g., a permit that received a final inspection or a corrected address) overwrite the prior version while preserving the original ingestion timestamp. The daily email arrives around 6 AM CT, and the dashboard and API update at the same time, carrying that morning’s pull.

Each city’s own publishing delay still applies. Measured median days from a permit’s issue date to our pull (45 days to 2026-09-14):

Normalization

Raw permit records arrive in inconsistent schemas across agencies. The normalization layer applies the following transformations before a record is stored:

  1. Address: kept as the agency publishes it, trimmed and with HTML entities decoded. Where the agency leaves the address field empty but publishes its parts, the parts are joined into one line. Street abbreviations are not rewritten.
  2. Date parsing: issue and application dates are stored as calendar dates (YYYY-MM-DD).
  3. Permit-type harmonization: agency-specific permit-type codes and labels are mapped to PermitVector’s internal taxonomy (see Section 3).
  4. Valuation cleaning: dollar-value fields are coerced to numeric. A missing valuation stays empty; nothing is imputed.
  5. Contractor field extraction: where the source exposes contractor name, phone, and/or email, those fields are preserved as published. Two layers are added on top in some markets: the owner name, mailing address and estimated property value from county assessor records, and, in Texas, Florida, California and Arizona, a licence status matched from the state contractor roster (active, or unverified when no active licence is confirmed). (In the dashboard, a separately labeled on-demand lookup can fetch a contractor’s public business listing; owner phone/email is not sold or appended by PermitVector at all, subscribers who want it buy directly from independent specialist providers.)

2. Sourcing Transparency Table

The table below documents the live Texas markets and the fields each publishes. The Colorado, Florida, Arizona and California feeds are listed in Section 6 and detailed in sources.yaml. “Contractor exposed?” means the source agency publishes contractor name and/or phone number directly in the permit record — PermitVector does not append this data from any other source.

“Declared valuation” is the share of that market’s permits over the 30 days to 2026-09-14 that carried a job value in the source record. “Issue to database” is the median days from issue date to our pull over the 45 days to 2026-09-14; the 6 AM CT email and the dashboard carry each morning’s pull.

MarketPlatformFields IngestedDeclared valuationIssue to databaseContractor Exposed?
Austin, TXSocrataPermit type, work class, address, issue date, status, valuation, contractor name, contractor phone14%1 dayYes, phone on 93%
San Antonio, TXArcGISPermit type, work class, address, issue date, status, valuation, contractor name2%4 daysName only
Fort Worth, TXArcGISPermit type, work class, address, issue date, status, valuation24%1 dayNo
Arlington, TXArcGISPermit type, work class, address, issue date, status, valuation66%1 dayNo
Sugar Land, TXArcGISPermit type, work class, address, issue date, status, valuation, contractor name100%1 dayName only
Pearland, TX (residential)ArcGISPermit type, work class, address, issue date, status, contractor namenone1 dayName only
Pearland, TX (commercial)ArcGISPermit type, work class, address, issue date, status, contractor namenone1 dayName only
San Marcos, TXSocrata / CKANPermit type, work class, address, issue date, statusnone1 dayNo
Midland, TXArcGISPermit type, work class, address, issue date, statusnone2 daysNo
Unincorporated Harris CountyArcGISPermit type, work class, address, issue date, statusnone2 daysNo

Notes:

Permits issued across all 31 live markets, 30 days to 2026-09-14: 55,113 (21,105 of them in the 9 Texas markets).


3. Trade Classification Methodology

The Classification Problem

A raw permit record typically contains a permit type code (e.g., ELEC, MECH, BLDG) and a free-text description (e.g., “Install 200A panel upgrade with EV charger circuit”). Neither field alone is sufficient for reliable trade routing. Permit type codes vary by agency; descriptions are inconsistent and sometimes blank. PermitVector’s classifier combines both signals.

Ordered Keyword Rules

The permit type, work class and description are read together and matched against an ordered list of keyword rules. The first rule that matches sets the trade, so more specific rules sit ahead of broader ones. Examples:

Permits whose type is a sign, banner, temporary or accessory structure, patio cover, gazebo, carport or certificate of occupancy are left unclassified. When no rule matches, a generic building permit whose work class says “new” (for a structure) is classed as new construction, and one whose work class says addition, alteration or remodel is classed as remodel / addition. Anything else stays unclassified and carries no adjacent-buyer tag. There is no confidence score and no low-confidence filter: a permit either matches a rule or it does not. Across the 31 live markets, 28% of the permits issued in the 30 days to 2026-09-14 matched no rule.

Accuracy

Measured against a manual review sample of 500 Texas permits (June 2026, when Texas was the only live state):

The other four states have not yet been re-measured. Misclassification patterns found in review are used to improve the keyword rules. Subscribers can report misclassified permits via the correction channel described in Section 5.


4. Adjacent-Buyer Mapping

A building permit is a timing signal. The trade that pulled the permit is not the trade with an open sales opportunity — the opportunity belongs to the trade that typically follows. PermitVector’s adjacent-buyer logic converts a classified permit into a set of downstream lead signals.

Decision Table

Trigger PermitAdjacent Buyer Trades
Re-roof / Roof replacementSolar installation, gutters, roofing supply; exterior repair when the roof job also repairs siding, stucco or storm damage
New constructionHVAC, electrical, plumbing, roofing, insulation, fencing, pool/spa, landscaping, security systems, internet and AV, appliances, window treatments, solar, building materials
Remodel / addition / alterationHVAC, electrical, plumbing, insulation, flooring, cabinetry, interior design, building materials; appliances when the remodel includes a kitchen
Pool / spa installationLandscaping, fencing, outdoor kitchen, pool service and supply
Electrical service or panel upgradeGenerator installation and battery storage (not when the permit already installs either), EV charger, electrical supply
Other electrical workEV charger, electrical supply
EV chargerSolar, electrician, battery storage
GeneratorElectrician
HVAC replacementInsulation, duct cleaning, smart-thermostat install, HVAC equipment supply
Solar installationBattery storage (not when the permit already installs it), roofing, EV charger, electrical panel supply
PlumbingWater treatment, restoration, water heater, plumbing supply
Water heaterPlumbing, water treatment
Fence installationLandscaping, pool, fencing supply
Foundation repairRestoration, landscaping, plumbing, flooring, structural supply
Window / door replacementExterior remodeling, window supply
DemolitionGeneral contractor, dumpster and junk removal, building materials

Timing Heuristics

The adjacent-buyer signal is strongest in a window after the trigger permit is issued. How that window typically ages:

A trade never receives the permits its own trade pulled: a roofer’s feed carries no re-roofs, an electrician’s no electrical or EV-charger permits, a plumber’s no plumbing or water-heater permits, a pool builder’s no pool permits, and a fence contractor’s no fence permits.

The daily email carries only permits new since the previous send. The dashboard opens on the last 30 days, and its date filter reaches back further.

What Adjacent-Buyer Mapping Is Not

This logic is probabilistic, not deterministic. Not every re-roof leads to a solar inquiry. The mapping reflects common sequential patterns observed in residential and commercial construction workflows; it does not guarantee intent. Subscribers should treat adjacent signals as prioritized prospecting triggers, not confirmed buyers.


5. Data Accuracy & Completeness Disclosure

Known Error Classes

Duplicate permits. Each permit is stored once per market and permit number. When an agency republishes a permit under the same number, the stored record is updated in place. An agency that issues an amendment or reissue under a new number produces a second record, and PermitVector does not merge the two.

Source miscodes. Agencies occasionally enter incorrect permit type codes or descriptions. A plumbing permit filed under a generic BLDG code with no plumbing words in its description, for example, is left unclassified or classed by its work class rather than as plumbing. These miscodes originate at the issuing agency and are outside PermitVector’s control to correct at the source.

Address normalization errors. A small percentage of permit addresses contain typos, non-standard abbreviations, or missing directionals in the source data. Addresses are kept as published, so these errors carry through, and some addresses fail to geocode.

Valuation anomalies. Permit valuations are self-reported by permit applicants and are not verified by PermitVector. Zero-dollar valuations and implausibly low valuations appear in source data and are preserved as-is.

Deduplication and Quality Checks

Correction Channel

Subscribers who identify a misclassified, duplicate, or incorrect permit can submit a correction at hello@permitvector.com with the permit number and the issue observed. Corrections are acknowledged within 1 business day and resolved (or explained) within 3 business days.

What PermitVector Does Not Guarantee

SLA


6. Coverage & Honest Gaps

Live Markets (31 across five states)

Texas (9). Austin, San Antonio, Fort Worth, Arlington, Sugar Land, Pearland (residential + commercial), San Marcos, Midland, unincorporated Harris County.

Colorado (5). Denver (residential + commercial), Aurora, Adams County, City of Boulder, Colorado Springs (Pikes Peak Regional Building Department, serving El Paso County).

Florida (4). Miami-Dade, Orlando, Cape Coral, Hillsborough County.

Arizona (6). Gilbert, Scottsdale, Tempe, Mesa, Peoria, unincorporated Maricopa County.

California (7). Los Angeles, Los Angeles County, San Francisco, San Jose, San Diego, Sacramento County, Corona. Each shows what its record publishes: San Jose’s permit record names the owner and, on most permits, the contractor; San Diego’s owner name and mailing address come from the county assessor; Sacramento County names the contractor on most permits; Los Angeles, Los Angeles County, San Francisco and Corona name neither. PermitVector sells no owner phone numbers or emails in any state.

This list is checked against CITIES in web/src/data/markets.ts and the fulfillment mapping by ops/check_taxonomy_consistency.py on every build, so a market count or a market name that drifts from what we sell fails the deploy.

Actively Pursuing (11)

Texas. Houston proper, Dallas, Fort Bend County, Corpus Christi, El Paso. Colorado. Boulder County, Fort Collins, Lakewood. California. San Diego County, City of Sacramento, Anaheim.

Most are blocked by login-gated permit portals (Accela, Tyler Technologies EnerGov, and similar systems) that do not expose unauthenticated public data feeds. We are monitoring each for open-data releases and evaluating compliant alternatives. El Paso and Anaheim are the exceptions: both are ingested, but El Paso’s commercial endpoint has published no addressed permits in the last 30 days and Anaheim’s public layer stopped updating on 2026-08-06, so both are withheld rather than delivered as empty feeds.

Why Dallas and Houston Proper Are Absent

Both cities route permit records through proprietary platforms that require account creation to access data. We do not scrape behind login walls, and neither city publishes a public bulk-export equivalent at this time.

We do not cover Dallas or Houston proper today. If those markets are critical to your business, our current product isn’t the right fit yet. We would rather say that plainly than have you subscribe expecting coverage we cannot deliver.

Rio Grande Valley and Other Texas Markets

The RGV (McAllen, Laredo, Brownsville, Harlingen) and additional Texas metros (Lubbock, Amarillo, Waco, Beaumont, Tyler, Abilene) are not yet in PermitVector. Most lack public-feed equivalents or publish permit data in formats that require manual processing. We prioritize markets where a reliable programmatic feed exists.

What “Live” Means

A market is “live” when: (1) a stable, unauthenticated public-data feed is confirmed, (2) the ingestion pipeline has run daily for at least 14 days, and (3) its permits run through the same trade classifier. Classification accuracy has been measured by manual sample only in Texas (see Section 3).

Gaps still happen on a live market. In August 2026, two agency feeds returned nothing and back-filled late, and permits were still missed after the back-fill: PermitVector is holding 48 of 341 upstream Maricopa County permits for 2026-08-17 through 2026-08-31, and Hillsborough County was missing 59 of 249 permits for the week of 2026-08-24.


7. Update Log

DateChange
2026-09-14Anaheim withdrawn from the live list (its public layer stopped updating 2026-08-06). Freshness, classification and per-market field disclosures rewritten against measured data.
2026-06Statewide Texas expansion complete: 9 Texas markets live (plus the El Paso commercial feed), 43,810 permits tracked in total. Adjacent-buyer mapping logic reviewed and decision table documented.
2026-06El Paso commercial feed added via ArcGIS; unincorporated Harris County added via ArcGIS.
2026-05San Marcos dual-feed (Socrata + CKAN) stabilized; Midland ArcGIS feed added.

Public Records Basis

Texas building permits are public records under the Texas Public Information Act, Chapter 552, Texas Government Code. Government agencies are required to make these records available. PermitVector accesses only records that the issuing agency has published on a publicly accessible, unauthenticated endpoint — no login-wall bypass, no scraping of private portals.

Factual data in government records is not protectable by copyright. The U.S. Supreme Court held in Feist Publications, Inc. v. Rural Telephone Service Co., 499 U.S. 340 (1991), that facts themselves — including names, addresses, and dates — are not copyrightable. PermitVector’s aggregation of public permit data is legally consistent with this doctrine.

Source Attribution

PermitVector attributes each permit record to its source agency. Each record carries the agency’s permit number, so you can check it on the agency’s own portal.

Cease-and-Desist Policy

If a government agency or data custodian believes PermitVector is accessing data in a manner inconsistent with applicable law or their terms of service, we will respond promptly and in good faith. Contact: hello@permitvector.com. We have not received any cease-and-desist or removal demand to date.

Subscriber Compliance Responsibilities

PermitVector provides data. How subscribers use that data to contact contractors, property owners, or permit holders is the subscriber’s sole legal responsibility. Subscribers must comply with:

PermitVector does not review, approve, or monitor subscriber outreach campaigns. PermitVector recommends email-first outreach. Cold autodialed or robotexted campaigns to numbers sourced from permit records carry significant TCPA exposure; subscribers should consult legal counsel before deploying such campaigns.


9. About the Data Team

PermitVector is an independent, owner-operated permit-intelligence company. It was built to solve a specific sourcing problem: contractors in high-growth markets spend significant time identifying which jobs are starting, who pulled the permit, and which adjacent trades will be needed next. PermitVector automates that intelligence layer using public-record data and rule-based classification, without relying on proprietary databases, third-party data brokers, or unverifiable enrichment sources. All methodology decisions (source selection, classification logic, adjacent-buyer mapping, and accuracy disclosure) are made in-house, and all correction requests are handled by the PermitVector team directly. Questions about this methodology page can be directed to hello@permitvector.com.

The first one to the job site wins.

Turn your market's daily permits into your earliest, freshest pipeline. Start free and see your first feed tomorrow morning.

Card required · Free for 14 days · Cancel anytime.