Connecticut & Colorado Contractor License Feed avatar

Connecticut & Colorado Contractor License Feed

Pricing

from $2.40 / 1,000 item extracteds

Go to Apify Store
Connecticut & Colorado Contractor License Feed

Connecticut & Colorado Contractor License Feed

Export official Connecticut and Colorado plumbing and electrical contractor license snapshots. Filter by name, credential, trade and issue or renewal dates for recurring credential checks and new-license monitoring.

Pricing

from $2.40 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Export US contractor licenses from the official Connecticut and Colorado open-data snapshots. Select plumbing or electrical contractors, search by name or credential, and filter original issue or effective/renewal dates for recurring credential checks and new-license monitoring.

This is a focused two-jurisdiction feed, not a nationwide directory or a legal verification service.

What does it collect?

  • Connecticut: electrical limited, unlimited and limited solar contractors; plumbing and piping limited/unlimited contractors.
  • Colorado: electrical contractors (EC) and plumbing contractors (PC).
  • Identity, source status, original issue date, renewal/effective date, expiration and available mailing location.
  • Dataset provenance and scrape timestamp for downstream comparisons.

Excluded: WA, TX, CT home-improvement contractors, nursing, journeypersons, apprentices, trainees and education providers. A contractor may be a person or a business; mailing addresses can be outside the licensing state.

Who is it for?

Vendor onboarding teams can match a supplied credential before asking for authoritative confirmation. Compliance analysts can refresh a bounded list of contractor credentials. Data teams can collect recently issued licenses for an internal workflow, subject to responsible-use requirements.

Why use this feed?

Both sources produce one consistent output shape while preserving their different date semantics. Exact contractor-class allowlists avoid treating electronic nicotine licenses, nursing registrations or home-improvement licenses as plumbing/electrical credentials. Missing fields remain null instead of being invented.

Getting started

  1. Choose CT, CO, or both licensing jurisdictions.
  2. Choose electrical, plumbing, or both contractor trades.
  3. Optionally enter a name substring, exact credential or inclusive date cutoff.
  4. Set a global maxItems limit and run.
  5. Download the default dataset as JSON, CSV or Excel through Apify.

Example:

{"states":["CO"],"trades":["plumbing"],"issuedSince":"2026-01-01","maxItems":100}

Input parameters

ParameterMeaning
statesNonempty subset of CT/CO; default both. Processed in supplied order. Licensing jurisdiction, not mailing location.
tradesNonempty subset of electrical/plumbing; ANY selected trade, contractor classes only. Default both.
nameOptional case-insensitive literal substring; outer whitespace trimmed. CT name/business/DBA; CO entity, first/last and joined first-last or first-middle-last names. Not whole-word matching.
credentialNumberExact case-insensitive source field. CT full code with prefix/punctuation; CO numeric string without EC/PC prefix.
issuedSinceInclusive YYYY-MM-DD original-issue-date cutoff.
renewedSinceInclusive CT effective-date or CO last-renewal-date cutoff, not a generic change timestamp.
maxItemsGlobal unique-license cap, default 100, range 1–100000. Zero is invalid.

All supplied filters combine with AND. Missing dates do not match date filters. Empty arrays, invalid dates, unsupported fields and unsupported jurisdictions fail rather than silently changing scope.

Output fields

FieldMeaning
recordIdJurisdiction plus stable source credential identity; used for deduplication.
jurisdiction, tradeLicensing state and contractor trade.
name, businessNameDisplay name and nullable source business/entity name.
credentialNumber, credentialTypeSource credential and contractor class.
status, statusReasonSource status; reason is CT-only.
issueDateOriginal issue date, when supplied.
renewalDateCT effective date or CO last-renewed date.
expirationDateSource expiration date.
sourceRefreshedAtCT record-refresh date; null for CO.
address, city, addressState, postalCodeMailing location. CO has no street address in this export.
sourceUrl, scrapedAtOfficial dataset page and UTC collection timestamp.

Source date strings are preserved without timezone conversion. Unavailable optional fields are null. The SUMMARY key-value-store record reports saved count, selected states/trades and global-limit status. It does not claim exhaustive historical coverage.

Example output

Representative current Colorado plumbing output, with business identity anonymized:

{
"recordId":"CO:PC:123",
"jurisdiction":"CO",
"trade":"plumbing",
"name":"Example Plumbing LLC",
"businessName":"Example Plumbing LLC",
"credentialNumber":"123",
"credentialType":"Plumbing Contractor",
"status":"Active",
"statusReason":null,
"issueDate":"2026-04-24T00:00:00.000",
"renewalDate":"2026-04-24T00:00:00.000",
"expirationDate":"2027-02-28T00:00:00.000",
"sourceRefreshedAt":null,
"address":null,
"city":"Wheat Ridge",
"addressState":"CO",
"postalCode":"80033",
"sourceUrl":"https://data.colorado.gov/d/7s5z-vewr",
"scrapedAt":"2026-10-11T06:10:32.057Z"
}

How much does it cost to export contractor licenses?

