Singapore BCA Registered Contractors Scraper
Pricing
Pay per event
Singapore BCA Registered Contractors Scraper
Export registered Singapore BCA contractors from data.gov.sg by workhead, grade, UEN, expiry, address, postal code, and phone.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Export registered Singapore Building and Construction Authority (BCA) contractors from the official data.gov.sg dataset. The actor returns one row per company, workhead, and grade registration, including UEN, expiry date, address, postal code, phone number, and source metadata.
Use it when you need a repeatable, API-friendly contractor list for vendor sourcing, compliance checks, procurement enrichment, or market research in Singapore's construction sector.
What does Singapore BCA Registered Contractors Scraper do?
This actor reads the public Listing of Registered Contractors dataset from data.gov.sg and saves normalized contractor records to an Apify dataset.
It supports:
- ๐๏ธ BCA workhead filtering such as
CR06,CW01,ME01, orFM02 - ๐ Grade filtering such as
L1,L2,C1, orA1 - ๐งพ UEN/company registration lookups
- ๐ข Company name search
- ๐ Expiry date filtering
- ๐ Clean address assembly into
fullAddress - ๐ Pagination via offset for larger exports
Who is it for?
Procurement and vendor sourcing teams
Find contractors registered for a specific BCA workhead and grade before inviting bids or issuing RFQs.
Compliance and risk teams
Verify that a contractor appears in the public BCA list, inspect expiry dates, and keep evidence in a structured dataset.
Construction suppliers and distributors
Build lead lists of Singapore contractors by workhead, grade, address, postal code, and phone number.
Data teams
Automate recurring contractor-data snapshots without maintaining CKAN/data.gov.sg API code in-house.
Why use this actor?
The source API is public, but raw records use source-specific field names and require pagination, filters, and normalization. This actor packages those steps into a simple Apify workflow with typed output, charging, examples, and integrations.
Data source
The actor uses Singapore data.gov.sg's public CKAN-style datastore API.
- Source: data.gov.sg
- Agency: Building and Construction Authority
- Dataset: Listing of Registered Contractors
- Resource ID:
d_dcda79be4aded5f9e769b8e23ff69b47 - Authentication: none required
Output data
Each dataset item represents one BCA contractor registration row.
| Field | Description |
|---|---|
companyName | Registered company name |
uen | Singapore UEN / registration number |
workhead | BCA workhead code |
grade | BCA grade |
additionalInfo | Source additional info when present |
expiryDate | Registration expiry date as published |
buildingNo | Building number |
streetName | Street name |
unitNo | Unit number |
buildingName | Building name |
postalCode | Singapore postal code |
telephone | Published telephone number |
fullAddress | Normalized joined address |
sourceRecordId | Source _id |
sourceDatasetId | data.gov.sg resource ID |
sourceUrl | API URL used for the record page |
scrapedAt | ISO timestamp for the actor run |
Example output
{"companyName": "#1 DESIGN STUDIO PTE. LTD.","uen": "201925566H","workhead": "CR06","grade": "L1","additionalInfo": null,"expiryDate": "01/02/2028","buildingNo": "1085","streetName": "EUNOS AVENUE 7A","unitNo": "#03-10","buildingName": "EUNOS INDUSTRIAL ESTATE","postalCode": "409535","telephone": "84885022","fullAddress": "1085, EUNOS AVENUE 7A, #03-10, EUNOS INDUSTRIAL ESTATE, 409535","sourceRecordId": 1,"sourceDatasetId": "d_dcda79be4aded5f9e769b8e23ff69b47","sourceUrl": "https://data.gov.sg/api/action/datastore_search?...","scrapedAt": "2026-07-03T00:00:00.000Z"}
How much does it cost to scrape Singapore BCA registered contractors?
This actor uses pay-per-event pricing:
- Start event:
$0.005per run - Contractor record event: tiered per saved contractor registration row
- Bronze reference price:
$0.000026617per record before platform tier discounts
Apify shows the final price for your plan before you start a run.
Input options
| Input | Type | Default | Description |
|---|---|---|---|
maxItems | integer | 20 | Maximum contractor registration rows to save |
offset | integer | 0 | Source pagination offset |
workhead | string | CR06 | Exact BCA workhead code |
grade | string | L1 | Exact BCA grade |
companyName | string | empty | Full-text company-name search |
uen | string | empty | Full-text UEN search |
expiryDate | string | empty | Exact expiry date in DD/MM/YYYY format |
Example input: CR06 L1 contractors
{"maxItems": 100,"offset": 0,"workhead": "CR06","grade": "L1"}
Example input: company lookup
{"maxItems": 20,"companyName": "DESIGN"}
Example input: UEN lookup
{"maxItems": 10,"uen": "201925566H"}
How to run it
- Open the actor on Apify.
- Enter the workhead, grade, company, UEN, or expiry-date filter you need.
- Set
maxItemsto the number of rows you want. - Start the run.
- Download the dataset as JSON, CSV, Excel, or connect it to an integration.
Tips for better results
- Use exact
workheadandgradefilters when building procurement lists. - Leave filters empty if you need a broad export from the official dataset.
- Use
offsetto continue from a previous run without re-exporting the first rows. - Keep
maxItemssmall for testing, then increase it for production exports. - Treat
expiryDateas an exact source string inDD/MM/YYYYformat.
Integrations
Use this actor with:
- Google Sheets for vendor-review spreadsheets
- Airtable for contractor CRM workflows
- Zapier or Make for compliance alerts
- Data warehouses for periodic Singapore construction-market snapshots
- Internal procurement dashboards for RFQ candidate lists
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/singapore-bca-registered-contractors-scraper').call({maxItems: 100,workhead: 'CR06',grade: 'L1'});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('APIFY_TOKEN')run = client.actor('automation-lab/singapore-bca-registered-contractors-scraper').call(run_input={'maxItems': 100,'workhead': 'CR06','grade': 'L1',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~singapore-bca-registered-contractors-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"maxItems":100,"workhead":"CR06","grade":"L1"}'
MCP: use from Claude and other assistants
You can expose this actor through Apify MCP tools.
Claude Desktop configuration:
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--actors", "automation-lab/singapore-bca-registered-contractors-scraper"]}}}
MCP URL pattern:
https://mcp.apify.com/?tools=automation-lab/singapore-bca-registered-contractors-scraper
Claude Code CLI setup:
$claude mcp add --transport http apify-bca-contractors "https://mcp.apify.com/?tools=automation-lab/singapore-bca-registered-contractors-scraper"
Example prompts for MCP usage:
- "Use the Singapore BCA Registered Contractors Scraper to find 100 CR06 L1 contractors and summarize their postal-code distribution."
- "Use this MCP tool to check whether UEN 201925566H appears in the BCA registered contractors dataset."
- "Run the BCA contractors scraper for ME01 contractors and prepare a supplier shortlist spreadsheet."
Reliability
The actor uses a public JSON API rather than browser automation. No proxy is required, and anti-bot risk is low. If data.gov.sg is temporarily unavailable, retry the run later.
Data freshness
The actor returns the dataset as published by data.gov.sg at run time. It does not independently validate whether BCA has updated the upstream dataset that day.
Limitations
- It returns public dataset rows, not private licensing documents.
- It does not enrich records with websites, emails, or directors.
companyNameanduenuse source API full-text search behavior.expiryDateis an exact string filter.
Legality
This actor accesses a public government open-data API and returns the public fields published there. Users remain responsible for using the data lawfully, respecting privacy obligations, and following applicable procurement or compliance rules.
Is it legal to scrape Singapore BCA registered contractors?
Yes, the actor uses the official public data.gov.sg API for a public BCA dataset. Users should still apply the data only for lawful sourcing, compliance, and research workflows.
FAQ
Does this actor require a data.gov.sg API key?
No. The dataset endpoint is public and works without authentication.
Can I export all contractors?
Yes. Leave filters empty and set maxItems high enough, or use offset across multiple runs.
Why did I get fewer rows than expected?
Your filters may be too narrow, or the source dataset may contain fewer matching rows than maxItems.
Does one company appear multiple times?
Yes. The output keeps one row per company/workhead/grade registration because the same company can have multiple BCA registrations.
Troubleshooting
If a run returns no items, remove filters and run a small test with only maxItems. If that works, add filters back one at a time. If the source API returns an error, check the run logs for the exact HTTP status and retry later.
Related scrapers
- https://apify.com/automation-lab/singapore-gebiz-contracts-scraper
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/company-website-finder
Changelog
0.1
Initial version for the Singapore BCA registered contractors data.gov.sg dataset.