QBCC Licence Search Scraper - Queensland Builders & Trades
Pricing
$1.60 / 1,000 per licensee returneds
QBCC Licence Search Scraper - Queensland Builders & Trades
Every QBCC-licensed Queensland builder and trade contractor: ABN, ACN, business address, licence classes, status, trading names, revenue category - plus optional directors, licensed-since date and insured building-work record. 111,000+ licensees. $0.0016 per licensee.
Pricing
$1.60 / 1,000 per licensee returneds
Rating
0.0
(0)
Developer
Scrapers Delight
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
QBCC Licence Search Scraper — Queensland Builders & Trades
Every licensee on the Queensland Building and Construction Commission (QBCC) licensee register, as one clean row per licensee: name, trading names, ABN, ACN, business address with suburb and postcode, every licence class with its grade, status (Active / Suspended) and condition flag, and the QBCC Maximum Revenue category (a size signal). 111,853 licensees on the register on 2026-09-23 — 82,455 of them builders or trade contractors you can hire, 101,506 with a Queensland address.
Optionally, the Actor also reads each licensee's QBCC licence search certificate (the "full history" issued under s.99 of the QBCC Act) and turns it into data: company directors and secretaries, the nominee supervisor with their own licence number, the licensed-since date of every class, the six disciplinary answers, conditions with their full text, direction orders to rectify defective work, and the licensee's record of insured residential construction work — jobs and insured value per financial year. That last table is the one no directory has: it tells you which builders are actually building homes, and how much.
Who uses it: Queensland building-supply distributors and manufacturer reps, trade and home-warranty- adjacent insurers, tradie software (job management, quoting, payments), contractor-marketing agencies, and anyone checking that a Queensland contractor is licensed for the work it is quoting.
What QBCC does not publish: a phone number or an e-mail address. Neither the open data nor the live register carries one, so no row here has them. You get the ABN/ACN, the business address on the register, and — with the certificate on — the directors' names.
Why one row per licensee matters
QBCC's open data is one row per licence × licence class × grade — 204,313 rows for 111,853 licensees on 2026-09-23; a builder holding six classes is six rows. A scraper that emits file rows bills you six times for the same builder. This Actor folds each licence number into one row with its classes as a list, and checks the fold rather than assuming it:
- name, business address, ABN, ACN, licence type and financial category must agree across a licence's rows (measured over the whole register: 0 of 111,853 licences break this); a licence that ever does is withheld and listed in the run summary, and more than 1% failing fails the run;
- a class is the (grade, class) pair — 21,701 licensees hold classes under two different grades — and the one duplicated (licence, class, grade) row in the file is collapsed;
- licence numbers are paged by key, never by offset, and a number seen twice fails the run;
- a run that reads to the end is floor-asserted against the register's own count for your filters
(
COUNT(DISTINCT licence number)on the same query); a short read fails loudly instead of shipping a quietly smaller list.
Quick start
Plumbers (20 newest licensees) — the demo input:
{ "licenceClasses": ["Plumbing and Drainage"], "maxResults": 20 }
Builders on the Gold Coast (Surfers Paradise, Southport, Robina postcodes), with directors and work record:
{ "licenceGrades": ["Builder Licence"], "postcodes": ["4217", "4215", "4226"], "includeLicenceHistory": true, "maxResults": 500 }
Every Queensland company licensed for air-conditioning, in a Maximum Revenue category of $3M+:
{ "licenceClasses": ["Air-conditioning"], "licenseeTypes": ["Company"], "queenslandOnly": true,"financialCategories": ["2", "3", "4", "5", "6", "7"], "maxResults": 2000 }
A weekly new-licensee feed (schedule it; the first run saves the baseline):
{ "onlyNewSinceLastRun": true, "stateKey": "all-qld-new", "maxResults": 2000 }
Look up specific licences:
{ "licenceNumbers": ["1000004", "658141"], "includeLicenceHistory": true }
Example output
A real row from a live run on 2026-09-23 (build 0.1.1, certificate on), unedited except the long
licenceClassHistory array shortened to its first entry:
{"licenceNumber": "15642641","licenseeName": "McFarlane Air Pty Ltd","tradingNames": ["MCFARLANE AIR"],"licenseeType": "Company","licenceStatus": "Active","abn": "52 701 661 252","acn": "701 661 252","businessAddress": "9 COLEUS CT ANNANDALE QLD 4814","street": "9 Coleus Ct","suburb": "ANNANDALE","state": "QLD","postcode": "4814","isQueenslandAddress": true,"licenceClassNames": ["Mechanical Services - Air-conditioning and Refrigeration (Limited Design)"],"licenceGrades": ["Trade Contractor Licence"],"licenceClasses": [{ "className": "Mechanical Services - Air-conditioning and Refrigeration (Limited Design)", "classCode": "MSAL","grade": "Trade Contractor Licence", "status": "Active", "condition": false }],"classCount": 1,"isBuilder": false,"isTradeContractor": true,"hasSuspendedClass": false,"hasLicenceCondition": false,"financialCategoryCode": "SCT1","financialCategory": "Self Certification - Trade","maximumRevenueBand": "Self-Certification 1 - up to $200,000","maximumRevenueCategory": "Self-Certification 1 - up to $200,000","givenNames": null,"surname": null,"registerAddress": "9 Coleus Ct, ANNANDALE, QLD 4814","addressShownOnRegister": true,"registerDetailStatus": "ok","historyStatus": "ok","firstLicensedDate": "2026-09-15","keyPersonnel": [{ "startDate": "2026-08-23", "name": "McFarlane, Christopher", "position": "Director", "address": "Townsville QLD 4813" }],"nominees": [{ "startDate": "2026-09-15", "endDate": null, "name": "McFarlane, Christopher", "licenceNumber": "15187420","address": "Townsville QLD 4813", "current": true }],"disciplinary": {"directionsToRectify": false, "disciplinaryAction": false, "convictions": false,"infringementNotices": false, "demeritPoints": false, "exclusionsDisqualificationsOrBan": false},"hasDisciplinaryRecord": false,"directionOrdersTotal": 0,"insuranceClaimsRecorded": false,"conditions": [],"residentialWork": [],"residentialJobsTotal": 0,"residentialJobsLast3FinancialYears": 0,"residentialValueLast3FinancialYearsAud": 0,"latestResidentialWorkYear": null,"licenceClassHistory": [{ "className": "Mechanical Services - Air-conditioning and Refrigeration (Limited Design)", "commencementDate": "2026-09-15","recordsShown": true, "periods": [ { "dateFrom": "2026-09-15", "dateTo": null, "type": "Trade Contractor Licence","status": "Active", "reason": "New Application", "current": true } ], "conditions": [] }],"licenceRecordId": "0cEOc000000F61tMAC","historyPdfUrl": "https://my.qbcc.qld.gov.au/myQBCC/apex/QBCCLicenseeDocument?id=0cEOc000000F61tMAC","registerSearchUrl": "https://my.qbcc.qld.gov.au/myQBCC/s/qbcc-licensee-register","source": "QBCC licensee register (open data, data.qld.gov.au, CC-BY 4.0) + my.qbcc.qld.gov.au","openDataSnapshot": "23/09/2026","scrapedAt": "2026-09-23T07:07:54.004Z"}
An established builder's work record looks like this (licence 658141, from the same certificate parser):
"residentialWork": [{ "financialYear": "2026/2027", "jobs": 1, "insuredValueAud": 35000 },{ "financialYear": "2025/2026", "jobs": 12, "insuredValueAud": 5607047 },{ "financialYear": "2024/2025", "jobs": 10, "insuredValueAud": 4410640 }],"residentialJobsLast3FinancialYears": 23
Output fields
Identity and contact (always):
| Field | What it is |
|---|---|
licenceNumber | QBCC licence number (the register's own id; one row per number) |
licenseeName | Name as published — company name, or the individual's full name |
tradingNames | Trading names on the live register (list) |
licenseeType | Company or Individual |
abn, acn | ABN and ACN exactly as QBCC publishes them (52 701 661 252) |
businessAddress | The business address in QBCC's open data, as published |
street, suburb | Split from the live register's comma-separated address (never guessed from the open-data string) |
state, postcode, isQueenslandAddress | Read from the end of the address (QLD 4109, Queensland 4019) |
registerAddress, addressShownOnRegister | The live register's formatted address; if QBCC marks an address hidden, it is not shipped |
givenNames, surname | For individuals, from the live register |
Licence (always): licenceClassNames, licenceGrades, licenceClasses (each: className, classCode,
grade, status, condition), classCount, isBuilder, isTradeContractor, licenceStatus (Active,
Partly active, Suspended), hasSuspendedClass, hasLicenceCondition, financialCategoryCode,
financialCategory, maximumRevenueBand (the dollar band for the code), maximumRevenueCategory (the live
register's label).
Certificate (with includeLicenceHistory): firstLicensedDate, keyPersonnel (directors / secretaries:
start date, name, position, suburb), nominees (start/end date, name, licence number, suburb), disciplinary
(six YES/NO answers), hasDisciplinaryRecord, directionOrdersTotal, insuranceClaimsRecorded, conditions
(class, dates, type, full text), residentialWork (financial year, jobs, insured value), residentialJobsTotal,
residentialJobsLast3FinancialYears, residentialValueLast3FinancialYearsAud, latestResidentialWorkYear,
licenceClassHistory (per class: commencement date and every status period in the last 10 years).
Provenance: licenceRecordId, historyPdfUrl (the certificate itself), registerSearchUrl,
registerDetailStatus, historyStatus, source, openDataSnapshot, scrapedAt.
Measured field fill
Register-wide, from SQL over the whole open-data register (111,853 licensees, 2026-09-23): name 100%, business address 99.99% (one blank, one placeholder-only), ABN 53.0% (59,295), ACN 24.8% (27,686 — effectively every company), financial category 100%, Queensland address 90.7%.
From live runs on build 0.1.1 (two frames, because the newest and the oldest licensees differ):
| Field | Newest 1,000 licensees (default run) | Newest 200, certificate on | Oldest-licence sample, 71 certificates |
|---|---|---|---|
| licence status | 100% | 100% | 100% |
| suburb | 100% | 100% | — |
| ABN | 48.1% | 41.5% | — |
| trading names | 5.6% | 5.5% | 9.9% |
| licensed-since date | — | 100% | 100% |
| directors (of companies) | — | 38 of 39 companies | 18 of 18 companies |
| disciplinary answers | — | 100% | 100% |
| residential work record | — | 0.5% | 76% |
New licensees have not built anything yet, so the work record is almost empty in the newest frame and present for three-quarters of established licensees. Quote it as a range.
Input
| Input | Default | What it does |
|---|---|---|
licenceClasses | all | Class names, any-part match ("Plumbing" also matches Mechanical Services - Plumbing) |
licenceGrades | all | Builder Licence, Trade Contractor Licence, Nominee/Site Supervisor, Building Designer, occupational |
licenseeTypes | both | Company / Individual |
postcodes | anywhere | 4-digit postcodes, matched at the end of the business address |
suburbs | anywhere | Whole-word match in the address (a street of the same name also matches — prefer postcodes) |
queenslandOnly | false | Drop the ~9% of licensees with an interstate address |
financialCategories | all | Maximum Revenue category codes (SCT1, SC2, 1–7, EMR…) |
nameContains | — | Case-insensitive name filter |
withAbnOnly | false | Only licensees with a published ABN |
licenceNumbers | — | Lookup mode |
sortOrder | newest | Licence numbers rise over time; newest = most recently licensed first |
includeRegisterDetail | true | Live-register lookup: status, trading names, suburb, condition flags |
includeSuspended | false | Deliver licensees whose every class is suspended |
includeLicenceHistory | false | Parse the s.99 licence search certificate |
onlyNewSinceLastRun, stateKey | false | Monitor mode: only licence numbers not seen at your last run |
maxResults | 100 | Rows to deliver and be charged for |
proxyConfiguration | direct | Not needed; see below |
Pricing
$0.0016 per licensee delivered. No start fee. Filters, suspended licensees you did not ask for, and
duplicates are never delivered and never charged. The live-register lookup and the licence certificate cost
nothing extra. A default run ({}: 100 newest licensees) costs at most $0.16; the demo input costs $0.032.
How it works (and why it is reliable)
- QBCC open data — the Licensed Contractors Register on data.qld.gov.au. The 34.8 MB CSV sits behind an AWS WAF challenge, but the portal's datastore API is not, so each page is a server-side SQL query: filters run at the source and a 20-row run moves a few KB instead of 35 MB. Pages are keyset-paged on licence number and asserted under the portal's 32,000-row response cap. Measured on build 0.1.2: a walk of the whole register read 111,853 of 111,853 licence numbers (204,313 of 204,313 source rows) in 56 queries and 88 seconds, with zero duplicates.
- The live register (my.qbcc.qld.gov.au) — the same guest calls the register page makes, two per licensee: search by licence number (it is a prefix match, so the exact number is selected), then the licence detail. The page's framework id is read at run start and re-read if Salesforce rotates it mid-run.
- The licence certificate — the PDF behind "Licensee's full history", parsed from positioned text: each table's header gives the column positions, so wrapped cells (a director's name on two lines) are rejoined to the right column. Parsed cleanly on 71 of 71 old-frame and 200 of 200 newest-frame certificates.
Every non-200 or non-JSON answer is a transport failure, retried — never read as "no more data". If the live register fails for most licensees the run keeps delivering open-data rows and says so; nothing is charged twice.
Proxy: all three sources answered Apify's servers directly on 2026-09-23, so the default is no proxy. If you set one that cannot start, the run falls back to direct.
Limits of the data
- No phone, no e-mail. QBCC publishes neither. Use the ABN to join other sources.
- Cancelled licences are not in the open data. Suspended ones are (with no status column there) — the live
register lookup supplies the status, and suspended licensees are skipped unless you ask for them. With
includeRegisterDetail: falsestatus is unknown and suspended licensees can appear. - Suburb comes only from the live register; with register detail off, you get the full address plus state and postcode but no separate suburb.
- Directors and nominees carry a suburb, never a street — that is all the certificate prints.
- The work record counts residential work notified for home-warranty insurance only; commercial work and work under the insurance threshold are not in it. QBCC shows the last ~10 years.
- The open data is QBCC's snapshot (dated in
openDataSnapshot); the live register is real time, so a licence cancelled today can still be in today's open data (registerDetailStatus: "not-on-live-register"). - A licensee may also hold a separate individual or company licence — QBCC treats them as different licensees, and so does this Actor.
Source
QBCC Licensed Contractors Register (data.qld.gov.au, dataset qbcc-licensed-contractors-register) and the
QBCC licensee register at my.qbcc.qld.gov.au. Source: Queensland Building and Construction Commission.
Related
Other contractor-licence registers from the same publisher: RBQ Québec, ESA Ontario, HCRA Ontario, and NICEIC (UK).