Arizona ROC Contractor License Scraper avatar

Arizona ROC Contractor License Scraper

Pricing

Pay per event

Go to Apify Store
Arizona ROC Contractor License Scraper

Arizona ROC Contractor License Scraper

🏗️ Search and export public Arizona ROC license records with status, classification, personnel, complaint counts, contact details, renewal dates, and surety bonds.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Export public Arizona Registrar of Contractors license records without copying pages by hand.

Search by ROC license number, business name, personnel name, city, classification, or an exact AZ ROC detail URL.

Each dataset row combines the current license, contact, classification, personnel, complaint, and surety-bond facts shown by the official source.

Use the results for contractor verification, compliance checks, procurement research, insurance workflows, and licensed-contractor lead lists.

What does Arizona ROC Contractor License Scraper do?

Arizona ROC Contractor License Scraper opens the public Arizona Registrar of Contractors search experience and turns rendered license records into structured JSON, CSV, Excel, XML, RSS, or HTML exports.

It can:

  • 🔢 look up one or many six-digit ROC license numbers;
  • 🏢 search a contractor business name;
  • 👤 search a qualifying party or other personnel name;
  • 🏙️ use the official advanced city filter;
  • 🛠️ use the official license-classification filter;
  • ✅ keep active licenses only;
  • 🔗 extract exact public detail URLs;
  • 📄 paginate broad result sets within your chosen limits;
  • 🧹 remove duplicate detail links across searches;
  • 🧾 save personnel, complaint, and bond details with provenance.

The Actor uses anonymous public pages. It does not ask for an AZ ROC login.

Who is it for?

Construction and home-services lead teams

Build city- or classification-specific lists of licensed contractors with phone numbers and current license status.

Insurance and surety teams

Review bond carrier, bond number, amount, paid amount, available amount, effective date, and source status.

Lenders and procurement teams

Verify a contractor's current public license facts before onboarding, lending, awarding work, or refreshing a vendor file.

Property managers and homeowners

Check the business entity, classification, renewal date, qualifying party, and public complaint counts before hiring.

Compliance and data teams

Schedule repeat runs and compare source-current timestamps or exported datasets in your own monitoring workflow.

Why use this Arizona contractor license scraper?

The official search is designed for interactive lookups, not repeatable exports.

This Actor gives you:

  • structured records instead of copied text;
  • repeatable searches with consistent field names;
  • bounded pagination and output limits;
  • one row per unique ROC license;
  • source URLs for review and evidence;
  • nested personnel and bond records;
  • automatic dataset exports and integrations;
  • API and schedule support through Apify.

It also blocks images and fonts and reuses one browser session to keep the public Salesforce Experience Cloud workflow conservative.

What Arizona ROC data can I extract?

FieldDescription
businessNameContractor business entity name
licenseNumberSix-digit Arizona ROC license number
city, state, zip, locationMailing-address location shown publicly
phonePublic contractor phone number
statusNormalized leading license status
statusActionComplete Status / Action wording
statusLastChangedOnDate displayed by the source when present
classificationCodeLicense class such as B-2
classificationDescriptionHuman-readable scope description
entityTypeCorporation, LLC, sole proprietor, or other source value
firstIssuedDateFirst-issued date
renewedThroughDateRenewed-through date
personnelNames, positions, and other positions
openComplaintCountPublic open-case count
disciplinedComplaintCountPublic disciplined-case count
resolvedSettledComplaintCountPublic resolved or settled count
bondsSurety bond records and balances
sourceCurrentAsOfFreshness timestamp displayed by AZ ROC
sourceUrlExact official contractor detail URL
searchQueryLookup route that discovered the record
scrapedAtUTC extraction timestamp

Optional fields are omitted when the source does not display them.

How to search Arizona ROC contractor licenses

  1. Open the Actor input page.
  2. Keep the prefilled ROC number for a fast first run, or replace it.
  3. Add business or personnel names under Company or person names.
  4. Optionally add a city or full classification label.
  5. Choose any, active, or inactive/other status.
  6. Set a small maxItems while testing.
  7. Run the Actor.
  8. Open the Dataset tab to inspect or export records.

You may combine lookup routes in one run. The Actor deduplicates licenses by their official detail URL.

Input options

ROC license numbers

Use licenseNumbers for exact six-digit lookups.

{
"licenseNumbers": ["306449", "256454"],
"maxItems": 2
}

Business or personnel names

Use first name then last name when searching for a person, matching the source instructions.

{
"searchQueries": ["Outlook Construction", "Stephen Ehrenreich"],
"maxItems": 20,
"maxPages": 3
}

City and classification

The city must use the source's exact mailing-address spelling.

The classification must use the complete option label shown by AZ ROC.

