Malaysia & Singapore Open Data API (OpenDOSM, BNM, data.gov.sg) avatar

Malaysia & Singapore Open Data API (OpenDOSM, BNM, data.gov.sg)

Pricing

from $0.50 / 1,000 records

Go to Apify Store
Malaysia & Singapore Open Data API (OpenDOSM, BNM, data.gov.sg)

Malaysia & Singapore Open Data API (OpenDOSM, BNM, data.gov.sg)

Official open data of Malaysia and Singapore as clean JSON: data.gov.my, OpenDOSM (CPI, GDP, labour), Bank Negara Malaysia (exchange rates, OPR) and data.gov.sg, with the licence attribution text on every record.

Pricing

from $0.50 / 1,000 records

Rating

0.0

(0)

Developer

Adrian LHH

Adrian LHH

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Malaysia & Singapore Open Data API (data.gov.my, OpenDOSM, BNM, data.gov.sg)

One Actor for the official open data of Malaysia and Singapore. Pull any dataset from data.gov.my, OpenDOSM (Department of Statistics Malaysia), Bank Negara Malaysia OpenAPI (exchange rates, OPR, interbank rates, Kijang Emas...) and data.gov.sg as clean JSON rows, each with the publisher, licence and the attribution text the licence requires. $0.50 per 1,000 records.

What does it do?

  • Fetches datasets by id with filters, sorting and limits, across four official government APIs, in one run and one schema.
  • Every row carries source, datasetId, datasetName, the record itself, dataset metadata (last updated, frequency, coverage, publisher) and licence, licenceUrl, attribution, sourceUrl.
  • An ATTRIBUTION record in the key-value store lists the attribution notice for every dataset used, ready to paste into your app, report or dashboard.
  • Rate limits of each portal are respected automatically (data.gov.my: 4 requests/minute; data.gov.sg: 4 per 10 s without key).
  • Two views: Records and Licence & attribution.

Input

FieldDefaultWhat it does
datasetsrequiredList of { "source", "id", ... } (max 200). Shorthand strings such as "opendosm:cpi_headline" work too.
maxRecordsPerDataset100Per dataset unless the item sets its own limit (max 100,000).
flattenNestedtrueFlatten nested objects (e.g. BNM rate tables) into a_b columns.
excludePersonalDataColumnstrueDrop columns that look personal (names, IC/NRIC, e-mail, phone, address of persons); listed in droppedColumns.
dataGovSgApiKey–Optional data.gov.sg API key (secret) for higher rate limits.

Per source:

  • data.gov.my and opendosm: id from the catalogue (e.g. fuelprice, population_malaysia, cpi_headline, gdp_qtr_real, lfs_month); optional filter, ifilter, contains, icontains, range, sort (e.g. -date), date_start, date_end, include, exclude.
  • bnm: one of exchange-rate, opr, interest-rate, interest-volume, islamic-interbank-rate, interbank-swap, kijang-emas, usd-interbank-intraday-rate, kl-usd-reference-rate, fx-turn-over; optional path (date/2026-10-01, year/2026/month/9) and query ({"session":"1200","quote":"rm"}).
  • data.gov.sg: dataset id like d_8b84c4ee58e3cfc0ece0d773c8ca6abc; optional q, filters object, sort (e.g. month desc).
{
"datasets": [
{ "source": "opendosm", "id": "cpi_headline", "filter": "overall@division", "sort": "-date", "limit": 12 },
{ "source": "bnm", "id": "exchange-rate" },
{ "source": "data.gov.my", "id": "fuelprice", "sort": "-date", "limit": 10 },
{ "source": "data.gov.sg", "id": "d_8b84c4ee58e3cfc0ece0d773c8ca6abc", "sort": "month desc", "limit": 50 }
]
}

Output

Example rows (shortened):

