← Use cases

Use case

Export Every Active Oklahoma Roofing Contractor

Every In Good Standing roofer on Oklahoma's CIB registry, statewide: company, registration number, phone, address and insurer.

Suppose you’re an insurance agent in Oklahoma City who writes general liability and workers’ comp for contractors, and you want a book of roofers. Oklahoma’s Construction Industries Board keeps a roofing contractor registry, and each registration carries the insurer and the policy expiry date the roofer filed. That makes the registry a renewal calendar: whoever’s liability policy lapses in the next 90 days is the call to make this week.

The registry will tell you all of that, one roofer at a time. You want all 1,924 of them in good standing, sorted by expiry.

The manual way, and what it costs

The public search form on the source portal
the source portal — the official search. One record at a time.

CIB’s roofing search at verify.cib.hbesystems.com is free and needs no account. Type a company name and you get its registration and status on screen. If you’re checking the three roofers a client named, use it and stop reading.

For a book of business it doesn’t scale. The results come 10 to a page with no export, so the 1,924 active registrations on 2026-10-14 are about 190 pages, each row retyped into a sheet before you can sort a single date. Expired, pending and not-in-good-standing records are mixed into the same registry (6,069 records in all), and some registration numbers appear on two different firms, so a hand-built list double-counts unless you notice. And the list is stale the next time CIB processes a renewal.

The faster way

Oklahoma Roofing Contractor Directory & Leads (CIB) does the same search once and hands back every row at once.

{
  "statuses": [
    "In Good Standing"
  ],
  "maxResults": 5000
}

In Good Standing keeps the 1,924 current registrations and leaves out the 3,129 that expired for non-renewal; add that status later if lapsed roofers become a campaign of their own. No cities filter, because a renewal calendar is statewide and CIB publishes no county to narrow by anyway. maxResults of 5,000 sits well above the 1,924 active rows, so the cap never cuts the list short; at $0.002 a row the run costs $3.85.

What comes back

{
  "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"
}
FieldExample valueMeaning
business_nameS & CM, LLCRegistered company name
trade_nameMCROOF.USTrade name / DBA the company filed (on 398 of 1,924 active rows)
license_number80000002CIB roofing registration number (e.g. 80000002). Not unique on its own: some numbers appear on two firms’ records
registration_id47591CIB’s own record id; unique per row and the dedupe key
license_typeRoofing Contractor Registration’Roofing Contractor Registration’, or ‘Roofing Contractor Application’ for pending ones
statusIn Good StandingIn Good Standing, Not In Good Standing, Expired, Expired - for non-renewal, or Pending

The fields that close the loop are further down the row: insurance_company with insurance_expiration_date, and workers_comp_company with workers_comp_expiration_date. In the sample, S & CM’s liability policy with Western World ends 2027-06-26 and its comp with Travelers on 2027-07-01, so it belongs on next summer’s list. workers_comp_exempt flags the registrants who filed an exemption instead of a policy, which is a different conversation. phone is on all 1,924 active rows, so every name on the calendar has a number next to it.

What you’d do with it

Export the dataset to CSV, sort on insurance_expiration_date, and cut it into monthly call lists. Import into your CRM keyed on registration_id, not license_number: CIB’s own id is unique per record, while 18 active registration numbers were shared by two companies on 2026-10-14. Run it again next quarter and compare ids to see who registered, who lapsed, and whose insurer or expiry date changed since the last pull.

Worth knowing

This is the CIB roofing registry and nothing else. Oklahoma licenses electrical, plumbing and mechanical contractors separately, and none of them are in it. There is no county and no email in the source, so county is always null and there’s no address to send a quote to except a postal one. That address is the business address as filed, and 246 of the 1,924 active rows give a PO box. Not every row is local either: 1,565 of the active registrants have an Oklahoma address, and the rest are out-of-state firms registered to work in Oklahoma. City filtering is exact, so OKC does not match Oklahoma City. And the insurer on the row is what the roofer filed with CIB, not a live check with the carrier.


Run it yourself: How to run Oklahoma Roofing Contractor Directory & Leads (CIB) walks the whole thing step by step.

When you only want one metro: the guide’s example input pulls Tulsa and Broken Arrow alone, 240 registrations for about $0.48 on 2026-10-14. Same actor, same page, with cities filled in.

When your territory crosses into Illinois: the Illinois Roofing Contractor Directory & Leads Scraper (IDFPR) exports IDFPR’s roofing licences by county, with city and ZIP but no phone.

Last updated 2026-10-14