Oklahoma Roofing Contractor Directory & Leads (CIB) avatar

Oklahoma Roofing Contractor Directory & Leads (CIB)

Pricing

$0.002 / roofing contractor record

Go to Apify Store
Oklahoma Roofing Contractor Directory & Leads (CIB)

Oklahoma Roofing Contractor Directory & Leads (CIB)

Export every Oklahoma CIB-registered roofing contractor statewide: company, registration #, status, phone, address, insurance and workers' comp carrier.

Pricing

$0.002 / roofing contractor record

Rating

0.0

(0)

Developer

ScrapeBench

ScrapeBench

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

12 days ago

Last modified

Categories

Share

Pain points

  • The CIB verify site shows 10 registrations per page and has no export button, so a statewide list of registered roofers (1,924 active on 2026-10-14) is about 190 pages of copying.
  • The registry mixes active registrations with expired, pending and not-in-good-standing ones, and some registration numbers appear on more than one firm's record, so a raw pull double-counts.
  • Roofing suppliers, insurers and storm-season sales teams need the phone number and address next to the registration, not just a yes/no verification.

What we solve

  • Exports the whole Oklahoma Construction Industries Board roofing registry in one run, statewide or filtered by city and status.
  • Returns company name, DBA, registration number, status, commercial endorsement, renewal date, phone, business address and the person named on the registration.
  • Adds the general-liability insurer and workers' comp carrier (or exemption) the registrant filed, with their expiration dates.
  • Keeps only In Good Standing registrations by default and deduplicates on CIB's own record id.

Summary

Get a ready-to-call list of Oklahoma roofing contractors straight from the Construction Industries Board (CIB) roofing registry. One run exports every registration in good standing statewide (1,924 on 2026-10-14) or just the cities you name, with phone number and business address on every row, plus registration number, status, renewal date, DBA, commercial endorsement and the insurer and workers' comp carrier on file. Choose other statuses (expired, pending, not in good standing) or 'all' when you want lapsed registrants too. The source publishes no county and no email address.

Who it's for

  • Roofing material suppliers and distributors building an Oklahoma dealer prospect list
  • Insurance agents writing general-liability and workers' comp for roofing contractors
  • Storm-restoration and roofing software sales teams covering Oklahoma metros
  • General contractors and property managers sourcing registered roofing subs
  • Compliance teams checking a roofer's CIB status and insurance dates in bulk

How to use

Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:

{
"statuses": [
"In Good Standing"
],
"cities": [
"Tulsa",
"Broken Arrow"
],
"maxResults": 500
}

See Inputs below for every available field.

What you get

One row per record:

FieldDescription
business_nameRegistered company name
trade_nameTrade name / DBA the company filed (on 398 of 1,924 active rows)
license_numberCIB roofing registration number (e.g. 80000002). Not unique on its own: some numbers appear on two firms' records
registration_idCIB's own record id; unique per row and the dedupe key
license_type'Roofing Contractor Registration', or 'Roofing Contractor Application' for pending ones
statusIn Good Standing, Not In Good Standing, Expired, Expired - for non-renewal, or Pending
commercial_endorsementTrue when the registration carries CIB's commercial roofing endorsement
expiration_dateRenewal due date (YYYY-MM-DD, Oklahoma time)
processed_dateDate CIB last processed the registration
phoneBusiness phone, formatted (XXX) XXX-XXXX
addressBusiness address line as filed (a PO box on about 13% of active rows)
cityBusiness city
address_stateState of the business address (out-of-state registrants keep their own state)
zip_codeZIP code
faxFax number when filed
person_namePerson named on the registration
company_typeLLC, Corporation, Sole Proprietorship, Partnership or LLP
state_of_formationState the company was formed in
insurance_companyGeneral-liability insurer on file
insurance_expiration_dateLiability policy expiration date
workers_comp_companyWorkers' comp carrier on file
workers_comp_expiration_dateWorkers' comp policy expiration date
workers_comp_exemptTrue when the registrant filed a workers' comp exemption
countyAlways null: CIB does not publish a county
source_urlThe CIB public roofing search page

Sample:

{
"state": "OK",
"registration_id": 47591,
"license_number": "80000002",
"business_name": "S & CM, LLC",
"trade_name": "MCROOF.US",
"license_type": "Roofing Contractor Registration",
"status": "In Good Standing",
"commercial_endorsement": true,
"expiration_date": "2027-11-30",
"processed_date": "2026-09-29",
"phone": "(405) 877-7663",
"address": "722 ENTERPRISE DR #150",
"city": "EDMOND",
"address_state": "OK",
"zip_code": "73013",
"fax": null,
"person_name": "SCOTT A MCCOLLUM,SR",
"company_type": "LLC",
"state_of_formation": "OK",
"insurance_company": "WESTERN WORLD IN CO",
"insurance_expiration_date": "2027-06-26",
"workers_comp_company": "TRAVELERS CAS & SURETY CO",
"workers_comp_expiration_date": "2027-07-01",
"workers_comp_exempt": false,
"county": null,
"matched_by": "statewide_export",
"source_url": "https://verify.cib.hbesystems.com/roofing/search"
}

