# Contractor License Lookup (`mambalabs/contractor-license-lookup`) Actor

Look up contractor licenses from state boards, or list licensed contractors by trade and city. Covers California, Texas, Washington, Oregon, and Louisiana. Get license number, status, expiration, classifications, owners, address, and phone, read from each board's own register. No API key.

- **URL**: https://apify.com/mambalabs/contractor-license-lookup.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Lead generation, Automation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 license rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Contractor License Lookup

Look up a contractor's state license, or list the licensed contractors for a trade in a state, city, or county. This actor reads each state licensing board's own public register for California, Texas, Washington, Oregon, and Louisiana and returns one row per license with the license number, status, expiration date, classifications, owners or qualifying parties, address, and phone. Rows are flat, so they export to CSV or drop into a Clay table.

### Features

- **Two modes.** List: states and trades in (plumbing, roofing, hvac, electrical, general, and more), optionally a city or county, and you get every matching licensed contractor. Lookup: a license number or business name per line, and you get the license with its status.
- **Five state boards, read at the source.** Washington Labor and Industries, the Oregon Construction Contractors Board, and the Texas Department of Licensing and Regulation through their open data portals; the California Contractors State License Board through its Data Portal downloads; and the Louisiana State Licensing Board for Contractors through its public search.
- **Trade words in plain English.** Type plumbing or hvac and the actor maps the word to each board's own classification names, such as C-36 in California or PLUMBING CONTRACTOR in Washington.
- **Owners and qualifiers.** Washington principals, Oregon responsible managing individuals, Texas license holders, and Louisiana qualifying parties come back in `owner_names`.
- **Active only by default.** Expired, suspended, and inactive licenses are left out unless you turn that off.
- **One summary per search.** Each search ends with one free row that says how many licenses the board returned and why a search was skipped.

### How it reads the boards

| State | Board | Source | Lookup by number or name | List by trade |
|---|---|---|---|---|
| CA | Contractors State License Board | CSLB Data Portal list downloads (by classification, statewide or by county) | Only inside a trade list (the CSLB license check page uses a reCAPTCHA, which this actor does not use) | Yes |
| TX | Department of Licensing and Regulation | data.texas.gov TDLR All Licenses | Yes | Yes, for the trades TDLR licenses (air conditioning, electrical, elevator, appliance, water well, sign) |
| WA | Department of Labor and Industries | data.wa.gov contractor license and principal data | Yes | Yes |
| OR | Construction Contractors Board | data.oregon.gov CCB Active Licenses | Yes | By endorsement (general or specialty) |
| LA | State Licensing Board for Contractors | LSLBC public search | Yes | Yes, with city |

Requests go through the Apify proxy, and a refused request moves to Apify residential addresses on its own. No account, no API key, and no other developer's actor. Texas has no state general contractor license, and Texas plumbers are licensed by a separate board that this actor does not read.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `mode` | string | `list` | `list` or `lookup` |
| `states` | array | | State codes: `CA`, `TX`, `WA`, `OR`, `LA` |
| `trades` | array | | List mode. Trade words, for example `plumbing`, `roofing`, `hvac`, `electrical`, `general` |
| `cities` | array | | List mode. Keep contractors in these cities |
| `county` | string | | List mode. Keep contractors in this county (CA, TX, OR) |
| `business_name` | string | | List mode: a name filter. Lookup mode: one more name to look up |
| `lookups` | array | | Lookup mode. One per line, for example `WA \| 04CONCL862CR` or `LA \| Acadian Builders` |
| `license_number` | string | | Lookup mode. One more license number, searched in `states` |
| `active_only` | string | `true` | Keep only active, unexpired licenses |
| `include_owners` | string | `true` | Washington: read current principals |
| `max_results` | string | `100` list, `10` lookup | License rows per search, up to 5000 |
| `max_charge_usd` | string | | Stop before a row would pass this amount |
| `proxy_mode` | string | `auto` | `auto` or `residential`. A reliability choice |

Every field is text, so a Clay column can fill any of them: numbers as `"50"`, yes or no as `"true"` or `"false"`. Lists accept one item per line, items split by a semicolon, or a JSON array.

### Output

