Singapore BCA Registered Contractors Scraper (CRS Directory)
Pricing
from $9.23 / 1,000 results
Singapore BCA Registered Contractors Scraper (CRS Directory)
Scrape the Singapore BCA CRS registered contractors directory with no API key. Get company name, UEN, address, postal code, phone, fax, workhead, grade, tendering limit, registration expiry and the full registration profile. Build construction leads and KYB data. Export to JSON, CSV or Excel.
Pricing
from $9.23 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Singapore BCA Registered Contractors Scraper (CRS Directory)
Scrape the Singapore BCA (Building and Construction Authority) registered contractors directory, the official CRS (Contractors Registration System) register, with no API key. Turn the BCA contractor directory into clean construction leads and KYB data: company name, UEN, address, contacts, every workhead and grade, tendering limit, and registration expiry.
Here is one real result, with every field the actor returns:
{"companyName": "BHCC CONSTRUCTION PTE. LTD.","uen": "200311975W","workhead": "CW01","workheadDescription": "General Building","grade": "A1","tenderingLimit": "Unlimited","registrationExpiry": "01/07/2028","registrationStatus": "Active","registrations": [{ "workhead": "CR13", "workheadDescription": "Waterproofing Installation", "grade": "L2", "tenderingLimit": "S$1.6 million", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "CW01", "workheadDescription": "General Building", "grade": "A1", "tenderingLimit": "Unlimited", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "CW02", "workheadDescription": "Civil Engineering", "grade": "B1", "tenderingLimit": "S$50 million", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "ME01", "workheadDescription": "Air-Conditioning, Refrigeration & Ventilation Works", "grade": "L4", "tenderingLimit": "S$8 million", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "ME05", "workheadDescription": "Electrical Engineering", "grade": "L5", "tenderingLimit": "S$16 million", "expiry": "01/07/2028", "status": "Active" }],"builderLicences": [{ "code": "GB1", "description": "General Builder Class 1", "expiry": "16/06/2027", "status": "Active" }],"address": "1 TAMPINES NORTH DRIVE 3 #08-01 BHCC SPACE SINGAPORE 528499","postalCode": "528499","phone": "66594666","fax": "66594555","companyUrl": "https://www.bca.gov.sg/eBACS/BCA_DIRECTORY/Company/CompanyDetails?uenNo=200311975W","licenceType": "Registered Contractor","source": "Singapore BCA Contractors Directory","observedAt": "2026-08-15T10:02:38.180Z"}
The most complete Singapore BCA registered contractors scraper available. It returns every field the BCA public contractor directory exposes for each company, plus the company's full registration profile (every workhead, grade, tendering limit and expiry it holds) and any Licensed Builder licences, and gives you five filters to target exactly the contractors you need. No API key, no account on BCA, no browser extension.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor reads the Singapore Building and Construction Authority (BCA) public directory of registered contractors (the CRS, or Contractors Registration System), discovers the live list of workheads and grades, paginates through every matching company, and writes one normalized record per company and workhead to the run's dataset. Company name, UEN (Unique Entity Number), address, postal code, phone, fax, workhead, grade and tendering limit come straight from the listing. When you enable withDetails, the actor opens each company page to add the registration expiry, an active or expired status, the company's complete registration profile (every workhead, grade, tendering limit and expiry it holds), and any Licensed Builder licences.
The workhead and grade catalogue is discovered live from the directory, so new workheads are picked up automatically. Data covers Singapore registered contractors only.
Use cases
- Construction lead generation in Singapore. Build a targeted list of contractors by trade (workhead) and capacity (grade), with phone, fax and address ready for outreach.
- KYB and supplier due diligence. Verify a firm's UEN, registration status, grades and expiry dates before onboarding a subcontractor or supplier.
- Tender and procurement screening. Filter contractors by tendering limit to find firms eligible to bid on a project of a given contract value.
- Market and competitor mapping. Export whole workheads (for example every A1 General Building contractor) to size a market or track competitors.
- UEN lookup and enrichment. Resolve a company name to its UEN, address and BCA registration profile.
How this compares
| Capability | This actor | Other BCA / SG contractor scrapers |
|---|---|---|
| No API key or BCA account | Yes | Varies |
| Filter by workhead (trade) | Yes | Usually no (dump only) |
| Filter by grade | Yes | No |
| Company name search | Yes | No |
| UEN per record | Yes | Sometimes |
| Phone and fax | Yes | Sometimes |
| Full multi-workhead profile per company | Yes | Rare |
| Tendering limit per grade | Yes | No |
| Licensed Builder licences | Yes | Separate actor |
| Active / expired status | Yes | No |
| Pay per result, no charge on failure | Yes | Varies |
We accept every input a directory-dump scraper accepts (that is, none required) and return every field they return, plus workhead and grade filters, a name search, the full registration profile, per-grade tendering limits, builder licences and status.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 5 General Building (CW01) grade A1 contractors with their full registration profile.
{"workheads": ["CW01"],"grades": ["A1"],"withDetails": true,"maxContractors": 5}
Leave workheads empty to scrape every registered-contractor workhead, and leave grades empty to include every grade for each workhead. Every input field is optional; with an empty input the actor collects every registered-contractor workhead and grade.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxContractors | integer | no | 10 | Maximum number of contractor records to collect. Leave high to pull everything for the selected workheads and grades. |
workheads | string[] | no | ["CW01"] | Workhead codes to collect, for example CW01 (General Building), CW02 (Civil Engineering), ME05 (Electrical Engineering). Leave empty to scrape every registered-contractor workhead (CW, CR, ME, RW, TR). |
grades | string[] | no | (all) | Grades to keep, for example A1, A2, B1, B2, C1, C2, C3 for construction workheads, or L1 to L6 for construction-related and M&E workheads. Leave empty to include every grade available for each selected workhead. |
withDetails | boolean | no | false | Open each company page to add the registration expiry date, active or expired status, the full registration profile (with per-grade tendering limits) and any Licensed Builder licences. Slower, and billed as a details add-on per enriched record. Paid add-on: skipped on free Apify plans. Contact fields, workhead, grade and tendering limit are collected without it. |
nameQuery | string | no | (empty) | Only return contractors whose company name contains this text (case-insensitive), for example engineering or a specific firm name. |
proxyConfiguration | object | no | (none) | Standard Apify proxy configuration. Optional; enable Apify Residential proxy (country SG) if results come back empty. |
Filters combine with logical AND. If you pass no filters, the actor collects every registered-contractor workhead and grade in the directory.
Output reference
One dataset item per company and workhead. Types: string, object[], or null when the source value is absent (or when withDetails is off for the enrichment fields).
| Field | Type | Description |
|---|---|---|
companyName | string | Registered company name. |
uen | string | Unique Entity Number (UEN) of the company. |
workhead | string | Workhead code the company is listed under for this record, for example CW01. |
workheadDescription | string | Human-readable workhead title, for example General Building. |
grade | string | Grade held for this workhead, for example A1. null for single-grade workheads. |
tenderingLimit | string | BCA CRS public-sector tendering limit for this grade, for example Unlimited, S$50 million or S$0.8 million (BCA published schedule, validity period through 30 Jun 2027). null for single-grade or ungraded workheads. |
registrationExpiry | string | Registration expiry date for this workhead (DD/MM/YYYY). Populated only when withDetails is enabled, otherwise null. |
registrationStatus | string | Active or Expired, derived from registrationExpiry. null when withDetails is off. |
registrations | object[] | The company's complete registration profile: every workhead, description, grade, tendering limit, expiry and status it holds. null when withDetails is off. |
builderLicences | object[] | Any Licensed Builder licences the company holds (code, description, expiry, status). null when withDetails is off or none are held. |
address | string | Full registered address including postal code. |
postalCode | string | Singapore postal code parsed from the address. |
phone | string | Contact phone number. |
fax | string | Contact fax number. |
companyUrl | string | Direct link to the company's BCA directory profile page. |
licenceType | string | Registration type. Always Registered Contractor for this actor. |
source | string | Data source label. Always Singapore BCA Contractors Directory. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | Present only on a failed run: a single item with a populated error field is written instead of results. |
Example output record
Real record from a live run (input {"workheads":["CW01"],"grades":["A1"],"withDetails":true,"maxContractors":5}):
{"companyName": "BHCC CONSTRUCTION PTE. LTD.","uen": "200311975W","workhead": "CW01","workheadDescription": "General Building","grade": "A1","tenderingLimit": "Unlimited","registrationExpiry": "01/07/2028","registrationStatus": "Active","registrations": [{ "workhead": "CR13", "workheadDescription": "Waterproofing Installation", "grade": "L2", "tenderingLimit": "S$1.6 million", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "CW01", "workheadDescription": "General Building", "grade": "A1", "tenderingLimit": "Unlimited", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "CW02", "workheadDescription": "Civil Engineering", "grade": "B1", "tenderingLimit": "S$50 million", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "ME01", "workheadDescription": "Air-Conditioning, Refrigeration & Ventilation Works", "grade": "L4", "tenderingLimit": "S$8 million", "expiry": "01/07/2028", "status": "Active" },{ "workhead": "ME05", "workheadDescription": "Electrical Engineering", "grade": "L5", "tenderingLimit": "S$16 million", "expiry": "01/07/2028", "status": "Active" }],"builderLicences": [{ "code": "GB1", "description": "General Builder Class 1", "expiry": "16/06/2027", "status": "Active" }],"address": "1 TAMPINES NORTH DRIVE 3 #08-01 BHCC SPACE SINGAPORE 528499","postalCode": "528499","phone": "66594666","fax": "66594555","companyUrl": "https://www.bca.gov.sg/eBACS/BCA_DIRECTORY/Company/CompanyDetails?uenNo=200311975W","licenceType": "Registered Contractor","source": "Singapore BCA Contractors Directory","observedAt": "2026-08-15T10:02:38.180Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-bca-contractors-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"workheads":["CW01"],"grades":["A1"],"withDetails":true,"maxContractors":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-bca-contractors-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"workheads":["ME05"],"maxContractors":100}'
Apify CLI:
apify call scrapers_lat/singapore-bca-contractors-scraper \--input '{"workheads":["CW01"],"withDetails":true}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per record returned (
resultevent). See the pricing tab for the current per-result price. - Optional details add-on. When
withDetailsis enabled, each record that receives company-profile enrichment (registrations or builder licences) is billed one additionaldetailsevent. Listing-only records are not charged the add-on. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxContractors.
FAQ and troubleshooting
A run returned 0 records. Why?
The workhead or grade combination matched nothing, or the directory was temporarily unavailable. Remove grades to include every grade, check the workhead code, or enable proxyConfiguration with Apify Residential proxy (country SG). Zero-result runs are not charged.
How do I get the registration expiry and full profile?
Set withDetails to true. The actor then opens each company page and fills registrationExpiry, registrationStatus, registrations, and builderLicences.
What is a workhead?
A BCA registration category, for example CW01 (General Building) or ME05 (Electrical Engineering). Companies hold one or more workheads, each at a specific grade.
What is the tendering limit?
The maximum value of a public-sector contract a firm may tender for at that grade, from BCA's published CRS tendering-limit schedule (for example grade A1 is Unlimited, B1 is S$50 million, C3 is S$0.8 million). It is included for every graded workhead, even without withDetails.
Do I need an API key or a BCA account? No. The actor reads the public BCA contractor directory directly. There is no API key, login, or BCA account to set up.
Can I look up a company by UEN or name?
Every record includes the company UEN, and nameQuery lets you filter by company name. To resolve a specific firm, search its name and read the UEN, address and registration profile from the result.
Why is registrationExpiry null?
You ran without withDetails. Contact and listing fields are always returned; the expiry and profile fields require the company-page fetch enabled by withDetails.
Can I search for one firm?
Yes. Use nameQuery with part of the company name (case-insensitive) to keep only matching contractors.
Is this an official BCA tool? No. This actor is independent and has no affiliation with the Building and Construction Authority. It reads only data that is publicly available through the BCA contractor directory.
Related scrapers
- Singapore BOA Registered Architects Scraper: Board of Architects registered architects and firms.
- Singapore PEB Professional Engineers Scraper: registered professional engineers.
- Singapore CEA Estate Agents Scraper: licensed estate agents and salespersons.
- Singapore ACRA Entities Scraper: registered companies and businesses.
- Singapore GeBIZ Government Contracts Scraper: public sector tenders and awards.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the Building and Construction Authority (BCA). Accesses only publicly available BCA contractor directory data.
