Arizona ROC Contractor License Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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?
| Field | Description |
|---|---|
businessName | Contractor business entity name |
licenseNumber | Six-digit Arizona ROC license number |
city, state, zip, location | Mailing-address location shown publicly |
phone | Public contractor phone number |
status | Normalized leading license status |
statusAction | Complete Status / Action wording |
statusLastChangedOn | Date displayed by the source when present |
classificationCode | License class such as B-2 |
classificationDescription | Human-readable scope description |
entityType | Corporation, LLC, sole proprietor, or other source value |
firstIssuedDate | First-issued date |
renewedThroughDate | Renewed-through date |
personnel | Names, positions, and other positions |
openComplaintCount | Public open-case count |
disciplinedComplaintCount | Public disciplined-case count |
resolvedSettledComplaintCount | Public resolved or settled count |
bonds | Surety bond records and balances |
sourceCurrentAsOf | Freshness timestamp displayed by AZ ROC |
sourceUrl | Exact official contractor detail URL |
searchQuery | Lookup route that discovered the record |
scrapedAt | UTC extraction timestamp |
Optional fields are omitted when the source does not display them.
How to search Arizona ROC contractor licenses
- Open the Actor input page.
- Keep the prefilled ROC number for a fast first run, or replace it.
- Add business or personnel names under Company or person names.
- Optionally add a city or full classification label.
- Choose any, active, or inactive/other status.
- Set a small
maxItemswhile testing. - Run the Actor.
- 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:
- choose an Arizona city;
- choose a commercially relevant license classification;
- keep active licenses only;
- export business name, phone, personnel, status, and renewal date;
- deduplicate against your CRM;
- review source URLs before outreach;
- 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:
- enter the six-digit ROC number;
- set
maxItemsto1; - run the Actor;
- compare status and renewal dates;
- inspect classification scope;
- review qualifying party and complaint counts;
- inspect the bond record;
- open
sourceUrlif 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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
maxItemsandmaxPageslow 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
sourceUrlandsourceCurrentAsOfwith 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.
Is scraping Arizona ROC data legal?
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 Automation Lab actors
- Maricopa County Property Records Scraper — add property ownership, valuation, deed, and parcel context to Arizona contractor workflows.
- Arizona ROC Contractor License Scraper — bookmark the current Actor page for API, schedules, runs, and datasets.
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.