Plumb Intelligence

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.

Get an API keyOpenAPI spec (JSON)

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

Endpoints

GET/api/v1/permits

List permits

Filtered, paginated permit feed (~928K rows, daily-refreshed).

Query parameters
  • zipSingle ZIP code
  • jurisdictionphoenix | mesa | scottsdale | tempe | gilbert | peoria
  • workClassCase-insensitive contains match on work class
  • lifecycleapplied | issued | in_progress | finaled | void | unknown
  • freshnesshot | warm | cold | dead
  • valuationMinMinimum total valuation
  • valuationMaxMaximum total valuation
  • issuedSinceIssued on/after (YYYY-MM-DD)
  • issuedBeforeIssued on/before (YYYY-MM-DD)
  • limitPage size (max 200)
  • offsetResult offset
GET/api/v1/permits/{id}

Get a permit

Single permit by id, enriched with the parcel owner / property block.

GET/api/v1/contractors

Search contractors

AZ ROC roster (~64.6K) with the disciplinary / unlicensed-violator overlay.

Query parameters
  • qBusiness-name contains (case-insensitive)
  • classificationExact ROC class code (e.g. 'B-01', 'CR-39')
  • statusExact status (e.g. 'Active')
  • zipBusiness ZIP
  • cityBusiness city (exact)
  • hasDisciplinary'true' for only contractors with active disciplinary
  • limitPage size (max 200)
  • offsetResult offset
GET/api/v1/contractors/{license}

Get a contractor

Single contractor by ROC license, with the nightly activity rollup.

GET/api/v1/contractors/{license}/relationships

Contractor relationship graph

Contractors who co-occur with this one at the same parcel within a time window.

Query parameters
  • windowMonthsLookback months (max 60)
  • coOccurrenceDays± days at same parcel (max 180)
  • minFrequencyMin shared projects to surface
  • limitMax related contractors (max 100)
GET/api/v1/contractors/{license}/purchasing-profile

Inferred material-spend profile

Estimated annualized material spend per category from permit valuations + work-class mix.

GET/api/v1/parcels

Search property parcels

Maricopa County property records (~1.75M): owner, assessed value, type, year built, land use. Maricopa-only.

Query parameters
  • zipProperty ZIP
  • propertyTypeExact (e.g. 'SINGLE FAMILY', 'COMMERCIAL', 'VACANT')
  • yearBuiltMinBuilt on/after
  • yearBuiltMaxBuilt on/before
  • assessedMinMinimum assessed value
  • assessedMaxMaximum assessed value
  • landUseLand-use description contains
  • limitPage size (max 200)
  • offsetResult offset
GET/api/v1/parcels/{apn}

Get a property

Single parcel by APN (any format), with the most recent permits at that property.

GET/api/v1/leads/hot

Top-ranked lead feed

Permits ranked by lead score, defaulted to fresh (hot/warm) — a ready-to-work outreach queue.

Query parameters
  • zipSingle ZIP
  • jurisdictionphoenix | mesa | scottsdale | tempe | gilbert | peoria
  • workClassCase-insensitive contains
  • freshnessComma-separated subset of hot,warm,cold,dead (default 'hot,warm')
  • minScoreMinimum lead score 0..1
  • valuationMinMinimum total valuation
  • limitPage size (max 200)
GET/api/v1/projects

List project clusters

Multi-permit projects (one parcel + address, 2-25 chained permits over 365d).

Query parameters
  • zipSingle ZIP
  • activeOnly'true' (default) = a permit in the last 90d
  • minValuationMinimum total project valuation
  • limitPage size (max 200)
GET/api/v1/relationships/gaps

GCs missing a recurring sub

General contractors with no recurring subcontractor in a target trade (a pitch list).

Query parameters
  • zipFilter by the GC's modal ZIP
  • workClassTarget trade (contains)
  • gapWorkClassTrade to evaluate the gap in (defaults to workClass)
  • minPermits12moMin GC permits in 365d
  • maxRegularSubsA gap = no sub appears on more than this many permits
  • limitPage size (max 200)
GET/api/v1/exports/direct-mail

Direct-mail CSV export

Owner-mailing-formatted CSV (one row per property/owner). Returns text/csv.

Query parameters
  • zipsComma-separated ZIPs
  • workClassesComma-separated work classes
  • valuationMinMin valuation
  • valuationMaxMax valuation
  • sinceDaysTrailing window in days (max 365)
  • freshnessComma-separated freshness (default 'hot,warm')
  • limitMax 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.

API & Developers — PlumbIntel | Plumb Intelligence