{
"source": "bnm", "datasetId": "opr", "datasetName": "BNM opr",
"record": { "year": 2026, "date": "2026-09-03", "change_in_opr": 0, "new_opr_level": 2.75 },
"lastUpdated": "2026-09-03 15:03:15", "publisher": "Bank Negara Malaysia",
"licence": "Terms of Use for BNM Datasets", "licenceUrl": "https://www.bnm.gov.my/terms-of-use-bnm-datasets",
"attribution": "Source: Bank Negara Malaysia. Data and information are subject to Terms of Use for BNM Datasets (https://www.bnm.gov.my/terms-of-use-bnm-datasets). Retrieved 2026-10-27.",
"sourceUrl": "https://api.bnm.gov.my/public/opr"
}
{
"source": "data.gov.sg", "datasetId": "d_8b84c4ee58e3cfc0ece0d773c8ca6abc",
"datasetName": "Resale flat prices based on registration date from Jan-2017 onwards",
"record": { "month": "2026-10", "town": "ANG MO KIO", "flat_type": "2 ROOM", "storey_range": "04 TO 06", "floor_area_sqm": "44.00", "resale_price": "290000" },
"publisher": "Housing & Development Board", "licence": "Singapore Open Data Licence v1.0",
"attribution": "Contains information from Resale flat prices based on registration date from Jan-2017 onwards accessed on 2026-10-27 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)."
}

Datasets that fail are listed with error / errorCode (INVALID_DATASET_SPEC, DATASET_NOT_FOUND, NO_RECORDS, RATE_LIMITED, TIMEOUT, HTTP_5xx) and are not charged.

How much does it cost?

EventPrice
Record$0.0005
  • 1,000 records ≈ $0.50. A daily BNM exchange-rate snapshot ≈ $0.01.
  • Apify's tiny run-start fee applies (512 MB default). Set Maximum cost per run to cap spending.
  • Large data.gov.my/OpenDOSM pulls are limited by the portal's 4 requests per minute (each request returns many rows).

Licences and attribution (please read)

The data is not ours. Each portal's licence applies to your use, and the attribution field gives you the required notice.

SourceLicenceWhat you must do
data.gov.my / OpenDOSMCC BY 4.0Credit the agency (e.g. "Source: Department of Statistics Malaysia, OpenDOSM"), link the licence and say the data was reformatted.
Bank Negara MalaysiaTerms of Use for BNM DatasetsState "Source: Bank Negara Malaysia" and "Data and information are subject to Terms of Use for BNM Datasets"; do not imply BNM endorsement; do not use BNM's logo.
data.gov.sgSingapore Open Data Licence v1.0Show a notice with the dataset name, access date and licence link (the attribution text); do not imply endorsement.

This Actor is independent and not affiliated with or endorsed by the Government of Malaysia, DOSM, Bank Negara Malaysia, GovTech Singapore or any agency. Records are passed through as published (numbers are not modified); the Actor only reshapes them into rows. BNM datasets that contain third-party bank rates (base-rate) or named entities (consumer-alert) are not offered.

Personal data

Government open data is aggregate, but some tables can contain names or contact details. By default, columns that look personal (names of persons, IC/NRIC, e-mail, phone, personal address) are dropped and listed in droppedColumns; contact e-mails in dataset metadata are never returned. Switch off excludePersonalDataColumns only if you have a lawful basis under PDPA.

Use it from code or an AI agent

curl -X POST "https://api.apify.com/v2/acts/thriving_adder~sea-open-data/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H 'Content-Type: application/json' \
-d '{"datasets":["bnm:exchange-rate"]}'

Also available as a tool in Apify's MCP server.

Use cases

  • Dashboards: Malaysian CPI, inflation, GDP, fuel prices or the ringgit exchange rate in Looker Studio, Power BI or Google Sheets on a schedule.
  • Fintech and pricing apps: BNM exchange rates, OPR and interbank rates with the required attribution text included.
  • Property research: Singapore HDB resale prices and other data.gov.sg datasets.
  • AI agents: let an agent fetch official statistics instead of guessing numbers.
  • Research and journalism with licence-correct attribution for every figure.

FAQ

Where do I find dataset ids? In the catalogue URL: data.gov.my/data-catalogue/fuelprice, open.dosm.gov.my/data-catalogue/cpi_headline, data.gov.sg/datasets/d_....

Problems or ideas (more countries: Indonesia, Thailand, Philippines)? Open an issue in the Issues tab. We answer within 2 business days.

By the same publisher, built on the same safe, pay-per-result design: