NC Licensing Board for General Contractors Scraper
Pricing
from $2.00 / 1,000 results
NC Licensing Board for General Contractors Scraper
North Carolina general contractor license scraper & API: search the NC Licensing Board and export license number, status, classification, company name, qualifier, address and limits. Contractor verification, compliance and B2B lead generation — fast, no login.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Features
Share
NC Licensing Board for General Contractors Scraper — NCLBGC License Lookup, Classifications, Qualifiers, Phone & Address
Pull structured North Carolina general contractor license records straight from the official NCLBGC public portal (portal.nclbgc.org). Search by city, classification/trade, company name, qualifier name, license number, or ZIP code and extract license status, financial limitation tier, active classifications, primary qualifier, phone number, mailing address, expiration & issue dates, and disciplinary matters — with no login and no coding.
Export clean, de-duplicated records to JSON, CSV, Excel, or API for construction prequalification, B2B lead generation, compliance verification, and underwriting.
Built for construction bid & prequalification desks, B2B building-materials and equipment sales teams, compliance and vendor-onboarding officers, surety bond & commercial insurance underwriters, construction executive recruiters, and M&A analysts.
⚡ At a glance
| Feature | Details |
|---|---|
| Official Source | North Carolina Licensing Board for General Contractors (NCLBGC) |
| Search Modes (6) | 40-Metro City Dropdown (cityPreset), Custom City (citiesCustom), ZIP Code (zipCodes), Company Name (companyNames), Qualifier First/Last Name (qualifierLastNames), Exact License Number (licenseNumbers) |
| Trade Filter | 30+ NCLBGC Classifications (Building, Residential, Highway, Public Utilities, S (Roofing), S (Masonry Construction), S (Concrete Construction), etc.) |
| Extracted Fields | License #, Status, Company, DBA, Limitation (Limited/Intermediate/Unlimited), Active Classifications, Primary Qualifier & Full Qualifier List, Phone, Street Address/City/State/ZIP, Issue & Expiration Dates, Disciplinary Actions |
| Scale & Pagination | Multi-search fan-out across cities, ZIPs, and classifications — scales cleanly to 1,000+ contractors per run |
| De-duplication | Automatic in-memory de-duplication by normalized licenseNumber across all searches (0 duplicates) |
| Empty-Run Behavior | Auto-samples across 40 major North Carolina cities when run with empty input |
| Export Formats | JSON, CSV, Excel (XLSX), HTML, XML, JSON Lines, and Apify API |
🔎 Why scrape the NC Licensing Board for General Contractors (NCLBGC)?
The North Carolina Licensing Board for General Contractors (NCLBGC) regulates every general contractor bidding or performing construction work in North Carolina valued at $30,000 or more (NC General Statute §87-1). Its public registry is the single authoritative source of truth for who is licensed, at what financial limitation tier, in which construction classifications, under which qualified individual ("qualifier"), and with what expiration date or disciplinary history.
However, the NCLBGC portal is designed for one-by-one manual lookups:
- There is no public CSV download and no bulk API.
- Search results only show license numbers and names; viewing the financial limitation, classifications, phone number, address, qualifiers, and disciplinary actions requires opening three separate detail tabs for every single contractor.
- Clicking through hundreds of contractors across Charlotte, Raleigh, Greensboro, Durham, and Wilmington by hand takes hours and quickly goes stale.
This NCLBGC scraper automates the entire workflow. It executes your searches across cities, ZIP codes, companies, or classifications, fetches and merges all three detail views per license in parallel with automatic IP rotation, normalizes dates and addresses, and outputs one flat, CRM-ready JSON row per contractor.
Common reasons teams use this NC contractor license scraper:
- 🏗️ B2B Lead Generation for Construction Suppliers & SaaS — build targeted lists of licensed NC contractors with company name, business phone, mailing address, trade classification, and financial tier (
Unlimited,Intermediate,Limited). - 📋 Subcontractor & Bidder Prequalification — verify that every bidder holds an
Activelicense, the required classification (Building,Highway,Public Utilities), and a financiallimitationhigh enough for the project contract value. - 🛡️ Vendor Compliance & Automated License Monitoring — run scheduled checks on your approved contractor list (
licenseNumbers) to catch expired licenses (expirationDate), status changes, or newdisciplinaryActions. - 🏦 Surety Bonding & Commercial Insurance Underwriting — validate years in business (
issueDate), activequalifiers, limitation tier, and clean disciplinary history before binding coverage. - 🎯 Qualifier & Construction Executive Recruiting — identify licensed NC qualifiers (
primaryQualifier,qualifierNumber,qualifiers) who hold the exam credentials required by general contractors statewide. - 📊 M&A Due Diligence & Market Sizing — map licensed contractor density across North Carolina metros and specialty trades.
✨ What this NCLBGC scraper does
- ✅ Six combinable search modes:
- 40-City Dropdown (
cityPreset) — select Raleigh, Charlotte, Greensboro, Durham, Winston-Salem, Fayetteville, Cary, Wilmington, Asheville, and 31 more NC cities with a click. - Custom Cities (
citiesCustom) — enter any North Carolina town not in the preset dropdown (e.g.,"Boone","pines","Pinehurst","Morehead City"). - ZIP Codes (
zipCodes) — target hyper-local service territories by 5-digit postal code (e.g.,"27601","28202"). - Company / Business Names (
companyNames) — search partial or exact contractor names in bulk. - Qualifier First & Last Names (
qualifierFirstNames,qualifierLastNames) — look up contractors by the licensed individual who passed the NCLBGC exams, with optional phonetic Soundex matching (includeLikeSoundingNames). - Exact License Numbers (
licenseNumbers) — verify a batch of known NCLBGC license numbers in seconds.
- 40-City Dropdown (
- ✅ 30+ Trade & Classification Filter (
classificationType) — filter any search by specific NCLBGC classification:- Primary Classifications:
Building,Residential,Highway,Public Utilities - Grading & Excavating:
H (Grading & Excavating) - Public Utilities Sub-classifications:
PU (Communications),PU (Fuel Distribution),PU (Sewage Disposal),PU (Sewer Lines),PU (Water Lines),PU(Electrical-Ahead of P.O.D.),PU(Water Lines & Sewer Lines),PU(Water Pur. & Sewage Disp.),PU(Water Purification) - Specialty (S) Trades:
S (Roofing),S (Masonry Construction),S (Concrete Construction),S (Interior Construction),S (Metal Erection),S (Swimming Pools),S (Insulation),S (Asbestos),S (Boring & Tunneling),S (Marine Construction),S (Railroad Construction),S (Sidewalk Curb & Gutter),S (Sign/Billboard),S (Wind Turbine) - Builder Tiers:
Accredited Builder,Accredited Master Builder,Unclassified
- Primary Classifications:
- ✅ Complete 3-Part Profile Enrichment (
scrapeDetailPage: true) — merges Account Details, Account Qualifiers, and Public Disciplinary Matters into one unified record. - ✅ Unlocked 1,000+ Contractor Scaling — set
maxItems: 1000+ (withmaxResultsPerSearch: 0) to harvest 1,000+ unique contractors across a single large metro or across all 40 NC cities.
🎯 Use cases & B2B workflows
1. Building Material Distributors, Equipment Rental & ConTech Sales
Segment North Carolina contractors by trade classification and financial project size:
- Target
UnlimitedandIntermediateBuilding and Highway contractors in Charlotte, Raleigh, and Greensboro for enterprise construction software, crane/heavy-equipment leasing, and structural steel supply. - Target Residential and
S (Roofing)/S (Swimming Pools)/S (Concrete Construction)contractors with direct phone (phone) and mailing address (streetAddress,city,state,zip) outreach.
2. General Contractors, Owners & Public-Works Procurement
Automate pre-bid compliance checks. Pass your subcontractor roster into licenseNumbers (or companyNames) before issuing an Notice to Proceed to confirm:
licenseStatus === "Active"expirationDateis in the futurelimitationmeets statutory project thresholds (Limited≤ $500,000;Intermediate≤ $1,000,000;Unlimited= no dollar cap)disciplinaryActionsisnull
3. Construction Recruiters & Headhunters
In North Carolina, a general contractor license cannot remain active without a designated Qualifier who has passed the board examination. Every enriched record extracts primaryQualifier, qualifierNumber (e.g., Q.00166), and the full qualifiers array — giving construction recruiters an authoritative directory of credentialed qualifiers across the state.
4. Surety Bond & Commercial Insurance Underwriters
Evaluate contractor risk profiles before issuing bid bonds, performance bonds, or general liability policies. Cross-check issueDate (tenure), limitation (Limited vs. Intermediate vs. Unlimited), active classifications, and disciplinaryActions across hundreds of applicants automatically.
🏗️ NCLBGC classifications & limitation tiers explained
| NCLBGC Attribute | Values Returned | Meaning in North Carolina Construction |
|---|---|---|
Limitation: Limited | "Limited" | Licensed for single projects valued up to $500,000. |
Limitation: Intermediate | "Intermediate" | Licensed for single projects valued up to $1,000,000. |
Limitation: Unlimited | "Unlimited" | Licensed for projects of any dollar amount (no statutory ceiling). |
| Primary Classifications | Building, Residential, Highway, Public Utilities | Broad general contracting classifications covering commercial/industrial buildings, single/multi-family homes, roads/bridges, and utility infrastructure. |
Specialty (S) Classifications | S (Roofing), S (Masonry Construction), S (Concrete Construction), S (Metal Erection), S (Swimming Pools), S (Interior Construction), etc. | Specialized trade classifications for targeted subcontractor sourcing and B2B trade sales. |
Public Utilities (PU) Sub-classes | PU (Water Lines), PU (Sewer Lines), PU (Communications), PU (Fuel Distribution), PU (Water Purification) | Municipal and civil utility subcontractor classifications. |
📥 Input configuration
All fields are optional (required: []). Leave the input empty to collect a ready-made sample across major NC cities, or combine cities, ZIPs, companies, and classifications for targeted extraction.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
cityPreset | array<string> | [] | Pick one or more NC cities from the 40-metro dropdown (Raleigh, Charlotte, Greensboro, Durham, Winston-Salem, Cary, Wilmington, Asheville, etc.). |
citiesCustom | array<string> | [] | Additional NC cities not in the dropdown (e.g., ["Boone", "Pinehurst"]). |
classificationType | string | "ALL" | Filter by one of 30+ NCLBGC trade classifications (Building, Residential, Highway, Public Utilities, S (Roofing), etc.). "ALL" includes every classification. |
companyNames | array<string> | [] | Business or company names to search (partial matches supported). |
qualifierLastNames | array<string> | [] | Last name(s) of the licensed qualifier. |
qualifierFirstNames | array<string> | [] | First name(s) of the qualifier (paired positionally with qualifierLastNames). |
licenseNumbers | array<string> | [] | Specific NCLBGC license numbers for exact lookup (e.g., ["76235", "L.01807"]). |
zipCodes | array<string> | [] | 5-digit ZIP codes to search (e.g., ["27601", "28202"]). |
includeLikeSoundingNames | boolean | false | Enable phonetic Soundex matching on name searches (Smith → Smyth). |
maxItems | integer | Default: 0 (Prefill: 50) | Maximum total contractor records to return across all searches (0 = unlimited). Set 1000+ for bulk statewide runs. |
maxResultsPerSearch | integer | 0 | Cap on records per individual search (0 = automatic/unlimited governed by maxItems). |
scrapeDetailPage | boolean | true | Fetch each contractor's full profile (phone, address, limitation, classifications, qualifiers, dates, disciplinary actions). Set false for fast list-only mode. |
maxConcurrency | integer | 8 | Number of parallel detail requests (1–20). |
proxyConfiguration | object | Apify Proxy | Proxy configuration for per-request IP rotation. Default Apify Proxy works out of the box. |
Example 1 — 1,000+ Building contractors across Charlotte, Raleigh & Durham
{"cityPreset": ["Charlotte", "Raleigh", "Durham", "Greensboro"],"classificationType": "Building","scrapeDetailPage": true,"maxItems": 1000,"maxResultsPerSearch": 0,"maxConcurrency": 8,"proxyConfiguration": {"useApifyProxy": true}}
Example 2 — Specialty Roofing contractors (S (Roofing)) across NC metros
{"cityPreset": ["Raleigh", "Cary", "Apex", "Wake Forest", "Garner", "Holly Springs"],"classificationType": "S (Roofing)","scrapeDetailPage": true,"maxItems": 500}
Example 3 — Instant compliance verification for a batch of license numbers
{"licenseNumbers": ["76235", "1807", "54321", "81234"],"scrapeDetailPage": true}
📤 Output schema & field reference
Every record uses a consistent flat JSON structure. Below is a real active contractor record from a live run:
{"licenseNumber": "L.01807","licenseStatus": "Active","companyName": "Hodgin Construction Company","dbaName": null,"licenseType": "License","limitation": "Unlimited","classifications": ["Building","Highway"],"primaryQualifier": "Edward Anthony Kluttz","qualifierNumber": "Q.00166","qualifiers": [{"name": "Edward Anthony Kluttz","qualifierNumber": "Q.00166","classification": null,"status": "Active"},{"name": "Elizabeth Page Hodgin Kluttz","qualifierNumber": "Q.00167","classification": null,"status": "Active"}],"phone": "3362995460","streetAddress": "PO Box 7877","city": "Greensboro","state": "NC","zip": "27417","expirationDate": "2027-12-31","issueDate": "1948-04-29","disciplinaryActions": null,"profileUrl": "https://portal.nclbgc.org/Public/Search?key=Re8f6Zc5TYVXf%2fauQ7ti7g%3d%3d","scrapedAt": "2026-11-10T02:50:00.000Z"}
🪪 License Identity & Financial Tier
| Field | Type | Coverage | Description |
|---|---|---|---|
licenseNumber | string | 🟢 High (100%) | Official NCLBGC license/account number (cleaned of status suffixes). Primary de-duplication key. |
licenseStatus | string | 🟢 High (100%) | Normalized status (Active, Archived - License Not Valid, Invalid - License Not Valid, Revoked - License Not Valid). |
licenseType | string | 🟢 High (100%) | Account type label (typically License). |
limitation | string|null | 🟢 High (~99%) | Financial project-size limitation: Limited, Intermediate, or Unlimited. |
classifications | array<string>|null | 🟢 High (Active) | Array of active trade classifications held by the license (e.g., ["Building", "Highway"]). |
issueDate | string|null | 🟢 High (~98%) | Original license issue date normalized to ISO YYYY-MM-DD. |
expirationDate | string|null | 🟢 High (Active) | License expiration date in ISO YYYY-MM-DD (populated on active licenses; null on archived historical records). |
🏢 Company, Contact & Location Details
| Field | Type | Coverage | Description |
|---|---|---|---|
companyName | string | 🟢 High (100%) | Registered corporate or business name (T/A suffixes stripped cleanly). |
dbaName | string|null | 🟡 Conditional | Trade name / DBA ("Also Known As") when registered on the license. |
phone | string|null | 🟢 High (Active) | Business telephone number on file with NCLBGC (populated on ~92–100% of active licenses). |
streetAddress | string|null | 🟢 High (~99%) | Principal street or PO Box mailing address. |
city | string|null | 🟢 High (100%) | Business city name. |
state | string|null | 🟢 High (100%) | Two-letter state code (e.g., NC, SC, VA, GA). |
zip | string|null | 🟢 High (~98%) | 5- or 9-digit postal ZIP code. |
🧑💼 Qualifiers, Compliance & Metadata
| Field | Type | Coverage | Description |
|---|---|---|---|
primaryQualifier | string|null | 🟢 High (Active) | Full name of the first/primary exam qualifier on the license. |
qualifierNumber | string|null | 🟢 High (Active) | Official NCLBGC qualifier number of the primary qualifier (e.g., "Q.00166"). |
qualifiers | array<object>|null | 🟢 High (Active) | Full array of qualifiers ({ name, qualifierNumber, classification, status }). |
disciplinaryActions | array<object>|null | 🟡 Conditional | Array of public disciplinary matters ({ date, type, detail }), or null when clean. |
profileUrl | string | 🟢 High (100%) | Direct link to the contractor's NCLBGC record. |
scrapedAt | string | 🟢 High (100%) | ISO 8601 UTC timestamp of extraction. |
🔁 Pagination, scale & 1,000+ contractor extraction
The NCLBGC portal returns all matching rows for each search query in one table, and each contractor's full profile requires 3 separate detail requests. This actor scales to 1,000+ contractors through:
- Multi-city & multi-query fan-out: Select multiple cities in
cityPreset(or leave empty to iterate across all 40 built-in NC cities) and setmaxItems: 1000+ withmaxResultsPerSearch: 0. - Parallel IP-rotated detail batching: Detail fetches run in concurrent batches (
maxConcurrency: 8by default, configurable up to20) with a fresh rotating proxy IP per request so the portal's per-IP rate limit is never triggered. - Fast list-only mode (
scrapeDetailPage: false): Need 5,000+ contractor names, license numbers, and active/inactive statuses in under 60 seconds? SetscrapeDetailPage: falseto skip individual profile fetches and stream the search tables directly.
⚙️ How to use
- Open the Actor in the Apify Console.
- Select your target market: pick cities from Cities (
cityPreset), choose a Classification (classificationType), or enter company names, qualifier names, ZIPs, or license numbers. - Set your volume: use
maxItems: 50for a quick <1-minute test, or setmaxItems: 1000+ (andmaxResultsPerSearch: 0) for a large regional sweep. - Click Start and watch contractor records stream into the dataset.
- Export: download as JSON, CSV, or Excel (XLSX), or connect directly to Salesforce, HubSpot, Google Sheets, Make, Zapier, or your database via the Apify API.
API Example (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/nc-licensing-board-for-general-contractors-scraper").call(run_input={"cityPreset": ["Charlotte", "Raleigh", "Durham"],"classificationType": "Building","scrapeDetailPage": True,"maxItems": 500,"maxResultsPerSearch": 0,})for record in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{record['licenseNumber']} | {record['companyName']} | {record['licenseStatus']} | {record['limitation']} | {record['phone']}")
API Example (Node.js)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/nc-licensing-board-for-general-contractors-scraper').call({cityPreset: ['Wilmington', 'Asheville'],classificationType: 'Residential',scrapeDetailPage: true,maxItems: 300,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Collected ${items.length} NC general contractors`);
API Example (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~nc-licensing-board-for-general-contractors-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"cityPreset": ["Charlotte", "Raleigh"],"classificationType": "Building","scrapeDetailPage": true,"maxItems": 500}'
💡 Pro tips for best results
- Combine City + Classification to prioritize Active contractors: Broad city searches with
classificationType: "ALL"include historical archived licenses starting fromL.00001. Selecting a specific classification (e.g.,Building,Residential,Highway,S (Roofing)) returns a much higher concentration of currently active contractors with phones, qualifiers, and expiration dates. - Use
maxItemsfor global control: LeavemaxResultsPerSearch: 0and setmaxItemsto your desired total (e.g.,1000) so the scraper automatically pulls across your selected cities until the global target is reached. - Two-stage workflow for massive statewide audits: Run once with
scrapeDetailPage: falseto get all license numbers and statuses in seconds, filter tolicenseStatus === "Active", and pass those license numbers intolicenseNumberswithscrapeDetailPage: true.
⚠️ Honest limitations & source behavior
- Archived historical records: On retired/archived licenses from decades ago (
Archived - License Not Valid), the NCLBGC portal does not publish a current phone number, active qualifier, or expiration date. For those records,phone,qualifiers, andexpirationDateare accurately returned asnull. On Active licenses, those fields populate at 92–100%. - No email addresses: The NCLBGC public portal does not publish contractor email addresses; it provides business phone numbers, physical/mailing addresses, and named qualifiers.
❓ FAQ
Does this NCLBGC scraper require a login or API key?
No. All license data is extracted from the public NCLBGC search portal with zero credentials required.
How fast does it run?
A prefill run of 50 detailed contractor records completes in ~20–35 seconds. A list-only run (scrapeDetailPage: false) extracts hundreds of records in a few seconds.
What is the difference between Limited, Intermediate, and Unlimited limitation?
In North Carolina, a general contractor's financial limitation determines the maximum single-project contract value they are legally allowed to bid on:
- Limited: projects up to $500,000
- Intermediate: projects up to $1,000,000
- Unlimited: projects of any dollar value
Do I need residential proxies?
No. Because each request rotates a fresh IP from the default Apify Proxy pool, standard datacenter proxies work reliably and keep compute costs very low.
🔗 Related scrapers
Building a multi-state contractor and professional license pipeline? Check out our other state licensing scrapers:
- Arizona ROC Contractor License Scraper — Arizona Registrar of Contractors lookup.
- Washington L&I Contractor License Scraper — Washington State licensed contractors.
- California DCA Professional License Scraper — California Department of Consumer Affairs licenses.
- Virginia DPOR Professional License Scraper — Virginia contractors and regulated trades.
- SAM.gov Federal Contractor Entity Scraper — US federal government contractors.
📋 Changelog
v1.2 (2026-11)
- Added Global
maxItems& Unlocked 1,000+ Scaling: AddedmaxItems(with fastprefill: 50) and setmaxResultsPerSearchdefault to0so users can collect 1,000+ contractors across single or multiple cities without per-search caps. - Expanded Default NC Metro Coverage: Expanded built-in fallback cities to all 40 NC municipalities so empty-filter runs with
maxItems: 1000+can harvest 1,000+ contractors statewide. - Memory & Concurrency Optimization: Right-sized container memory to 512 MB minimum and raised default parallel detail concurrency to 8 for sub-minute prefill execution.
v1.1 (2026-10)
- Migrated from browser execution to lightweight pure-HTTP with per-request IP rotation, boosting detail field coverage (
limitation,phone,qualifiers,expirationDate) to 92–100% on active licenses and cutting compute cost by >90%.
v1.0 (2026-07)
- Initial release supporting 6 NCLBGC search modes and 30+ construction trade classifications.