{
"city": "Flagstaff",
"classification": "B-2 General Small Commercial Contractor",
"status": "active",
"maxItems": 50,
"maxPages": 5
}

Exact detail URLs

Use public contractor-search URLs containing licenseId.

URLs outside the AZ ROC contractor detail scope fail closed.

Output example

{
"businessName": "Outlook Construction & Remodeling Inc",
"licenseNumber": "306449",
"city": "Flagstaff",
"state": "AZ",
"zip": "86005",
"location": "Flagstaff, AZ, 86005",
"phone": "(928) 707-1746",
"status": "Active",
"statusAction": "Active",
"classificationCode": "B-2",
"classificationDescription": "General Small Commercial Contractor",
"entityType": "Corporation",
"firstIssuedDate": "2016-07-15",
"renewedThroughDate": "2028-07-31",
"openComplaintCount": 0,
"disciplinedComplaintCount": 0,
"resolvedSettledComplaintCount": 0,
"personnel": [
{
"name": "Stephen Michael Ehrenreich",
"position": "Qualifying Party",
"otherPositions": ["OFFICER"]
}
],
"bonds": [
{
"type": "Surety",
"number": "100310299",
"company": "American Contractors Indemnity Company",
"amount": 5000,
"available": 5000,
"status": "Active"
}
],
"sourceUrl": "https://azroc.my.site.com/AZRoc/s/contractor-search?licenseId=...",
"scrapedAt": "2026-07-19T06:00:00.000Z"
}

The example is illustrative. Public records can change daily.

How much does it cost to scrape Arizona contractor licenses?

This Actor uses pay-per-event pricing:

  • a $0.005 Run started event for each run;
  • one Contractor extracted event for each dataset item saved;
  • $0.0036041 per contractor on the BRONZE tier, with canonical tier discounts from FREE through DIAMOND.

The exact tier price for your plan appears on the Actor pricing tab before you start a run.

You control spend with maxItems and maxPages.

Start with one license and one output item, then scale after checking the dataset.

Empty successful searches do not create contractor-record events.

Lead generation workflow

A practical lead workflow is:

  1. choose an Arizona city;
  2. choose a commercially relevant license classification;
  3. keep active licenses only;
  4. export business name, phone, personnel, status, and renewal date;
  5. deduplicate against your CRM;
  6. review source URLs before outreach;
  7. follow applicable marketing and privacy rules.

A license record shows registration facts, not buyer intent.

Do not describe every listed contractor as an interested lead.

Contractor verification workflow

For one-off verification:

  1. enter the six-digit ROC number;
  2. set maxItems to 1;
  3. run the Actor;
  4. compare status and renewal dates;
  5. inspect classification scope;
  6. review qualifying party and complaint counts;
  7. inspect the bond record;
  8. open sourceUrl if a decision requires manual review.

For legal or certified evidence, follow the source's public-record instructions rather than relying only on an automated export.

Monitoring and scheduled runs

Use Apify schedules to refresh contractor records daily, weekly, or monthly.

Common monitoring patterns include:

  • license status changes;
  • approaching renewed-through dates;
  • changed qualifying parties;
  • changed public complaint counts;
  • bond status or available-amount changes;
  • new license results for a company or city search.

Persist historical snapshots in your own dataset, database, or automation destination if you need change detection.

The Actor returns current observations; it does not invent historical records.

Integrations

Google Sheets

Send a scheduled dataset to a sheet for vendor review or lead qualification.

Slack or Microsoft Teams

Trigger a notification when your downstream comparison detects a changed status, complaint count, or bond record.

Zapier or Make

Start a CRM enrichment flow for newly discovered active contractor licenses.

Webhooks

Receive a run-finished callback and fetch dataset items automatically.

Cloud storage and databases

Export JSON or CSV to S3-compatible storage, BigQuery, PostgreSQL, or your data warehouse through Apify integrations or API code.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/arizona-roc-contractor-license-scraper').call({
licenseNumbers: ['306449'],
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Keep your API token in an environment variable.

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/arizona-roc-contractor-license-scraper').call(
run_input={
'city': 'Flagstaff',
'status': 'active',
'maxItems': 10,
'maxPages': 2,
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~arizona-roc-contractor-license-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"licenseNumbers":["306449"],"maxItems":1}'

Poll the returned run ID, then fetch its default dataset.

Avoid placing long-lived tokens in shared scripts or screenshots.

Use with Apify MCP

Claude Code setup

Connect the Actor to Claude Code through Apify MCP:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/arizona-roc-contractor-license-scraper"

Claude Desktop setup

Add this HTTP server to your Claude Desktop MCP configuration:

{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com?tools=automation-lab/arizona-roc-contractor-license-scraper"
}
}
}

