# Singapore Hawker Centre Directory Scraper (`singaporedata/singapore-nea-hawker-centres`) Actor

Search official NEA hawker-centre locations, operating status, addresses, coordinates, and cooked-food stall counts across Singapore.

- **URL**: https://apify.com/singaporedata/singapore-nea-hawker-centres.md
- **Developed by:** [Singapore Data](https://apify.com/singaporedata) (community)
- **Categories:** Travel, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 hawker centres

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/actors/running/actors-in-store.md#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 Hawker Centres Directory

> **Unofficial:** This Actor is independently published by Singapore Data. It is not affiliated with or endorsed by the Singapore Government or any source agency.

Search and export official NEA hawker-centre and market locations across Singapore. Get names, operating status, addresses, postal codes, map coordinates, cooked-food stall counts, completion details, and source photos for food discovery, location intelligence, tourism tools, delivery coverage, and neighbourhood research.

### Why use this Actor?

- Search the official nationwide hawker-centre GeoJSON snapshot.
- Filter by centre name, address, postal code, operating status, or minimum stall count.
- Exclude under-construction centres by default while preserving an opt-in.
- Export clean JSON, CSV, Excel, XML, or API-ready location records.
- Keep operational summaries separate from the location dataset.

### Input

| Field | Purpose | Default |
| --- | --- | --- |
| `query` | Optional name, street, building, or postal-code search | Empty |
| `operationalStatus` | One exact NEA status | All available |
| `minimumCookedFoodStalls` | Minimum source-reported cooked-food stalls | No minimum |
| `includeUnderConstruction` | Include centres not yet operating | `false` |
| `maxItems` | Exact maximum number of unique centres | `50` |
| `failOnNoResults` | Fail instead of returning a valid empty result | `false` |

```json
{
  "minimumCookedFoodStalls": 20,
  "includeUnderConstruction": false,
  "maxItems": 50
}
```

### Output

Each row represents one official centre and can include its name, operating status, full address and components, postal code, source description, photo, completion information, cooked-food stall count, WGS84 longitude and latitude, stable source ID, and collection time.

### Data source and responsible use

The Actor uses the official National Environment Agency hawker-centre dataset on data.gov.sg under the Singapore Open Data Licence. Singapore Data is an independent publisher and is not affiliated with or endorsed by NEA or the Singapore Government.

Operating status, stall counts, and facilities can change. Verify visits and time-sensitive business decisions with the centre or official source.

### Performance and errors

The Actor polls data.gov.sg for the current official GeoJSON snapshot and downloads one bounded file. It uses no browser or proxy, applies filters and `maxItems` exactly, validates map geometry, removes duplicates, and never creates fallback locations. A valid empty search returns `no_results`.

### SEO summary

Singapore hawker centre scraper and official NEA directory for markets, addresses, postal codes, map coordinates, operating status, cooked-food stalls, tourism, food delivery, and location intelligence.

# Actor input Schema

## `query` (type: `string`):

Optional text such as a centre name, street, building, or postal code.

## `operationalStatus` (type: `string`):

Return one exact official status or leave empty for all available centres.

## `minimumCookedFoodStalls` (type: `integer`):

Optional minimum source-reported number of cooked-food stalls.

## `includeUnderConstruction` (type: `boolean`):

Include future centres when no exact operating status is selected.

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

Stop after this many unique centres. The limit is applied exactly.

## `failOnNoResults` (type: `boolean`):

When enabled, an empty valid search ends as failed instead of returning a no-results summary.

## Actor input object example

```json
{
  "includeUnderConstruction": false,
  "maxItems": 50,
  "failOnNoResults": false
}
```

# Actor output Schema

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

Normalized official NEA locations ready for export or API use.

## `summary` (type: `string`):

Counts, source coverage, completion status, and the termination reason.

# 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("singaporedata/singapore-nea-hawker-centres").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("singaporedata/singapore-nea-hawker-centres").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 '{}' |
apify call singaporedata/singapore-nea-hawker-centres --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,singaporedata/singapore-nea-hawker-centres"
        }
    }
}

```

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/GLb2W5zWpu8UrELF9/builds/8FCIa1e822sKcdUua/openapi.json