Pay-per-event pricing includes a one-time start fee and one item event per unique license saved. No separate charge applies to dates, location fields or the summary. The start fee is $0.005 per run. Per-license prices depend on qualifying monthly Apify Store spend: FREE $0.0046, BRONZE $0.004, SILVER $0.00312, GOLD/PLATINUM/DIAMOND $0.0024. These are spend tiers, not per-Actor volume discounts.

BRONZE estimates: 1 license $0.009; 25 licenses $0.105; 100 licenses $0.405, including the start fee. Empty valid runs incur only the start fee. A failure after startup may retain that fee and charges for already delivered rows. Check the Pricing tab for active rates; estimates are not guaranteed invoices.

Limits and completeness

Sources are processed in your supplied order. With CT first, CT can fill the global limit before Colorado is fetched. Select one state per run if you need a specific count from each jurisdiction. Results follow stable source-row order, not newest-first.

Pagination uses bounded pages and deduplicates license identities; CO disciplinary rows can repeat the same license, so the first source row supplies that license's snapshot. Source updates during paging can affect consistency. No cross-run cache, change detector, alerts or historical archive is built in.

A platform spending cap may stop collection before the requested result limit. Such output is partial. Upstream errors fail the run; any rows already saved are partial, not proof of successful complete collection. Transient network/429/5xx failures receive at most three attempts per page. Each request has a 30-second timeout. No automatic paid proxies or browser fallbacks are enabled.

Integrations and recurring checks

Schedule runs in Apify and compare recordId, status and dates in your own database. Use issue-date cutoffs to collect newly issued credentials; keep your own watermark and allow overlap to account for delayed source publication. For spreadsheets, download CSV or connect the dataset to Google Sheets. For ETL, fetch paginated JSON and retain sourceUrl and scrapedAt.

API usage

Keep your Apify token in an environment variable, never in shared code.

curl -X POST "https://api.apify.com/v2/acts/automation-lab~ct-co-trade-license-feed/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"states":["CO"],"trades":["electrical"],"maxItems":25}'

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/ct-co-trade-license-feed').call({states:['CO'],maxItems:25});
const { items } = await client.dataset(run.defaultDatasetId).listItems({limit:25,offset:0});
console.log(items);

Python:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/ct-co-trade-license-feed').call(run_input={'states':['CO'],'maxItems':25})
print(client.dataset(run['defaultDatasetId']).list_items(limit=25,offset=0).items)

MCP integration

Use the stable Actor-specific hosted endpoint:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/ct-co-trade-license-feed"

Claude Desktop, Cursor, and VS Code setup (HTTP-compatible clients):

{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/ct-co-trade-license-feed","headers":{"Authorization":"Bearer YOUR_APIFY_TOKEN"}}}}

Discover actual tool names and input schemas with read-only tools/list. Actor selection also exposes run/dataset/storage tools; it does not expose exactly one tool. Example prompts for authorized MCP usage: “Fetch at most 25 Colorado plumbing contractor licenses issued since January 1, 2026, and show names, statuses and source dates.”

Start once and retain the returned run ID. If nonterminal, check the same run with bounded backoff (2, 4, 8 seconds, capped at 10) and a 120-second total deadline. Set client timeout above server wait plus transport margin. On timeout, recover the known run rather than starting a duplicate. At deadline report pending and the run ID.

After success, read the returned defaultDatasetId using explicit offset, limit and fields. A consumer can use pages of 20 rows, at most 100 rows and 64 KiB of serialized content admitted to model context, whichever comes first. Enforce the byte cap host-side; disclose omitted/oversized rows, continuation offset and partial results. Without host interception, do not claim a hard byte cap. Keep full exports outside model context. These are consumer limits, not reduced Actor capabilities or universal token-saving guarantees.

Legality and responsible use

Official datasets: Connecticut State Licenses and Credentials and Colorado Professional and Occupational Licenses. Public snapshots can lag regulator systems. Confirm consequential decisions with the responsible licensing agency. This Actor does not certify legal eligibility, infer risk scores or supply private records, phone enrichment or owner relationships.

Use personal and business mailing information responsibly and comply with applicable laws and source terms. Do not use the feed for harassment or deceptive outreach.

The Actor uses no AI for extraction, verification or scoring and is not affiliated with either licensing agency. Name/credential filters are sent to the selected official data endpoint. Run inputs, outputs and logs remain in your Apify account under its retention controls until deleted; delete associated datasets and key-value stores when no longer needed. No cross-run copies or Actor-managed cache are kept. For help, use this Actor's Apify Store Issues tab.

Failed operations send sanitized diagnostic input, exceptions and actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days.

FAQ and troubleshooting

Why is Colorado missing from my two-state output? The first source filled the global cap. Run CO alone or reverse the order.

Why does my credential not match? CT requires its full code, including prefix and punctuation; CO uses the bare number plus selected trade. Exact field equality is not a substring search.

Does renewedSince mean any record changed? No. It compares effective/renewal dates. CO provides no record-refresh timestamp here.

Can I request nurses or journeypersons? No; only the documented contractor classes are supported.

Why did a valid query return no rows? Filters may have no matching source records. A successful empty result is distinct from an upstream failure, which fails the run.

For another jurisdiction, see Washington Electrical Contractor Licenses. Its coverage is separate and is not included in this feed.