PlumbIntel API
REST + JSON access to Arizona building permits, the AZ ROC contractor roster, multi-permit project clusters, contractor-relationship signals, and direct-mail exports — the same intelligence the app runs on. Coverage is Maricopa-metro, refreshed daily.
Authentication
Create a key under Settings → API access (org admins, API-enabled plans). Send it as a bearer token. The key is shown once at creation — store it securely.
curl https://plumbintel.com/api/v1/permits?jurisdiction=phoenix&freshness=hot&limit=5 \
-H "Authorization: Bearer pk_live_your_key_here"Conventions & rate limits
- Responses use the envelope
{ data, count?, notes? }. - Every response carries
X-RateLimit-Limit,-Remaining, and-Reset(seconds to UTC midnight). - Over your daily cap returns
429with aRetry-Afterheader. - Daily request cap is set by your plan; Enterprise limits are custom.
- List endpoints paginate with
limit+offsetand returnhasMore.
Endpoints
/api/v1/permitsList permits
Filtered, paginated permit feed (~928K rows, daily-refreshed).
Query parameters
zip— Single ZIP codejurisdiction— phoenix | mesa | scottsdale | tempe | gilbert | peoriaworkClass— Case-insensitive contains match on work classlifecycle— applied | issued | in_progress | finaled | void | unknownfreshness— hot | warm | cold | deadvaluationMin— Minimum total valuationvaluationMax— Maximum total valuationissuedSince— Issued on/after (YYYY-MM-DD)issuedBefore— Issued on/before (YYYY-MM-DD)limit— Page size (max 200)offset— Result offset
/api/v1/permits/{id}Get a permit
Single permit by id, enriched with the parcel owner / property block.
/api/v1/contractorsSearch contractors
AZ ROC roster (~64.6K) with the disciplinary / unlicensed-violator overlay.
Query parameters
q— Business-name contains (case-insensitive)classification— Exact ROC class code (e.g. 'B-01', 'CR-39')status— Exact status (e.g. 'Active')zip— Business ZIPcity— Business city (exact)hasDisciplinary— 'true' for only contractors with active disciplinarylimit— Page size (max 200)offset— Result offset
/api/v1/contractors/{license}Get a contractor
Single contractor by ROC license, with the nightly activity rollup.
/api/v1/contractors/{license}/relationshipsContractor relationship graph
Contractors who co-occur with this one at the same parcel within a time window.
Query parameters
windowMonths— Lookback months (max 60)coOccurrenceDays— ± days at same parcel (max 180)minFrequency— Min shared projects to surfacelimit— Max related contractors (max 100)
/api/v1/contractors/{license}/purchasing-profileInferred material-spend profile
Estimated annualized material spend per category from permit valuations + work-class mix.
/api/v1/parcelsSearch property parcels
Maricopa County property records (~1.75M): owner, assessed value, type, year built, land use. Maricopa-only.
Query parameters
zip— Property ZIPpropertyType— Exact (e.g. 'SINGLE FAMILY', 'COMMERCIAL', 'VACANT')yearBuiltMin— Built on/afteryearBuiltMax— Built on/beforeassessedMin— Minimum assessed valueassessedMax— Maximum assessed valuelandUse— Land-use description containslimit— Page size (max 200)offset— Result offset
/api/v1/parcels/{apn}Get a property
Single parcel by APN (any format), with the most recent permits at that property.
/api/v1/leads/hotTop-ranked lead feed
Permits ranked by lead score, defaulted to fresh (hot/warm) — a ready-to-work outreach queue.
Query parameters
zip— Single ZIPjurisdiction— phoenix | mesa | scottsdale | tempe | gilbert | peoriaworkClass— Case-insensitive containsfreshness— Comma-separated subset of hot,warm,cold,dead (default 'hot,warm')minScore— Minimum lead score 0..1valuationMin— Minimum total valuationlimit— Page size (max 200)
/api/v1/projectsList project clusters
Multi-permit projects (one parcel + address, 2-25 chained permits over 365d).
Query parameters
zip— Single ZIPactiveOnly— 'true' (default) = a permit in the last 90dminValuation— Minimum total project valuationlimit— Page size (max 200)
/api/v1/relationships/gapsGCs missing a recurring sub
General contractors with no recurring subcontractor in a target trade (a pitch list).
Query parameters
zip— Filter by the GC's modal ZIPworkClass— Target trade (contains)gapWorkClass— Trade to evaluate the gap in (defaults to workClass)minPermits12mo— Min GC permits in 365dmaxRegularSubs— A gap = no sub appears on more than this many permitslimit— Page size (max 200)
/api/v1/exports/direct-mailDirect-mail CSV export
Owner-mailing-formatted CSV (one row per property/owner). Returns text/csv.
Query parameters
zips— Comma-separated ZIPsworkClasses— Comma-separated work classesvaluationMin— Min valuationvaluationMax— Max valuationsinceDays— Trailing window in days (max 365)freshness— Comma-separated freshness (default 'hot,warm')limit— Max rows (max 1000)
Need higher limits, bulk delivery, or redistribution rights? See Enterprise & data licensing →
API use is subject to our Terms of Service — note in particular the redistribution restrictions (Section 7). Bulk delivery and redistribution rights require an Enterprise data license.