| Field | Example |
|---|---|
| `row_type` | `license` or `query_summary` |
| `state`, `board`, `match_type` | `CA`, `California Contractors State License Board`, `list` |
| `license_number`, `business_name`, `business_type` | `1068713`, `HILMEN INC`, `Corporation` |
| `owner_names` | `["Ochoa, Eric James"]` |
| `license_type`, `classifications` | `Contractor License`, `["C-36 - Plumbing Contractor"]` |
| `status`, `is_active`, `issue_date`, `expiration_date` | `CLEAR`, `true`, `2020-09-10`, `2027-09-30` |
| `address`, `city`, `county`, `zip`, `phone`, `email` | `121 DEL SURENO`, `FALLBROOK`, `San Diego`, `92028`, `(760) 908-5770`, `null` |
| `bond_company`, `bond_amount`, `insurance_company`, `workers_comp` | where the board publishes them |
| `source_url` | the board page for the license, or the board search page |
| `results_found`, `results_returned` | query summary rows only |
| `row_status`, `error_reason`, `billable_events_json` | `ok`, `null`, `{"license-row":1}` |

The run summary (key-value store record `RUN_SUMMARY`) lists searches, licenses per state, row statuses, requests, and the proxy route used.

### Pricing

Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| License row (`license-row`), one license | $0.004 | $0.0038 | $0.0036 | $0.0034 |
| Actor start (`apify-actor-start`), once per run | $0.0005 | $0.0005 | $0.0005 | $0.0005 |

Free rows: the search summary rows, and skipped, blocked, error, and no results rows. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 375 license rows); any paid Apify plan removes that cap.

Example: plumbing contractors in Spokane, Washington, capped at 50, return 50 license rows for 0.20 USD plus the 0.0005 USD start.

### Usage examples

#### Apify Console or API

```json
{ "mode": "list", "states": ["CA"], "trades": ["roofing"], "county": "San Diego", "max_results": "200" }
```

```json
{ "mode": "lookup", "lookups": ["WA | 04CONCL862CR", "OR | 100215", "LA | Acadian Builders"] }
```

#### Clay

For verification, send a state and a license number from your table in `lookups` (for example `WA | 04CONCL862CR`) and read `status`, `is_active`, and `expiration_date`. For a lead list, run list mode with a trade and a city and import the rows.

#### MCP

The MCP server `@mambalabsdev/mcp-contractor-license-lookup` exposes this actor as a tool for Claude and other MCP clients.

### Error handling

| Situation | What you get |
|---|---|
| A board refuses every route | One free summary row with `row_status` `blocked` and the reason |
| A board cannot answer that kind of search (a California name lookup, a Texas roofing list, an Oregon trade list) | One free summary row with `row_status` `skipped` and what to send instead |
| No license matches | One free summary row with `row_status` `no_results` |
| Max charge reached | The run stops before the next billable row and says why in the status message |

### Limitations

- Five states today: California, Texas, Washington, Oregon, and Louisiana. Florida and Arizona board sites answer automated requests with a browser challenge, so they are not covered.
- California name and number lookups work only inside a trade list, because the CSLB license check page requires a reCAPTCHA. California list files carry no owner names.
- Each California trade can match several CSLB classifications; the first 6 are read per search. Louisiana works the same way.
- California general engineering and general building lists (classifications A, B, and B-2) are read only by county, because their statewide files are too large for one run.
- Texas open data carries no address or phone on A/C licenses, so filter Texas air conditioning lists by county, not city.
- Oregon's open data lists active licenses only, and Oregon endorsements say residential or commercial, general or specialty, not the trade.
- Washington registers most trade businesses under the GENERAL specialty; plumbing, electrical, and elevator contractors hold their own license types, which the trade words match.
- A lookup value with digits and no spaces is read as a license number. Write a business name such as 3M as `3M Company`.
- Board data is as current as each board's own publication. On 2026-10-21 the Washington, Oregon, and Texas open data sets had been updated within the previous 3 days, the CSLB files were dated 2026-10-20, and the LSLBC search reads live. Verify a license on the board's site before you rely on it for a hiring or legal decision.
- Louisiana publishes contractor email addresses; this actor returns them as the board shows them. You are responsible for how you use contact data under the laws that apply to you.

### More from Mamba Labs

