# Singapore Carpark Availability & Metadata (Live) (`hipersoft/sg-carpark-scraper`) Actor

Live HDB carpark availability joined with carpark metadata: available/total lots, occupancy %, address, coordinates, parking type, free/night parking. Nearest-available search and stale-data flag. No key.

- **URL**: https://apify.com/hipersoft/sg-carpark-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Travel, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / carpark returned

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Singapore Carpark Availability & Metadata (Live)

**Live parking availability** for Singapore's ~2,000 HDB carparks — **available/total lots and occupancy %** — joined with the official **carpark metadata** (address, coordinates, parking type, free/night parking, decks, gantry height). Includes **nearest-available search** and a **stale-data flag**. Clean JSON, CSV or Excel. Built on Singapore's **official open data**, no key, no login.

Great for **parking & mobility apps, delivery/fleet routing, and smart-city analytics** — run it on a schedule to build an occupancy history.

![Singapore Carpark Availability input — coordinates, radius and minimum free lots in the Apify Console](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/sg-carpark-scraper-input.png?v=2)

### What you get

- 🅿️ **Live lots** — `availableLots`, `totalLots`, `occupancyPct`, per-lot-type breakdown, and the carpark's own `updateDatetime`
- 📍 **Location** — address + WGS84 `latitude`/`longitude` (converted from SVY21) for mapping & routing
- 🏢 **Metadata** — car-park type, parking system, short-term/free/night parking, decks, gantry height, basement
- 🎯 **Nearest-available** — pass a point + radius and get carparks sorted nearest-first, filtered by minimum free lots
- ⏱️ **Freshness** — `isStale` flags carparks whose reading lags the feed
- 🧾 **Provenance** — stable `id`, `sourceUrl`, `collectedAt`, `feedTimestamp`

### Example input

Find carparks with 20+ free lots within 1km of a point:

```json
{ "latitude": "1.3521", "longitude": "103.8198", "radiusKm": 1, "minAvailableLots": 20 }
```

### Output

![Singapore Carpark Availability output example — live lots, occupancy and metadata as structured JSON](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/sg-carpark-scraper-output.png?v=5)

```json
{
  "id": "sgcp-HE12",
  "carParkNumber": "HE12",
  "address": "BLK 201-210 HENDERSON CRESCENT",
  "latitude": 1.2874,
  "longitude": 103.8199,
  "carParkType": "SURFACE CAR PARK",
  "parkingSystem": "ELECTRONIC PARKING",
  "freeParking": "SUN & PH FR 7AM-10.30PM",
  "nightParking": true,
  "totalLots": 105,
  "availableLots": 30,
  "occupancyPct": 71.4,
  "lotDetails": [{ "lotType": "C", "total": 105, "available": 30 }],
  "updateDatetime": "2026-07-30T15:09:26",
  "isStale": false,
  "sourceUrl": "https://data.gov.sg/datasets/d_ca933a644e55d34fe21f28b8052fac63/view",
  "collectedAt": "2026-07-30T07:10:00.000Z"
}
```

With a radius search each row also includes `distanceKm`.

#### Output schema

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Stable unique identifier for the carpark record. |
| `carParkNumber` | string | Official HDB carpark number/code. |
| `address` | string | Street address of the carpark. |
| `latitude` | number | WGS84 latitude of the carpark. |
| `longitude` | number | WGS84 longitude of the carpark. |
| `carParkType` | string | Type of carpark (e.g. surface, multi-storey). |
| `parkingSystem` | string | Parking system in use (e.g. electronic parking). |
| `shortTermParking` | string | Short-term parking hours/policy. |
| `freeParking` | boolean | Whether free parking is offered during certain hours. |
| `nightParking` | boolean | Whether night parking is available. |
| `carParkDecks` | integer | Number of parking decks. |
| `gantryHeight` | number | Height clearance at the gantry, in metres. |
| `basement` | string | Whether the carpark has basement parking. |
| `totalLots` | integer | Total number of parking lots. |
| `availableLots` | integer | Number of currently available lots. |
| `occupancyPct` | integer | Percentage of lots currently occupied. |
| `lotDetails` | array | Per-lot-type breakdown of total and available lots. |
| `updateDatetime` | string (ISO date) | When the carpark last reported its availability. |
| `isStale` | boolean | Whether the reading lags the live feed. |
| `feedTimestamp` | string (ISO date) | Timestamp of the source availability feed. |
| `sourceUrl` | string (URL) | Link to the source open dataset. |
| `collectedAt` | string (ISO date) | When this Actor collected the record. |
| `distanceKm` | number | Distance from the search point, in km (radius search only). |

### Input fields

| Field | Description |
|-------|-------------|
| `carParkNumbers` | Specific carparks, or empty for all. |
| `latitude` / `longitude` / `radiusKm` | Nearest-available search around a point. |
| `minAvailableLots` | Only carparks with at least this many free lots. |
| `maxItems` | Max carparks (0 = all). |

### FAQ

**How live is it?**
The availability feed updates roughly each minute; each carpark also carries its own `updateDatetime`, and `isStale` flags laggy readings.

**Where do coordinates come from?**
The metadata dataset stores SVY21 coordinates; the Actor converts them to WGS84 latitude/longitude so you can map and do radius search.

**Can I build an occupancy history?**
Yes — schedule the Actor and each run appends a timestamped snapshot.

**How does billing work?**
A tiny per-run fetch charge plus pay per carpark returned.

**Can I integrate this with other tools?**
The Singapore Carpark Availability Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JavaScript/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

### Related Actors

- [Singapore Hawker Centres & Closure Calendar](https://apify.com/hipersoft/sg-hawker-scraper)
- [Singapore Childcare & Preschool Directory](https://apify.com/hipersoft/sg-childcare-scraper)
- [OSM POI Scraper](https://apify.com/hipersoft/osm-poi-scraper)

### Notes

Original clean-room implementation using Singapore's official HDB open data (data.gov.sg), reused under the Singapore Open Data Licence. Not affiliated with or endorsed by HDB or the Singapore Government.

# Actor input Schema

## `carParkNumbers` (type: `array`):

Specific HDB carpark numbers (e.g. HE12, ACB). Empty = all ~2,000.

## `latitude` (type: `string`):

For nearest-available search — center latitude (e.g. 1.3521).

## `longitude` (type: `string`):

For nearest-available search — center longitude (e.g. 103.8198).

## `radiusKm` (type: `integer`):

With center lat/lng, only carparks within this many km (sorted nearest first). 0 = off.

## `minAvailableLots` (type: `integer`):

Only carparks with at least this many free lots.

## `maxItems` (type: `integer`):

Maximum carparks to return. 0 = all.

## Actor input object example

```json
{
  "carParkNumbers": [
    "HE12",
    "ACB"
  ],
  "latitude": "",
  "longitude": "",
  "radiusKm": 0,
  "minAvailableLots": 0,
  "maxItems": 0
}
```

# Actor output Schema

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

The scraped results as dataset items.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/sg-carpark-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/sg-carpark-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call hipersoft/sg-carpark-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hipersoft/sg-carpark-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jzMcDResf8JhmNrtN/builds/SQ7ucknuvJD6SimSX/openapi.json
