Arizona ROC Contractor License Scraper
Pricing
from $2.50 / 1,000 results
Arizona ROC Contractor License Scraper
Arizona ROC contractor license scraper & API: search the Arizona Registrar of Contractors and export license number, status, classification, business name, owner, phone, address, bond and issue/expiry dates. Contractor verification, compliance and B2B lead generation — fast, no login.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
80
Total users
19
Monthly active users
an hour ago
Last modified
Categories
Security
Limited permissionsShare
Arizona ROC Contractor License Scraper — AZ Registrar of Contractors Lookup, Bond, Complaint & Classification Data
Extract verified Arizona Registrar of Contractors (AZ ROC) license records at scale. This AZ ROC scraper lets you scrape Arizona ROC contractor license records — by license number, business name, qualifying party, Arizona city, or trade classification — and returns clean, structured B2B intelligence with license status, classification codes, qualifying party, personnel roles, surety bond details, and complaint history. No login, no coding, no browser required.
Export every result to JSON, CSV, Excel, XML, or API for CRM enrichment, lead generation, underwriting, and vendor compliance.
Built for construction lead-generation teams, surety & insurance underwriters, mortgage/title/due-diligence analysts, compliance and risk teams, PropTech vendor platforms, and public-records researchers who need verified Arizona contractor data on demand.
⚡ At a glance
| Feature | Details |
|---|---|
| Target Portal | Arizona Registrar of Contractors (azroc.my.site.com) — statewide public contractor registry |
| Search Modes | 5 combinable modes: Cities (25 built-in AZ metros), Business Names, Qualifying Party, License Numbers, or Auto-Sample |
| Filters | License Status (ACTIVE, SUSPENDED, EXPIRED, REVOKED, CANCELLED), Type (RESIDENTIAL, COMMERCIAL, DUAL), Trade Classification (B-1, C-37, R-11, CR-39, + custom code) |
| Core Data Extracted | License ID & Number, Business Name, DBA, Qualifying Party, Personnel + Roles, Classification Code & Description, Status, City/State/ZIP, Phone, Profile URL |
| Optional Enrichments | Full Detail Page (Entity Type, Issued/Renewal Dates, Surety Bond Type/Number/Amount/Company/Status) + 2-Year Complaint History (Open, Disciplined, Resolved counts & records) |
| Pagination & Scale | Full deep extraction across cities & queries (1,000+ contractor licenses per run), automatic licenseId deduplication |
| Speed & Cost | High-speed structured extraction on standard Apify Datacenter Proxy — ~150–500 records in 10–35 seconds |
| Output Formats | JSON, CSV, Excel (XLSX), JSONL, XML, HTML Table, RSS, REST API & Webhooks |
📋 Table of contents
- Why scrape AZ ROC?
- What this AZ ROC scraper does
- High-value B2B use cases
- Input configuration
- Output data & field reference
- Pagination & 1,000+ record scaling
- How to use (Console & API)
- Pro tips for contractor lead generation
- Frequently asked questions
- Related state license scrapers
- Changelog
🔎 Why scrape AZ ROC?
The Arizona Registrar of Contractors (AZ ROC) is the state agency that licenses and regulates every residential, commercial, and dual contractor operating in Arizona — from Phoenix, Tucson, and Mesa to Scottsdale, Chandler, Gilbert, Glendale, Tempe, Flagstaff, and Yuma. Its public contractor search portal is the authoritative source of truth for who is licensed to build, remodel, or perform specialty trade work in Arizona, under which trade classifications, with what surety bond, and with what disciplinary or complaint record.
For B2B sales, compliance, and risk teams, this registry contains high-intent commercial intelligence:
- Verified decision-makers: Every record identifies the legally responsible Qualifying Party and registered company officers/members (
personnel), giving outreach teams real executive names instead of generic inbox guesses. - Direct business phone numbers: Over 96% of Arizona contractor records include a direct business phone number alongside city, state, and ZIP code.
- Precise trade segmentation: Filter or segment by exact Arizona ROC license classifications — general residential (
B), general commercial (B-1,B-2), electrical (C-11,R-11,CR-11), plumbing (C-37,R-37,CR-37), HVAC (C-39,R-39,CR-39), roofing (C-42,R-42,CR-42), swimming pools, concrete, solar, painting, and landscaping. - Active bond & underwriting signals: Know immediately whether a contractor's license and surety bond are
Active, who underwrites the bond (bondCompany), the dollar coverage (bondAmount), and when the license renews (renewedThroughDate).
Collecting this data manually from the state portal requires slow, repetitive searches with no bulk CSV download and no public API. This Arizona ROC scraper turns the entire registry into a clean, automated data pipeline that exports directly to JSON, CSV, Excel, or API.
✨ What this AZ ROC scraper does
- ✅ Five search modes, combinable in one run — search by license number, company / business name, qualifying party name, Arizona city (pick from a built-in dropdown of 25 metros), or leave everything blank for an automatic multi-city contractor sample.
- ✅ Trade classification filtering — narrow any search to a specific trade code (
B-1,C-37,R-11,CR-39, etc.) from the 30-item dropdown, or enter any custom AZ ROC code (C-45,R-40,KA-Dual, etc.) inlicenseClassificationCustom. - ✅ License status & type filters — keep only
ACTIVEcontractors for sales prospecting, or filter forSUSPENDED,EXPIRED,REVOKED, orCANCELLEDrecords for compliance monitoring and renewal outreach; segment byRESIDENTIAL,COMMERCIAL, orDUAL. - ✅ Rich list data out of the box — every record carries license ID, license number, business name, DBA name, qualifying party, personnel with roles, primary classification code + description, license status, city / state / ZIP, phone number, and a direct
profileUrl— with zero extra detail requests required. - ✅ Optional full detail enrichment (
scrapeDetailPage) — adds legal entity type (LLC, Corporation, Sole Proprietorship), issued date, renewed-through date, status-changed date, QP exemption flag, full surety bond information (bond type, number, dollar amount, surety company, effective date, status), and complete personnel with official titles. - ✅ Optional complaint history (
scrapeComplaints) — adds open, disciplined, and resolved case counts, total complaint count, and the structured per-complaint list covering the two-year public window. - ✅ Automatic cross-search deduplication — records are keyed by unique AZ ROC
licenseId, so a contractor matched across multiple cities or search terms is never duplicated (0% duplicate rate across multi-city runs). - ✅ Fast, lightweight execution — runs on standard Apify Datacenter proxies without browser overhead, keeping compute costs minimal even on 1,000+ record extractions.
🎯 High-value B2B use cases
1. Construction B2B sales & trade lead generation
Building material distributors, HVAC/plumbing/electrical supply houses, fleet & equipment leasing companies, commercial insurers, and construction SaaS vendors use this AZ ROC data extractor to build segmented lead lists by Arizona metro and trade classification — complete with business name, qualifying party name, personnel roles, city, ZIP, and phone number.
2. Surety bond & contractor insurance underwriting
Insurance brokers, MGAs, and surety underwriters enrich applications and monitor existing books by pulling bondCompany, bondAmount, bondNumber, bondEffectiveDate, bondStatus, renewedThroughDate, and disciplinary case counts (openCases, disciplinedCases, resolvedCases).
3. General contractor & vendor compliance verification
General contractors, commercial property managers, REITs, and municipal procurement teams batch-verify subcontractor license numbers (licenseNumbers) prior to bid award or progress payment release, archiving a timestamped scrapedAt compliance trail.
4. Home-services marketplace & directory population
PropTech platforms, homeowner referral networks, solar financing platforms, and local contractor directories seed and refresh verified Arizona trade profiles with official classification descriptions and active license standing.
5. Mortgage, title & real-estate due diligence
Lenders, title companies, and real-estate investors validate contractors tied to draw inspections, renovation escrows, and repair addenda across Phoenix, Tucson, and Scottsdale.
6. Market intelligence & competitive benchmarking
Private equity roll-ups, trade associations, and market researchers analyze active licensee counts by trade classification, entity structure (entityType), and geographic concentration across Arizona's 25 largest municipalities.
📥 Input configuration
Every input field is optional — leave the form blank or click Start with the prefill to extract a fast, multi-city contractor dataset in seconds. Combine as many search modes and filters as you like in a single run.
| Field | Type | Default / Prefill | Description |
|---|---|---|---|
cities | array (select) | ["Phoenix", "Tucson", "Scottsdale"] | Pick one or more Arizona cities from the 25-metro dropdown (Phoenix, Tucson, Mesa, Chandler, Scottsdale, Glendale, Gilbert, Tempe, Peoria, Surprise, Goodyear, Flagstaff, Yuma, Avondale, Buckeye, Prescott, etc.). |
companyNames | array (string) | [] | Business names to search — partial matches work (e.g. "Acme Plumbing", "Sun Valley Solar"). Each name runs its own search. |
qualifyingPartyNames | array (string) | [] | Full or partial name of a qualifying party (e.g. "John Smith"). |
licenseNumbers | array (string) | [] | Exact ROC license numbers for direct lookup (e.g. "333318", "ROC 298411"). Leading zeros and ROC prefixes are normalized automatically. |
licenseType | string (select) | "ALL" | Filter by license scope: ALL, RESIDENTIAL, COMMERCIAL, or DUAL. |
licenseStatus | string (select) | "ALL" | Filter by license standing: ALL, ACTIVE, SUSPENDED, EXPIRED, REVOKED, or CANCELLED. Set to ACTIVE for sales prospecting. |
licenseClassification | string (select) | "" (All) | Filter by trade classification code (B, B-1, B-2, A, C-11, R-11, CR-11, C-37, R-37, CR-37, C-39, R-39, CR-39, C-42, R-42, CR-42, etc.). |
licenseClassificationCustom | string | "" | Enter any AZ ROC classification code not in the dropdown (e.g. "C-45", "R-40"). Overrides the dropdown when filled. |
scrapeDetailPage | boolean | false | Fetch each contractor's full detail record for bond details, entity type, issue/renewal dates, and full personnel titles. false by default for maximum speed. |
scrapeComplaints | boolean | false | Fetch 2-year complaint history (requires scrapeDetailPage: true). false by default. |
maxResultsPerSearch | integer | 0 (prefill 50) | Maximum contractor records to return per individual search term. Set to 0 for unlimited (1,000+ records supported). |
resultsPerPage | string (select) | "50" | Page-size setting ("10", "20", "50"). |
maxConcurrency | integer | 5 | Parallel detail lookups when scrapeDetailPage is enabled (1–10). |
proxyConfiguration | object | { "useApifyProxy": true } | Apify Proxy configuration. Standard datacenter proxies work out of the box. |
Example input — targeted active trade lead list
{"cities": ["Phoenix", "Scottsdale", "Mesa", "Chandler", "Gilbert"],"licenseClassification": "CR-39","licenseStatus": "ACTIVE","scrapeDetailPage": false,"maxResultsPerSearch": 250,"proxyConfiguration": { "useApifyProxy": true }}
Example input — full underwriting & bond verification
{"licenseNumbers": ["333318", "333761"],"scrapeDetailPage": true,"scrapeComplaints": true,"maxConcurrency": 5,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output data & field reference
Each dataset item represents one Arizona contractor license in a clean, flat JSON structure ready for spreadsheets, SQL warehouses, or CRM ingestion.
Example output — fast list mode (scrapeDetailPage: false)
{"licenseId": "a0o8y0000004CYXAA2","licenseNumber": "333318","businessName": "Mike Robbins Plumbing LLC","dbaName": "Phoenix Residential & Commercial Plumbing","qualifyingParty": "Tyler Michael Robbins","personnel": [{ "name": "Tyler Michael Robbins", "role": "Member" },{ "name": "Tyler Michael Robbins", "role": "Qualifying Party" },{ "name": "Michael A Robbins", "role": "Manager;Member" }],"primaryClassification": "CR-37","classificationDesc": "Plumbing","licenseStatus": "Active","city": "Apache Junction","state": "AZ","zip": "85120","phone": "4805294852","profileUrl": "https://azroc.my.site.com/AZRoc/s/contractor-search?licenseId=a0o8y0000004CYXAA2","scrapedAt": "2026-11-01T23:29:36.035Z"}
Example output — full detail + complaints mode (scrapeDetailPage: true, scrapeComplaints: true)
{"licenseId": "a0o8y0000004EDvAAM","licenseNumber": "333761","businessName": "Breden Rise Enterprises LLC","dbaName": null,"qualifyingParty": "Jon Tranter","personnel": [{ "name": "Jon Tranter", "position": "Qualifying Party" }],"primaryClassification": "R-62","classificationDesc": "Specialty Residential R-62 Minor Home Improvements","licenseStatus": "Active","entityType": "LLC","issuedDate": "2021-06-18","renewedThroughDate": "2027-06-30","statusChangedDate": "2021-06-18","isQpExempt": false,"city": "Scottsdale","state": "AZ","zip": "85260","phone": "6027674418","bondType": "License Bond","bondNumber": "WS-99999123","bondAmount": "$ 9000","bondCompany": "Western Surety Company","bondEffectiveDate": "2023-06-15","bondStatus": "Active","openCases": 0,"disciplinedCases": 0,"resolvedCases": 0,"complaintCount": null,"complaints": null,"profileUrl": "https://azroc.my.site.com/AZRoc/s/contractor-search?licenseId=a0o8y0000004EDvAAM","scrapedAt": "2026-11-01T23:29:36.035Z"}
Field reference & coverage
🪪 Core Identity & Classification Fields (Always Extracted)
| Field | Type | Coverage | Description |
|---|---|---|---|
licenseId | string | 🟢 High (~100%) | Unique AZ ROC internal record identifier (used for deduplication and profile links). |
licenseNumber | string | 🟢 High (~100%) | Official 6-digit ROC license number (normalized without ROC prefix). |
businessName | string | 🟢 High (~100%) | Registered legal business or company name. |
dbaName | string|null | 🟡 Conditional (~44%) | "Doing Business As" trade name, populated whenever the licensee registered a DBA. |
primaryClassification | string | 🟢 High (~100%) | Primary trade classification code (e.g. B-1, C-37, R-11, CR-39). |
classificationDesc | string | 🟢 High (~100%) | Plain-English trade description (e.g. Plumbing, General Commercial Contractor). |
licenseStatus | string | 🟢 High (~100%) | Official standing (Active, Suspended, Expired, Revoked, Voluntary Cancellation). |
profileUrl | string | 🟢 High (~100%) | Direct deep link to the contractor's official AZ ROC record. |
scrapedAt | string | 🟢 High (100%) | ISO-8601 timestamp of extraction. |
📞 People, Contact & Location Fields (Always Extracted)
| Field | Type | Coverage | Description |
|---|---|---|---|
qualifyingParty | string|null | 🟢 High (~95%) | Individual legally responsible for the trade qualification on the license. |
personnel | array | 🟢 High (~100%) | Array of officers/members/qualifying parties ({ name, role } in list mode; { name, position } in detail mode). |
phone | string|null | 🟢 High (~96%) | Business phone number listed on the ROC record. |
city | string | 🟢 High (~100%) | Business city from the address of record. |
state | string | 🟢 High (~100%) | Business state (AZ for local firms, or head-office state for out-of-state licensees). |
zip | string | 🟢 High (~100%) | Business postal ZIP code. |
🛡️ Surety Bond, Entity & Complaint Fields (Detail Mode: scrapeDetailPage: true)
| Field | Type | Coverage | Description |
|---|---|---|---|
entityType | string|null | 🟢 High (~99% in detail) | Legal entity structure (LLC, Corporation, Sole Proprietor, Partnership). |
issuedDate | string|null | 🟢 High (~99% in detail) | Date the license was originally issued (YYYY-MM-DD). |
renewedThroughDate | string|null | 🟢 High (~99% in detail) | Date the license is currently renewed and valid through (YYYY-MM-DD). |
statusChangedDate | string|null | 🟢 High (~99% in detail) | Date the current license status took effect. |
isQpExempt | boolean|null | 🟢 High (~99% in detail) | Whether the license is exempt from having a Qualifying Party. |
bondType | string|null | 🟢 High (~98% in detail) | Surety bond category (e.g. License Bond, Cash Bond). |
bondNumber | string|null | 🟢 High (~98% in detail) | Policy or certificate number of the bond. |
bondAmount | string|null | 🟢 High (~98% in detail) | Dollar coverage of the bond (e.g. $ 9000, $ 25000). |
bondCompany | string|null | 🟢 High (~98% in detail) | Surety underwriter name (e.g. Western Surety Company). |
bondEffectiveDate | string|null | 🟢 High (~98% in detail) | Effective start date of the surety bond. |
bondStatus | string|null | 🟢 High (~98% in detail) | Standing of the bond (Active, Inactive, Cancelled). |
openCases | integer | 🟡 Conditional (scrapeComplaints) | Count of currently open ROC complaint cases. |
disciplinedCases | integer | 🟡 Conditional (scrapeComplaints) | Count of disciplined complaint cases. |
resolvedCases | integer | 🟡 Conditional (scrapeComplaints) | Count of resolved complaint cases in the 2-year window. |
complaintCount | integer|null | 🟡 Conditional (scrapeComplaints) | Total complaints on file (or null when 0). |
complaints | array|null | 🟡 Conditional (scrapeComplaints) | Detailed complaint objects when present on the record. |
🔁 Pagination & 1,000+ record scaling
This Arizona ROC contractor scraper supports full deep extraction from small quick samples up to 1,000+ contractor licenses in a single run:
- Unlimited per-search retrieval (
maxResultsPerSearch: 0): Every city or company search retrieves the complete result set returned by the registry, flattens multi-license accounts into individual license rows, applies your status/type/classification filters, and deduplicates bylicenseId. - Multi-city scaling to 1,000+ records: Each major Arizona city (
Phoenix,Tucson,Mesa,Scottsdale,Chandler,Gilbert,Glendale,Tempe, etc.) yields hundreds of active contractor licenses. Selecting multiple cities (or settingmaxResultsPerSearch: 0/1000+) scales effortlessly across all 25 built-in Arizona metros to collect thousands of unique records. - Zero duplicates across overlapping searches: All records are deduplicated in memory by
licenseIdacross every city, company name, qualifying party, and license number in your run.
⚙️ How to use
Option 1: Apify Console (No Coding)
- Open the Arizona ROC Contractor License Scraper on the Apify Console and click Try for free.
- Select one or more Cities from the dropdown, or enter Company Names, Qualifying Party Names, or License Numbers.
- Optionally filter by License Status (
ACTIVE), License Type, or Trade / Classification. - Set Max Results per Search (
50for a quick run, or0for unlimited 1,000+ extraction). - Click Start and export your dataset in JSON, CSV, or Excel.
Option 2: Call via Python API
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/az-roc-contractor-license-scraper").call(run_input={"cities": ["Phoenix", "Scottsdale", "Mesa", "Tucson", "Chandler"],"licenseClassification": "C-37","licenseStatus": "ACTIVE","scrapeDetailPage": False,"maxResultsPerSearch": 0,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["licenseNumber"], item["businessName"], item["phone"], item["city"])
Option 3: Call via Node.js / JavaScript SDK
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('haketa/az-roc-contractor-license-scraper').call({cities: ['Phoenix', 'Tucson', 'Scottsdale', 'Gilbert', 'Glendale'],licenseStatus: 'ACTIVE',scrapeDetailPage: true,scrapeComplaints: true,maxResultsPerSearch: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Extracted ${items.length} Arizona ROC contractor records.`);
Option 4: Call via cURL (REST API)
curl -X POST "https://api.apify.com/v2/acts/haketa~az-roc-contractor-license-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"cities": ["Phoenix", "Mesa", "Chandler"],"licenseClassification": "B-1","licenseStatus": "ACTIVE","maxResultsPerSearch": 100}'
🏛️ Arizona ROC Trade Classification Reference
Not sure which classification code to select? Here are the most frequently scraped Arizona Registrar of Contractors trade codes:
| Code | Scope | Trade / Description |
|---|---|---|
B | Residential | General Residential Contractor |
B-1 | Commercial | General Commercial Contractor (Unlimited) |
B-2 | Commercial | General Commercial Contractor (Limited) |
A | Engineering | General Engineering Contractor |
C-11 / R-11 / CR-11 | Comm / Res / Dual | Electrical Contracting |
C-37 / R-37 / CR-37 | Comm / Res / Dual | Plumbing Contracting |
C-39 / R-39 / CR-39 | Comm / Res / Dual | Air Conditioning & Refrigeration (HVAC) |
C-42 / R-42 / CR-42 | Comm / Res / Dual | Roofing Contracting |
C-9 / CR-9 | Comm / Dual | Concrete Contracting |
C-34 / CR-34 | Comm / Dual | Painting & Wall Coverings |
C-6 / CR-6 | Comm / Dual | Swimming Pool Service & Construction |
C-16 / CR-16 | Comm / Dual | Fire Protection Systems |
C-21 / CR-21 | Comm / Dual | Landscaping & Irrigation Systems |
💡 Pro tips for contractor lead generation
- Keep
scrapeDetailPage: falsefor fast outbound lists: List mode already gives youlicenseNumber,businessName,dbaName,qualifyingParty,personnel,primaryClassification,licenseStatus,city,state,zip, andphone— finishing in seconds at a fraction of the compute cost. - Combine
licenseStatus: "ACTIVE"with specific trades: Filtering toACTIVE+CR-39(HVAC) orCR-11(Electrical) across the Phoenix Valley (Phoenix,Mesa,Chandler,Scottsdale,Gilbert,Glendale,Tempe,Peoria) produces a high-converting regional B2B call list in one run. - Target
EXPIREDorSUSPENDEDlicenses for compliance & surety services: Bond brokers, compliance consultants, and legal/accounting firms can filter specifically for non-active statuses to reach contractors who need immediate reinstatement or bond renewal. - Standardize phone numbers downstream: Because phone numbers are preserved exactly as filed with AZ ROC (
4805294852or(480) 529-4852), strip non-digits (\D) when importing into dialers or HubSpot/Salesforce.
❓ FAQ
Do I need an AZ ROC login or residential proxies? No. The portal is public and the actor runs reliably on standard Apify Datacenter proxies with no login or credentials required.
How many contractor records can I extract in one run?
You can extract 1,000+ unique contractor licenses in a single run by selecting multiple Arizona cities or setting maxResultsPerSearch: 0 (unlimited).
Can I filter by any Arizona ROC classification code?
Yes. Pick any of the 30 most common codes from the licenseClassification dropdown, or type any specialty classification code into licenseClassificationCustom.
When should I enable scrapeDetailPage and scrapeComplaints?
Enable scrapeDetailPage when you need entityType, issuedDate, renewedThroughDate, or surety bond fields (bondCompany, bondAmount, bondNumber, bondStatus). Enable scrapeComplaints in addition when you need 2-year disciplinary and complaint counts.
How fresh is the extracted contractor data? Every run queries the live Arizona Registrar of Contractors database in real time — never a stale static dump.
🔗 Related scrapers
Building a multi-state contractor or professional licensing pipeline? Pair this actor with other state license scrapers by haketa:
- North Carolina General Contractors License Scraper — NC Licensing Board for General Contractors.
- Washington L&I Contractor License Scraper — WA contractor licenses, bonds, and insurance.
- California DCA Professional License Scraper — California Department of Consumer Affairs boards & bureaus.
- Virginia DPOR License Scraper — Virginia contractors and regulated occupations.
- Colorado Professional License Scraper — Colorado DORA professional licenses.
- Minnesota DLI License Scraper — Minnesota Department of Labor & Industry contractor licenses.
📋 Changelog
- v1.3 (2026-11) — Unlocked 1,000+ record scaling across default and multi-city runs (removed 100-record default budget clamp when
maxResultsPerSearchormaxItems> 100, expanded automatic multi-city fallback to all 25 AZ metros for high-volume runs), optimized prefill for fast<30sexecution, right-sized default memory footprint (512 MB), and expanded documentation with field coverage benchmarks. - v1.2 (2026-07) — Pure-HTTP architecture upgrade with automatic session context refresh, concurrent detail-page & bond enrichment worker pool, and client-side trade classification filtering.
- v1.0 (2026-04) — Initial release with multi-mode AZ ROC search (cities, business names, qualifying parties, license numbers), surety bond extraction, and complaint history support.