Arizona ROC Contractor License Scraper avatar

Arizona ROC Contractor License Scraper

Pricing

from $3.00 / 1,000 license records

Go to Apify Store
Arizona ROC Contractor License Scraper

Arizona ROC Contractor License Scraper

Scrape Arizona Registrar of Contractors (AZ ROC) public license records. Search by license number, business name, qualifying party, or city. Returns license status, classifications, bonds, complaints, personnel, address, phone — fast, no login.

Pricing

from $3.00 / 1,000 license records

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Scrape the Arizona Registrar of Contractors (AZ ROC) public license database for full contractor license records. Search by license number, business name, qualifying party, or city — get status, classifications, bonds, complaints, personnel, and full contact details in structured JSON. Full pagination is supported across every results page. No login required.

Use cases

  • Contractor verification — confirm a contractor is licensed and in good standing before hiring or paying a deposit
  • Compliance monitoring — detect newly expired, suspended, or revoked licenses for vendor lists on recurring schedules
  • Lead generation — build targeted lists of licensed Arizona contractors by city, classification, or active status
  • Subcontractor sourcing — find qualified subcontractors by specialty classification (B-1, C-37, R-11, CR-39) and region
  • Insurance underwriting — score contractors using complaint history, bond status, and surety coverage
  • Due diligence — check complaint and disciplinary records before signing contracts
  • Market research — analyze contractor density by city/classification, track new-license issuance trends
  • Consumer protection — surface complaint counts and outcomes for homeowner pre-payment checks

Input

The actor supports four search modes. Use any one or combine multiple in a single run:

FieldTypeRequiredDefaultDescription
licenseNumbersarrayno[]Direct license-number lookup (fastest). Example: ["333282", "123456"]
companyNamesarrayno[]Business names (partial match supported). Example: ["Desert HVAC", "Acme Plumbing"]
qualifyingPartyNamesarrayno[]Qualifying party names. Example: ["John Smith"]
citiesarrayno[]Arizona cities for region-based search. Example: ["Phoenix", "Tucson", "Scottsdale"]
licenseTypeselectno"ALL"ALL, RESIDENTIAL, COMMERCIAL, DUAL
licenseStatusselectno"ALL"ALL, ACTIVE, SUSPENDED, EXPIRED, REVOKED, CANCELLED
licenseClassificationstringno""Filter by AZ ROC classification code (e.g. "B-1", "C-37", "R-11", "CR-39")
scrapeDetailPagebooleannofalseOpen each detail page for bond, complaint, and personnel data (slower)
scrapeComplaintsbooleannofalseInclude per-complaint records (requires scrapeDetailPage)
maxResultsintegerno100Hard cap on records returned across all search jobs. 0 = unlimited
resultsPerPageselectno"50"10, 20, or 50 (50 minimises pagination)
maxConcurrencyintegerno3Parallel browser tabs. Keep ≤ 5 for residential proxies
customProxyUrlstringno""Premium residential proxy URL for maximum reliability
proxyConfigurationobjectnoresidentialApify proxy settings

At least one search mode is required.

Example inputs

License number lookup:

{
"licenseNumbers": ["333282", "123456"],
"maxResults": 2
}

Business name search:

{
"companyNames": ["Desert HVAC"],
"licenseStatus": "ACTIVE",
"maxResults": 50
}

City lead generation with classification filter:

{
"cities": ["Phoenix", "Tucson"],
"licenseClassification": "C-37",
"licenseStatus": "ACTIVE",
"maxResults": 200
}

Full enrichment with bonds and complaints:

{
"companyNames": ["Desert HVAC"],
"scrapeDetailPage": true,
"scrapeComplaints": true,
"maxResults": 25
}

Output

Each record contains the full public record for one contractor license. When scrapeDetailPage is false (default), the fast list view populates license number, business name, qualifying party, classification, status, city, and phone. When true, bond details, complaint history, all classifications, and personnel are also collected.

FieldTypeDescription
license_numberstringAZ ROC license number
business_namestringLegal business name
dba_namestring|nullDoing-business-as name
qualifying_partystring|nullIndividual responsible for the license
license_statusstringActive, Suspended, Expired, Revoked, or Cancelled
license_typestring|nullResidential, Commercial, or Dual (inferred from classification)
entity_typestring|nullCORPORATION, LLC, SOLE OWNER, etc. (detail only)
primary_classificationstringPrimary classification code
classification_descriptionstring|nullPrimary classification description (detail only)
classificationsarrayAll classifications [{code, description}] (detail only)
citystring|nullBusiness address city
statestring|nullBusiness address state
zipstring|nullBusiness address ZIP (detail only)
business_phonestring|nullBusiness phone, normalized (XXX) XXX-XXXX
issued_datestring|nullOriginal license issue date (ISO 8601, detail only)
renewed_through_datestring|nullLicense valid-through date (ISO 8601, detail only)
bond_companystring|nullSurety company (detail only)
bond_numberstring|nullBond identifier (detail only)
bond_typestring|nullBond type (detail only)
bond_amountstring|nullBond coverage amount (detail only)
bond_statusstring|nullBond status (detail only)
bond_effective_datestring|nullBond effective date (ISO 8601, detail only)
bond_expiration_datestring|nullBond expiration date (ISO 8601, detail only)
complaint_countnumberTotal complaints shown (prior two years, detail only)
open_casesnumber|nullOpen complaint cases (detail only)
resolved_casesnumber|nullResolved complaint cases (detail only)
disciplined_casesnumber|nullDisciplined complaint cases (detail only)
complaintsarray|nullPer-complaint records [{date, type, status, summary}] (when scrapeComplaints enabled)
personnelarrayPersonnel [{name, position}] (detail only)
profile_urlstringDirect AZ ROC profile link
scraped_atstringISO 8601 timestamp
source_urlstringSource page URL

Pricing

EventPrice
Actor Start$0.00005
License Record$0.003 per record

~$3.00 per 1,000 records. You only pay for records successfully scraped. Start with a small maxResults to test before scaling. Both PAY_PER_EVENT and usage-based (compute + proxy passthrough) monetization are enabled.

Technical notes

  • Residential proxy recommended: The AZ ROC portal is a Salesforce Experience Cloud (LWC/Aura) site with bot protection that can challenge datacenter IP pools. The actor uses Apify residential proxy by default. For production bulk runs, provide a premium residential proxy via customProxyUrl (Decodo/Bright Data/IPRoyal) for maximum reliability.
  • Salesforce LWC rendering: The portal uses Lightning Web Components which render asynchronously. The actor waits for network idle plus a buffer, and uses multi-selector fallbacks on every field to survive LWC DOM changes between releases.
  • Pagination: Full Next-button pagination is supported. The actor stops after 3 consecutive scrolls with no new results or at a 5,000-record safety cap per search.
  • Detail-page enrichment: By default the actor uses the fast list view (one page load per search + per-record list extraction). Enable scrapeDetailPage to open each contractor's detail page for bond, complaint, and personnel data — roughly doubles runtime.
  • Classification codes: See the AZ ROC classification list for all specialty codes. License type is inferred from the classification prefix: B-* → Commercial, R-* → Residential, C-* → Commercial, CR-* → Dual.
  • Deduplication: Records are deduplicated by license number within a single run.

Integration

Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools. The output dataset is compatible with:

  • CSV/JSON/Excel export from Apify Console
  • Zapier and Make webhooks
  • Direct API access via Apify REST API
  • CRM import (HubSpot, Salesforce) with field mapping
  • AI agent tool calls via Apify MCP server — the actor exposes a single license-record event with structured JSON output suitable for LLM consumption