Inputs

FieldRequiredTypeDefaultDescription
statusesnoarray["In Good Standing"]Which CIB statuses to export: 'In Good Standing', 'Not In Good Standing', 'Expired', 'Expired - for non-renewal', 'Pending', or 'all'. Case and punctuation do not matter. Left empty, only 'In Good Standing' registrations are returned. A value that is not a CIB status is dropped (never widened to every status).
statusnostring—One status, same values as 'Registration statuses'. Combined with that list if you fill both.
citiesnoarray[]Only registrations whose business address is in one of these cities (e.g. 'Oklahoma City', 'Tulsa', 'Edmond'). Exact city name, case-insensitive. Left empty, the export is statewide. Registrants based out of state keep their own city.
citynostring—One city, same as 'Cities'. Combined with that list if you fill both.
maxResultsnointeger500Cap on rows returned for the whole run. The registry held 1,924 In Good Standing registrations and 6,069 in all statuses on 2026-10-14, so 2,000 covers every active roofer and 10,000 covers everything. Default 500.
proxyConfigurationnoobject{"useApifyProxy": false}Off by default: the CIB registry is a public, keyless JSON service. Turn a proxy on only if a run returns a 'blocked' notice saying the source did not answer.

Pricing (Pay Per Event)

You pay per result (dataset-item) — no charge for empty runs. Example: 1924 roofing contractor records at $0.002/result ≈ $3.85.

Example: the full In Good Standing registry on 2026-10-14 (1,924 rows) at $0.002 per record. The default maxResults of 500 costs $1.00. Notice rows (no match, source unavailable, budget reached) are free. Apify platform usage is billed separately per your plan.

Use cases

  • Supplier prospecting: a shingle distributor exports every active registrant in Tulsa and Broken Arrow before a branch launch and loads the phone numbers into a dialer.
  • Insurance renewals: an agent pulls the statewide list and sorts by liability or workers' comp expiration date to time outreach.
  • Storm response: a restoration SaaS team pulls all Oklahoma City-area roofers after a hail event and calls the commercial-endorsed ones first.
  • Sub vetting: a general contractor confirms a roofer is In Good Standing with insurance on file before awarding a job.

Why this actor

  • Phone number and business address on every row, straight from the state's registry (1,924 of 1,924 active rows on 2026-10-14).
  • The whole registry in one ~2 second fetch: statewide or by city, any status, up to 100,000 rows per run.
  • Deduplicated on CIB's own record id, so two firms sharing a registration number are both kept and nothing is counted twice.

Limitations & updates

Covers the CIB roofing contractor registry only; Oklahoma licenses other trades (electrical, plumbing, mechanical) separately and they are not included. No county and no email in the source. The address is the business address as filed, and about 13% of active rows give a PO box (246 of 1,924 on 2026-10-14). City matching is exact after ignoring case and punctuation, so 'OKC' does not match 'Oklahoma City'. Data is read live on every run.

FAQ

Where does the data come from?

The Oklahoma Construction Industries Board's public roofing registry search at verify.cib.hbesystems.com. The actor reads the same public JSON that page uses; no login or key is involved.

How many records are there?

On 2026-10-14 the registry held 6,069 roofing records: 1,924 In Good Standing, 3,129 Expired - for non-renewal, 377 Expired, 332 Not In Good Standing and 307 Pending applications. 1,565 of the 1,924 active registrants have an Oklahoma address; the rest are out-of-state firms registered to work in Oklahoma.

Can I filter by county or get email addresses?

No. CIB publishes neither a county nor an email for roofing registrants. Filter by city instead; the county field is always null.

How am I charged?

$0.002 per registration returned. The full active registry is about $3.85. Rows that only explain a problem (no match, source down, budget reached) are free.

How current is the data?

Each run reads the live registry, so it is as current as CIB's own search page.

Why do some registration numbers repeat?

CIB has reused numbers across firms: on 2026-10-14, 228 numbers appeared on more than one record, 221 of them under different companies (18 among active registrations, all different companies). Every record is kept, keyed on CIB's unique record id.

Which actor to choose

Part of the contractor data suite — pick the one that fits your goal:

  • Illinois Roofing Contractor Directory & Leads Scraper (IDFPR) — You want the same roofing contractor list for Illinois, by county.

Guides & use cases

Written up on scrapebench.dev — the bench that runs and verifies this actor against the live source every night:

More actors, coverage and nightly verification results: scrapebench.dev

Works with AI assistants (MCP)

Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the MCP tab on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.

Then just ask:

"List the roofing contractors in good standing in Tulsa and Broken Arrow, Oklahoma, with their phone numbers."

That pulled 240 registrations on 2026-10-14 (about $0.48); leave the cities out for the whole state. Runs started this way bill exactly like any other run.