| Actor | Actor ID |
|---|---|
| [Account Hiring Watch](https://apify.com/mambalabs/account-hiring-watch?fpr=mamba) | `gRAZA5WBi1r6L0gy7` |
| [Agent Accessibility Auditor](https://apify.com/mambalabs/agent-accessibility-auditor?fpr=mamba) | `anxbRv0lKrpQ1pnua` |
| [Agent to Brokerage Resolver](https://apify.com/mambalabs/agent-brokerage-resolver?fpr=mamba) | `ePRRGLxOGyaVHO4dI` |
| [AI Tooling Detector](https://apify.com/mambalabs/ai-tooling-detector?fpr=mamba) | `EwkHhmqiuJgRoVEbE` |
| [B2B Reddit Conversation Monitor](https://apify.com/mambalabs/b2b-reddit-conversation-monitor?fpr=mamba) | `SoDryzzsjmY3SsiyG` |
| [Bluesky Brand Presence Mapper](https://apify.com/mambalabs/bluesky-brand-presence-mapper?fpr=mamba) | `eLpxzP4IuXznlFVND` |
| [Career Change Signal Engine](https://apify.com/mambalabs/career-change-signal-engine?fpr=mamba) | `vX2Yga1a6wGaXaP14` |
| [Company Change Event Feed](https://apify.com/mambalabs/company-change-event-feed?fpr=mamba) | `oX44rS0fkEJ3rXLWe` |
| [Company Contact Details Extractor](https://apify.com/mambalabs/company-contact-details-extractor?fpr=mamba) | `4mMncKaJykiq94grz` |
| [Company Discovery List Builder](https://apify.com/mambalabs/company-discovery-list-builder?fpr=mamba) | `jch0HdaZnpbMqlcGS` |
| [Company Firmographic Enricher](https://apify.com/mambalabs/company-firmographic-enricher?fpr=mamba) | `YlUtLWjfPpqykmB8g` |
| [Company Funding Record](https://apify.com/mambalabs/funding-investor-record?fpr=mamba) | `OFS4Mt1gyYNtGfUbE` |
| [Company Identity Resolver](https://apify.com/mambalabs/company-identity-resolver?fpr=mamba) | `lr8fTRAmZCBZmuwwh` |
| [Company Social Presence Mapper](https://apify.com/mambalabs/company-social-presence-mapper?fpr=mamba) | `4k6CCemkgBDz18m2h` |
| [Contact Classifier](https://apify.com/mambalabs/contact-classifier?fpr=mamba) | `0lGSeYJmniXhGANnO` |
| [Cookie Consent Audit](https://apify.com/mambalabs/cookie-consent-audit?fpr=mamba) | `TrKyOS0KBoGC35nbr` |
| [Domain Deliverability Checker](https://apify.com/mambalabs/domain-deliverability-checker?fpr=mamba) | `0tVgxI7A6o9jMlxmc` |
| [Domain to LinkedIn URL Resolver](https://apify.com/mambalabs/domain-to-linkedin-url-resolver?fpr=mamba) | `3HtnSaqPHOg1Qg5gx` |
| [Ecommerce Platform Profiler](https://apify.com/mambalabs/ecommerce-platform-profiler?fpr=mamba) | `5G2NeYjBbQTjaTn9L` |
| [Event Presence Index](https://apify.com/mambalabs/event-presence-index?fpr=mamba) | `WLhMy8fMDgsxdYxv5` |
| [Expert Witness Directory](https://apify.com/mambalabs/expert-witness-directory?fpr=mamba) | `LIpwlgfE3LaQBaXd4` |
| [Funding and Press Signal Scanner](https://apify.com/mambalabs/funding-press-signal-scanner?fpr=mamba) | `FS13X6dhQVgX3XOM6` |
| [GitHub Organization Signal Scanner](https://apify.com/mambalabs/github-organization-signal-scanner?fpr=mamba) | `ahF8RRpv5mzPao5CN` |
| [Google Ads Transparency Monitor](https://apify.com/mambalabs/google-ads-transparency-monitor?fpr=mamba) | `1eOwxhBVxzvOXAm4s` |
| [Government Contract Award Monitor](https://apify.com/mambalabs/public-award-monitor?fpr=mamba) | `zhEtllASykOcx9hJ8` |
| [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper?fpr=mamba) | `D7O1SA2EqwHGsGr1P` |
| [GTM Signals Aggregator](https://apify.com/mambalabs/b2b-buying-signals-hiring-tech-stack-intent-for-clay?fpr=mamba) | `xKdRfnfFNkdMpFuNs` |
| [ICP Fit Scorer](https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay?fpr=mamba) | `W161DT8W4kW55dMFh` |
| [Influencer Change Monitor](https://apify.com/mambalabs/creator-change-monitor?fpr=mamba) | `d2VVgahNL6UmcLkhg` |
| [Influencer Finder](https://apify.com/mambalabs/creator-finder?fpr=mamba) | `tpkedmloIIWtXx6sg` |
| [Influencer Lead List Builder](https://apify.com/mambalabs/creator-lead-list-all-in-one?fpr=mamba) | `KnmByszcv135yM30G` |
| [Influencer Profile Scraper](https://apify.com/mambalabs/creator-profile-reader?fpr=mamba) | `EqEnklDVMIcB1V499` |
| [Influencer Talent Agency Lookup](https://apify.com/mambalabs/talent-agency-lookup?fpr=mamba) | `zCuX4Mgyg6JvXgGzd` |
| [Instagram Facebook Brand Presence Mapper](https://apify.com/mambalabs/meta-brand-presence-mapper?fpr=mamba) | `HXh65I0JBjPsunbY8` |
| [Integration and Marketplace Presence Mapper](https://apify.com/mambalabs/integration-marketplace-presence-mapper?fpr=mamba) | `V0guNuvM85Q61f2gj` |
| [Job Board Keyword Signal Scanner](https://apify.com/mambalabs/job-board-keyword-signal-scanner?fpr=mamba) | `4DvqpvhMR74NLcDDY` |
| [Job Change Tracker](https://apify.com/mambalabs/job-change-tracker?fpr=mamba) | `L8UbEmMJC1XYPSZOb` |
| [Job Posting Monitor](https://apify.com/mambalabs/gtm-job-discovery?fpr=mamba) | `QCfICD9kOPiOdj5iI` |
| [Legal Entity Resolver](https://apify.com/mambalabs/legal-entity-resolver?fpr=mamba) | `KHFyPCDIx7CyqULYm` |
| [Link in Bio Scraper and Newsletter Detector](https://apify.com/mambalabs/link-in-bio-newsletter-checker?fpr=mamba) | `OorucdheTIgu7RFzK` |
| [LinkedIn Company Page Mapper](https://apify.com/mambalabs/linkedin-company-presence-mapper?fpr=mamba) | `zOPm6A9JEhUGcIdFW` |
| [LinkedIn Post Tracker](https://apify.com/mambalabs/linkedin-post-engager-capture?fpr=mamba) | `oiGLNPuaf5BRaz9K5` |
| [Meta Ad Library Monitor](https://apify.com/mambalabs/meta-ad-library-monitor?fpr=mamba) | `J1GWlSXfSGU3u8Wng` |
| [Mobile Phone Waterfall](https://apify.com/mambalabs/mobile-phone-waterfall-orchestrator?fpr=mamba) | `6OOgPktf7RIa5XCOP` |
| [New Hire Finder](https://apify.com/mambalabs/new-hire-finder?fpr=mamba) | `cKuc38p4nYHNF3IW8` |
| [Outbound Stack Detector](https://apify.com/mambalabs/outbound-infrastructure-fingerprint?fpr=mamba) | `v43UJC8r7qW7cBSTG` |
| [Page Finder and Extractor](https://apify.com/mambalabs/page-finder-extractor?fpr=mamba) | `TpurgcOZbVnknlaiC` |
| [People Finder & Email Verifier](https://apify.com/mambalabs/people-finder?fpr=mamba) | `LEgloG7tWgQl4o6TD` |
| [Person Social Footprint Mapper](https://apify.com/mambalabs/person-social-footprint-mapper?fpr=mamba) | `jfQXa2zW9FHCJot9K` |
| [Pinterest Brand Presence Mapper](https://apify.com/mambalabs/pinterest-brand-presence-mapper?fpr=mamba) | `d1HvjZfKhgvWsoEwn` |
| [Prospect Engine](https://apify.com/mambalabs/b2b-prospect-engine?fpr=mamba) | `q9rT6v64nUJdPexOQ` |
| [Publishing Frequency Tracker](https://apify.com/mambalabs/blog-publishing-frequency?fpr=mamba) | `TbLwaUUATdYb6wp4N` |
| [Reddit Brand Presence Mapper](https://apify.com/mambalabs/reddit-brand-presence-mapper?fpr=mamba) | `pKQZmDaT70SEb54bZ` |
| [Reporting Window Finder](https://apify.com/mambalabs/public-company-reporting-window-finder?fpr=mamba) | `uINxR7a1IW8qUTRUX` |
| [Sequencer Lead Push](https://apify.com/mambalabs/clay-to-instantly-smartlead-push?fpr=mamba) | `0Jv27VeWM5tSZQs9x` |
| [Team Page People Extractor](https://apify.com/mambalabs/team-page-people-extractor?fpr=mamba) | `j8a9zX0k4mNbvDbWK` |
| [Tech Stack Signal Detector](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper?fpr=mamba) | `qyd7nNyqFPelQViBx` |
| [TikTok Brand Presence Mapper](https://apify.com/mambalabs/tiktok-brand-presence-mapper?fpr=mamba) | `fco8FvoJcSafbeyd1` |
| [Trustpilot Reputation Enricher](https://apify.com/mambalabs/review-platform-reputation-enricher?fpr=mamba) | `3lIqfCt61j4hqE1xz` |
| [WCAG Accessibility Audit](https://apify.com/mambalabs/wcag-accessibility-audit?fpr=mamba) | `P3jBj3FRghKEhX52z` |
| [Website Traffic Rank Estimator](https://apify.com/mambalabs/website-traffic-rank-estimator?fpr=mamba) | `GnOFUzlNVIoXgeJjH` |
| [Work Email Waterfall](https://apify.com/mambalabs/email-waterfall-orchestrator?fpr=mamba) | `OT6xqTFThC0Rjf7Zj` |
| [Workplace Program Detector](https://apify.com/mambalabs/workplace-program-detector?fpr=mamba) | `Li6pPDhqbdzFz3h7G` |
| [X Brand Presence Mapper](https://apify.com/mambalabs/x-brand-presence-mapper?fpr=mamba) | `oLOgadhHUkNAyDA3w` |
| [YouTube Channel Stats Extractor](https://apify.com/mambalabs/youtube-channel-transcript-extractor?fpr=mamba) | `6hSpD3kd2s2IQ4VSs` |

Built by [Mamba Labs](https://apify.com/mambalabs?fpr=mamba).

# Actor input Schema

## `mode` (type: `string`):

List needs States and Trades. Lookup needs Lookups.

## `states` (type: `array`):

Two letter state codes: CA, TX, WA, OR, LA. In lookup mode, used for lines that name no state.

## `trades` (type: `array`):

List mode. Trade words such as plumbing, electrical, hvac, roofing, general, solar, landscaping, painting, concrete, pool, or a classification name the board uses. Each trade is searched in every state.

## `cities` (type: `array`):

List mode. Keep contractors in these cities. Each city is searched separately.

## `county` (type: `string`):

List mode. Keep contractors in this county (California, Texas, and Oregon record county; Washington and Louisiana do not).

## `business_name` (type: `string`):

List mode: keep only names that contain this text. Lookup mode: one more business name to look up.

## `lookups` (type: `array`):

Lookup mode. One per line: a state code, a pipe, then a license number or a business name, for example WA | 04CONCL862CR or LA | Acadian Builders. A value with digits and no spaces is read as a license number.

## `license_number` (type: `string`):

Lookup mode. One more license number, searched in the States above.

## `active_only` (type: `string`):

Keep only licenses the board lists as active or clear and not expired.

## `include_owners` (type: `string`):

Washington: read the current principals of each license (one more request per 100 licenses). Other states return the owners or qualifiers the board lists anyway.

## `max_results` (type: `string`):

Stop each search after this many license rows, up to 5000. Default 100 in list mode and 10 in lookup mode.

## `max_charge_usd` (type: `string`):

Stop before a row would push this run past this amount. Empty: no limit beyond the one you set in Apify.

## `proxy_mode` (type: `string`):

Auto sends requests through the Apify proxy pool and moves a request to residential addresses only when a board refuses it. This is a reliability choice; under pay per event the proxy is not billed to you.

## `source_tag` (type: `string`):

Internal attribution tag for published tasks. Leave empty.

## Actor input object example

```json
{
  "mode": "list",
  "states": [
    "WA"
  ],
  "trades": [
    "plumbing"
  ],
  "cities": [
    "Spokane"
  ],
  "active_only": "true",
  "include_owners": "true",
  "max_results": "10",
  "proxy_mode": "auto"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `run_summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "list",
    "states": [
        "WA"
    ],
    "trades": [
        "plumbing"
    ],
    "cities": [
        "Spokane"
    ],
    "max_results": "10"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/contractor-license-lookup").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "list",
    "states": ["WA"],
    "trades": ["plumbing"],
    "cities": ["Spokane"],
    "max_results": "10",
}

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/contractor-license-lookup").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "list",
  "states": [
    "WA"
  ],
  "trades": [
    "plumbing"
  ],
  "cities": [
    "Spokane"
  ],
  "max_results": "10"
}' |
apify call mambalabs/contractor-license-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambalabs/contractor-license-lookup"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WBYK3CPI2kdeq4bP1/builds/7as5euaJnqWOUb4Bd/openapi.json