Cursor setup

In Cursor, open Settings → MCP, add a remote HTTP server named apify, and use the same URL from the mcpServers JSON above.

VS Code setup

In VS Code with MCP support, add an HTTP MCP server named apify to your workspace MCP configuration and use the same actor-specific URL.

Example prompts:

  • “Verify Arizona ROC license 306449 and summarize status, classification, personnel, complaints, and bond.”
  • “Find active B-2 contractors in Flagstaff and return a phone list with source URLs.”
  • “Refresh these ROC licenses and highlight renewed-through dates within the next 90 days.”

Always inspect source records before making a consequential compliance decision.

Tips for reliable results

  • Use license numbers for the fastest and most precise lookups.
  • Spell personnel names first-name-first.
  • Use the exact city spelling found in mailing addresses.
  • Copy the complete classification label from AZ ROC.
  • Keep maxItems and maxPages low during setup.
  • Combine related searches in one run to reuse the browser session.
  • Use an optional stable US proxy session only if direct access is throttled.
  • Re-run time-sensitive checks because the source says data can change daily.
  • Preserve sourceUrl and sourceCurrentAsOf with your exported evidence.

Limits and source behavior

The source is a Salesforce Experience Cloud application that requires JavaScript rendering.

Broad city searches can contain many licenses and take longer than direct lookups.

maxPages bounds how much of each broad search is inspected.

The public website states that it does not display every sanction or every piece of public information.

Cancelled, dismissed, or otherwise excluded complaints may not appear in displayed complaint counts.

Mailing-address city is not the same as service coverage area.

The source may change labels, components, or access behavior without notice.

Proxy and performance guidance

Direct anonymous access is the default and was verified during development.

The Actor reuses one Chromium context and processes contractor details sequentially.

Images and font files are blocked to reduce traffic and page overhead.

If your network receives transient Salesforce throttling, enable Apify Proxy in the advanced input section.

Begin with datacenter routing where available; use residential routing only when necessary for your workload.

Proxy use can add separate platform bandwidth costs.

The Actor extracts records displayed on a public government website without login.

Public availability does not remove every legal or contractual responsibility.

You are responsible for your purpose, retention, outreach, automated-decision, and privacy compliance.

Do not use the data for harassment, discrimination, deceptive marketing, or unsupported accusations.

The AZ ROC page says data is supplied without personal research or analysis and can change daily.

For legal purposes, affidavits, certified copies, or complete public histories, contact the Registrar and follow its official request process.

This documentation is product guidance, not legal advice.

Troubleshooting

Why did my name search return too many licenses?

Use a more specific business or first-and-last personnel name, then add city, classification, status, and smaller pagination limits.

Why did a city search miss a contractor that works there?

AZ ROC says city search uses the mailing address in its system, not the contractor's work coverage area.

Why did classification search fail before results loaded?

Enter the complete option label, such as B-2 General Small Commercial Contractor, not only an informal trade name.

Why is a field missing?

Optional fields are omitted when the public detail page does not display a useful value. Inspect sourceUrl to confirm the source record.

Why did the run fail all searches?

Check source availability, input spelling, logs, and network settings. Retry once with a conservative proxy session if Salesforce blocks your network.

FAQ

Does it need an AZ ROC account?

No. The supported contractor-search and detail workflow is anonymous.

Can it search a company and a person in one run?

Yes. Add both strings to searchQueries; duplicate detail URLs are removed.

Can it return inactive licenses?

Yes. Keep status as any or choose inactive for records not marked Active.

Does it return street addresses?

It returns the location shown by the public detail record. Some records expose only city, state, and ZIP.

Are complaint counts a complete disciplinary history?

No. The source itself warns that not every public sanction or complaint category is displayed.

Does zero output always mean an error?

No. A successful search with no matching public licenses is a valid empty result. Failed searches and failed detail extraction are reported separately in logs.

Can I scrape every Arizona contractor?

The Actor supports bounded search pagination, but the source recommends its Posting List or a public-record request for complete lists. Choose limits appropriate to your use case.

Related actors cover different public records. Join datasets only when you have a legitimate purpose and a reliable matching key.

Data quality checklist

Before using an export:

  • confirm the ROC number is six digits;
  • inspect source freshness;
  • verify status and renewed-through date;
  • confirm classification matches the planned work;
  • review qualifying-party records;
  • interpret complaint counts with the source disclaimer;
  • review bond status and available amount;
  • preserve the source URL;
  • request certified records when required.

Get started

Run the prefilled license lookup first.

Review the single output row and nested bond/personnel fields.

Then replace the example with your ROC numbers, company names, personnel names, city, or classification.

Set a clear output bound, run the Actor, and export the dataset in your preferred format.