# Singapore Government Contract Awards — GeBIZ Procurement Data (`nexgensignal/sg-gebiz-contract-award-records`) Actor

Singapore government contract awards from the Ministry of Finance GeBIZ dataset: tender number, agency, description, award date, awarded supplier organisation and amount in S$. FY2021 onwards. No API key. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/sg-gebiz-contract-award-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 singapore contract award records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Singapore Government Contract Awards — GeBIZ Procurement Data

**Official source. No API key. Pay per record.**

This actor returns **Singapore government contract awards** from the Ministry of Finance dataset "Government Procurement via GeBIZ" on data.gov.sg: one record per awarded contract and supplier, with the GeBIZ tender number, the awarding agency, the tender description, the award date, the award type, the awarded supplier organisation and the awarded amount in Singapore dollars.

These are **contract awards, not open tenders**: every record is a tender that has been awarded. (The dataset's own description on data.gov.sg says "open tenders", but its rows are awards; rows marked "Awarded to No Suppliers" are skipped and never charged.)

On 2 October 2026 the dataset held **17,825 contract award rows from 112 agencies**, with award dates from **1 April 2021 to 31 March 2026** (FY2021 to FY2025); MOF last updated it on 26 April 2026. The largest awarding agencies are the Housing and Development Board (1,244 awards), A\*STAR (902), the People's Association (765), PUB (721) and the Land Transport Authority (697).

Use it three ways:

- **Competitor and market intelligence.** Every government contract won by a company or its competitors, with values.
- **Agency spend tracking.** All awards by an agency, for a type of work (cleaning, IT, consultancy, construction) and a value range.
- **Sales prospecting.** Find which agencies buy what you sell, and who currently holds those contracts.

### Who buys this and for what job

- **Business-development and bid teams** of firms selling to the Singapore government.
- **Market researchers and consultants** sizing public-sector demand by category.
- **Investors and analysts** following government revenue of listed contractors.
- **Journalists and transparency researchers** studying public procurement.
- **Data and CRM teams** enriching supplier or account records with government-contract history.

### Sample output

![Sample output — Singapore Government Contract Awards](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/sg-gebiz-contract-award-records.png)

The largest award in live run 6elYwgQLT9Qmaj9vo (2 October 2026; Land Transport Authority contract awards since 1 April 2025, largest first):

```json
{
  "record_id": "GEBIZ:LTA000ETT24000134:8629",
  "tender_no": "LTA000ETT24000134",
  "description": "Bus Contracting-Tampines Bus Package",
  "agency": "Land Transport Authority",
  "award_date": "2025-09-19",
  "award_date_as_published": "19/9/2025",
  "award_status": "Awarded to Suppliers",
  "supplier_name": "The Go-Ahead Group Limited",
  "supplier_name_withheld": false,
  "awarded_amount_sgd": 646244809.7,
  "source_row_id": 8629,
  "source": "Ministry of Finance, Singapore — 'Government Procurement via GeBIZ' dataset on data.gov.sg (https://data.gov.sg/datasets/d_acde1106003906a75c3fa052592f2fcb/view; API https://data.gov.sg/api/action/datastore_search?resource_id=d_acde1106003906a75c3fa052592f2fcb)",
  "source_dataset": "Government Procurement via GeBIZ (awarded contracts, FY2021 onwards)",
  "licence": "Singapore Open Data Licence version 1.0 (https://data.gov.sg/open-data-licence)",
  "attribution": "Contains information from Government Procurement via GeBIZ accessed on 2026-10-03 from data.gov.sg which is made available under the terms of the Singapore Open Data Licence version 1.0 (https://data.gov.sg/open-data-licence)",
  "observed_at": "2026-10-03T05:44:22Z"
}
```

### Input

```json
{
  "agencyContains": ["Land Transport Authority"],
  "sortBy": "newest",
  "maxRecords": 10
}
```

| Field | Meaning |
|---|---|
| `agencyContains` | Text in the agency name |
| `descriptionContains` | Text in the tender description, e.g. `CLEANING`, `CLOUD` |
| `supplierContains` | Text in the supplier name, e.g. `NCS` |
| `tenderNumbers` | Exact GeBIZ tender numbers |
| `awardedFrom`, `awardedTo` | Award-date range |
| `minAmount`, `maxAmount` | Awarded amount range, S$ |
| `sortBy` | `newest` (default), `oldest`, `largest` |
| `maxRecords` | Most records delivered and billed in this run |

A tender awarded to several suppliers ("Awarded by Items") appears once per supplier, each with its own row.

### Privacy: organisations only

Some awards in the dataset name an individual as the supplier (for example a freelance trainer or a sole proprietor). The Singapore Open Data Licence grants no rights over personal data, so this actor keeps a supplier name only when it carries an organisation form — Pte Ltd, Limited, LLP, Inc, Sdn Bhd, GmbH, AG, SA, B.V., Co., university, association, foundation, hospital and the like. Otherwise the name is withheld (`supplier_name` is null and `supplier_name_withheld` is `true`) **before** any filter runs, so an individual's name can neither be returned nor searched for. The award itself — agency, description, date and amount — is still delivered. On 2 October 2026 this withheld 1,468 of 17,825 supplier names; most withheld names are small businesses registered without a company suffix.

### Pricing

| Apify plan | Price per record |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

One record = one contract award row. Records are delivered first and charged after; with a maximum total charge set, the actor stops before delivering records it could not charge for.

### Run end states and receipt

- **Delivered N Singapore contract award record(s)** — with a note when your `maxRecords` limit was reached.
- **Nothing matched your filters** — nothing charged.
- **CAPPED** — stopped at your maximum total charge.
- **SOURCE UNAVAILABLE** — the data.gov.sg dataset could not be read in full after retries; nothing charged.

Each run reads the whole dataset (about 18,500 rows in four requests, one second apart) before filtering, so results are always complete. The `RUN_RECEIPT` record lists the robots.txt decision for data.gov.sg, rows reported and read, non-award rows skipped, supplier names withheld, and delivered and charged counts.

### Source and licence

Contains information from Government Procurement via GeBIZ accessed from data.gov.sg which is made available under the terms of the [Singapore Open Data Licence version 1.0](https://data.gov.sg/open-data-licence). Dataset managed by the Ministry of Finance. Every record carries `source`, `source_dataset`, `licence`, an `attribution` notice with the access date, and `observed_at`. This actor is not affiliated with or endorsed by the Ministry of Finance, GovTech or GeBIZ.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `agencyContains` (type: `array`):

Only awards by agencies whose name contains any of these texts (not case-sensitive), e.g. 'Ministry of Health', 'Housing', 'Land Transport'.

## `descriptionContains` (type: `array`):

Only awards whose tender description contains any of these texts, e.g. CLEANING, CLOUD, CONSULTANCY.

## `supplierContains` (type: `array`):

Only awards to suppliers whose name contains any of these texts, e.g. NCS, ACCENTURE. Supplier names withheld by the privacy rule are never matched.

## `tenderNumbers` (type: `array`):

Exact GeBIZ tender numbers, e.g. ACR000ETT21000003.

## `awardedFrom` (type: `string`):

Optional. Award date on or after this day (YYYY-MM-DD). The dataset starts 1 April 2021.

## `awardedTo` (type: `string`):

Optional. Award date on or before this day (YYYY-MM-DD).

## `minAmount` (type: `number`):

Optional. Only awards of at least this many Singapore dollars.

## `maxAmount` (type: `number`):

Optional. Only awards of at most this many Singapore dollars.

## `sortBy` (type: `string`):

Which awards come first when more match than your maximum.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed in this run. One record = one tender awarded to one supplier. The dataset holds about 17,800 contract awards.

## Actor input object example

```json
{
  "agencyContains": [
    "Land Transport Authority"
  ],
  "descriptionContains": [],
  "supplierContains": [],
  "tenderNumbers": [],
  "sortBy": "newest",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered (and billed) records.

## `receipt` (type: `string`):

Rows read, non-award rows skipped, supplier names withheld, delivered and charged counts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "agencyContains": [
        "Land Transport Authority"
    ],
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/sg-gebiz-contract-award-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "agencyContains": ["Land Transport Authority"],
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/sg-gebiz-contract-award-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "agencyContains": [
    "Land Transport Authority"
  ],
  "maxRecords": 10
}' |
apify call nexgensignal/sg-gebiz-contract-award-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/sg-gebiz-contract-award-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vagwjBT05VgZIw7N1/builds/6ABwkuKltzlanDerf/openapi.json
