The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the DataPulse MY listing page.
Live dashboard: https://www.data-pulse.my
🤖 AI-agent-ready — Wire DataPulse into Claude Desktop, Cursor, Cline, or any MCP-compatible client with one config block. Your agent gets
418 official Malaysian datasets — including 30 GTFS transit feeds (KTMB, Prasarana, BAS.MY) — with declared licences and an honest ten-status trust taxonomy instead of a blanket green checkmark.
When an AI quote is wrong, it is often wrong because the underlying data was stale, mis-licensed, or unverifiable — not because the model hallucinated. An official-looking page does not tell an agent when the dataset behind it last updated, who published it, whether it may legally be reused, or whether the observation can be reproduced by a second party.
DataPulse exists to make that uncertainty explicit. It is an open, read-only verification layer for Malaysian public data: it continuously probes
**418 official datasets**,and publishes — for each one — machine-readable evidence about whether the source is reachable, how fresh the content is, what licence applies, how the schema behaves, and when the observation was signed.
It does not replace the official source. It documents, on an honest and reproducible basis, what the official portal states and whether that material is current, so you know what you are reusing or citing. The verification speaks for itself: every claim here is a live, checkable artefact, not a promise.
fresh, aging, stale,
discontinued, degraded, browser-dependent, unreachable, unknown,
unknown-freshness, reference). A dataset that cannot be proven fresh is
labelled unknown-freshness — not silently treated as healthy.Three independent, checkable layers. You do not have to take DataPulse's word — you can verify each with the published public key, the public Git source record, and the public transparency log:
| Layer | What it proves | How to check it yourself |
|---|---|---|
| Signed envelope | Each per-dataset observation is Ed25519-signed over its exact content by a key in the published registry | python3 scripts/verify_external.py |
| Source of record | The served observation byte-matches the versioned Git source | python3 scripts/verify_external.py |
| Temporal witness | The health statement carries a Rekor/Sigstore public-log inclusion proof | python3 scripts/verify_external.py |
Run it yourself, from anywhere, with no checkout and no DataPulse code:
See Verify DataPulse externally for the full guide, and our methodology below for how health is judged.
A verification layer is only as honest as its method, so DataPulse deliberately tells you when it cannot be sure — a source that cannot be proven current is labelled accordingly, never silently marked healthy. That is the boundary we hold: the platform proves the integrity and timing of its observations, not that an upstream government figure is semantically true. That distinction is the whole point of an evidence layer, and we do not blur it.
Health is reported as fresh, aging, stale, discontinued, degraded,
browser-dependent, unreachable, unknown, unknown-freshness, or
reference. Unknown freshness means the URL and content shape work, but neither
a Last-Modified header nor a parseable content date proves when the data was
updated. Reference means versioned lookup data is reachable and its record count
is measured, while date-based freshness does not apply. Within the catalogue,
data_type refines the reference family without changing the status: policy-reference
rows (policy state that stays valid until superseded — BNM OPR is current while
unchanged, not stale) and reference-current rows (lookups that must still pass
freshness, such as a bank-rate table that can itself go stale) are judged by their
declared policy, while plain reference rows are static. The public
_trust_summary shows the distribution and explicitly
counts missing freshness and row-count signals.
Discontinued — The source has stopped publishing new data. The data is frozen at the last known content date. This is not a freshness failure — it's a publisher decision.
Current distribution (_trust_summary): 94 fresh · 105 aging · 189 stale · 1 discontinued · 3 degraded · 5 browser-dependent · 7 unknown-freshness · 14 reference
Subscribe: RSS feed — get notified when dataset health changes.
⚠️ Status: active development. Dashboards and health snapshots update as probes complete. Per-dataset reports under
data/{id}.mdmay briefly lag behind the live health snapshot inhealth/latest.json(a regeneration gap that is being closed). Coverage and quality improve with each tagged release; expect rough edges. Track progress via the GitHub Releases page.
Five sources (currently 1.4% of the catalogue) require a real browser to probe because their
source pages render client-side JavaScript: eperolehan-diklankan,
doe_apims, doe_rqims, doe_mqims, and kkm_idengue.
DataPulse uses Camofox, a
self-hosted patched headless-Chromium sidecar, to probe these. The probe path
is check.sh → Camofox sidecar → DOM snapshot →
content-date extraction.
To enable browser probing:
http://localhost:9377). The probe script and the GitHub Actions
workflow pick this up from the CAMOFOX_BASE_URL environment
variable; nothing in this repo encodes a public IP.CAMOFOX_BASE_URL to that address.systemctl restart datapulse-health.timer.Without Camofox, those five datasets will sit at browser-dependent — the
honest status: DataPulse cannot probe them without a browser, so it says
so rather than failing silently. See
scripts/smoke_browser_probes.sh for
isolated smoke tests.
| Topic | DataPulse's position |
|---|---|
| Health status | Ten-status taxonomy, judged by reachability + an honest freshness signal (Last-Modified, parseable content date, or declared policy) — never a fabricated green checkmark. A series that stopped publishing is discontinued (a publisher decision, frozen data), not a freshness failure. |
| Licence | Every dataset declares its licence machine-readably. Creative Commons Attribution 4.0 (285); MBPP Government Open Data Terms (attribution required) (1); MIT License (8); Open Government Licence (Malaysia) (115); Publisher licence not stated; portal disclaimer applies (4); Singapore Open Data Licence v1.0 (attribution required) (5). A second party can reproduce this from datapulse.json → .datasets[].licence. |
| Freshness cadence | Each dataset is probed on its own tiered schedule (5-minute timer, cadence-aware) — daily references, weekly fuel prices, monthly surveys, etc. Always with the human-readable steward and a stable custodian ID for publisher provenance. |
| Provenance | Stable custodian per dataset; signed probe attestations per observation |
| Observed claim | The platform proves what an official source was observed to be at a known time — it does not claim upstream data is semantically true |
| Read-only + lawful | Publicly available, authenticated sources only — never bypassed; rate-limited; identifies itself to sources |
| Verification | Fresh days are Rekor-witnessed; signed envelopes + Git source-of-record + public-log inclusion, checkable by anyone |
DataPulse exposes an AI-ready, read-only MCP server so agents can query the catalogue natively. It provides the same freshness, licence, schema-drift, and provenance evidence available to a human reviewer.
https://mcp.data-pulse.my/mcp (Streamable HTTP, no auth)
Graded by mcpgrade — replay with bash scripts/audit_mcpgrade.sh (pinned version, writes artifacts/mcpgrade/). The canonical tool count lives in mcp.json / agent.json.search_datasets, get_dataset, find_stale, find_anomalies, find_deteriorating, find_recovering, find_unreliable, find_schema_drift, check_reconciliation, get_provenance, get_evidence, verify_dataset, get_freshness_summary, verify_evidence, trust_verdict, verify_attestation, find_by_licence, usage_summaryThe public endpoint serves all 18 read-only tools over the 418-dataset catalogue.
get_evidence exposes pipeline receipts; verify_evidence performs cached
transport-only live checks and does not update health.
Connect from Claude Desktop:
See llms.txt for the full
discovery index, and docs/mcp-deploy.md for the
deployment architecture.
Wire it into Claude Desktop via claude_desktop_config.json (30 seconds, no
API key):
Restart Claude Desktop, confirm the hammer icon shows "datapulse-my" with the read-only tools listed above. Cursor / Cline use the same JSON in their MCP config panel.
Dataset inventory is grouped by stable custodian publisher ID; unknown IDs fall back to the ID itself.
aadk)drug_addicts_age) · sampledrug_addicts_drugtype)drug_addicts_education)drug_addicts_occupation)agc)federal_finance_qtr)federal_finance_qtr_oe) · samplefederal_finance_qtr_revenue) · samplefederal_finance_year)federal_finance_year_de)federal_finance_year_oe)lookup_federal_finance)apad)gtfs_realtime_mybas_alor_setar)gtfs_realtime_mybas_ipoh)gtfs_realtime_mybas_johor)gtfs_realtime_mybas_kangar)gtfs_realtime_mybas_kota_bharu)gtfs_realtime_mybas_kuala_terengganu)gtfs_realtime_mybas_kuching)gtfs_realtime_mybas_melaka)gtfs_realtime_mybas_seremban_a)gtfs_realtime_mybas_seremban_b)gtfs_static_mybas_alor_setar)gtfs_static_mybas_ipoh)gtfs_static_mybas_johor)gtfs_static_mybas_kangar)gtfs_static_mybas_kota_bharu)gtfs_static_mybas_kuala_terengganu)gtfs_static_mybas_kuching)gtfs_static_mybas_melaka)gtfs_static_mybas_seremban_a)gtfs_static_mybas_seremban_b)bnm)bnm_base_rate)bnm_interbank_swap)bnm_interest_rate)bnm_interest_volume)bnm_kijang_emas)bnm_kl_usd_myr)bnm_myor)bnm_opr)currency_in_circulation)currency_in_circulation_annual)dgm_interest_rates) · sampledgm_interest_rates_annual) · sampledgm_money_aggregates) · sampledgm_payments_channels) · sampledgm_payments_instruments) · sampledgm_payments_systems) · sampledgm_payments_transactions_fpx) · sampleexchangerates)exchangerates_daily_0900) · sampleexchangerates_daily_1130) · sampleexchangerates_daily_1200) · sampleexchangerates_daily_1700) · sampleinterestrates)interestrates_annual)lookup_money_banking)monetary_aggregates)payment_channels)payment_instruments)payment_systems)doa)crops_state) · sampledosm_crops_district_area)dosm_crops_district_production)doe)air_pollution)doe_apims) · sampledoe_mqims) · sampledoe_rqims) · samplewater_pollution_basin)dof)fish_landings) · sampledosm)bop_balance)cpi_3d)cpi_4d)cpi_5d)cpi_core)cpi_core_inflation)cpi_headline)cpi_state)cpi_state_inflation)dosm_arc_dosm)dosm_bec)dosm_birth_state) · sampledosm_cpi_annual)dosm_cpi_annual_inflation)dosm_cpi_core_inflation) · sampledosm_cpi_headline_inflation)dosm_cpi_inflation) · sampledosm_cpi_lowincome)dosm_cpi_state) · sampledosm_cpi_state_inflation) · sampledosm_cpi_strata)dosm_crime_district) · sampledosm_death_district_sex) · sampledosm_death_maternal) · sampledosm_death_maternal_state) · sampledosm_death_state) · sampledosm_employment_sector) · sampledosm_fertility) · sampledosm_fertility_state)dosm_gdp_annual_nominal_demand)dosm_gdp_annual_nominal_demand_granular)dosm_gdp_annual_nominal_income)dosm_gdp_annual_nominal_supply) · sampledosm_gdp_annual_nominal_supply_granular)dosm_gdp_annual_real_demand)dosm_gdp_annual_real_demand_granular)dosm_gdp_annual_real_supply) · sampledosm_gdp_annual_real_supply_granular)dosm_gdp_district_real_supply)dosm_gdp_gni_annual_nominal) · sampledosm_gdp_gni_annual_real)dosm_gdp_lookup)dosm_gdp_qtr_nominal) · sampledosm_gdp_qtr_nominal_demand)dosm_gdp_qtr_nominal_demand_granular)dosm_gdp_qtr_nominal_supply)dosm_gdp_qtr_nominal_supply_granular)dosm_gdp_qtr_real) · sampledosm_gdp_qtr_real_demand)dosm_gdp_qtr_real_demand_granular)dosm_gdp_qtr_real_sa) · sampledosm_gdp_qtr_real_sa_demand)dosm_gdp_qtr_real_sa_supply)dosm_gdp_qtr_real_supply)dosm_gdp_qtr_real_supply_granular)dosm_gdp_state_real_supply) · sampledosm_hh_access_amenities)dosm_hh_expenditure_dun) · sampledosm_hh_expenditure_parlimen) · sampledosm_hh_income) · sampledosm_hh_income_district) · sampledosm_hh_income_dun)dosm_hh_income_parlimen)dosm_hh_income_state) · sampledosm_hh_inequality) · sampledosm_hh_inequality_district) · sampledosm_hh_inequality_dun)dosm_hh_inequality_parlimen)dosm_hh_inequality_state) · sampledosm_hh_poverty) · sampledosm_hh_poverty_district) · sampledosm_hh_poverty_dun)dosm_hh_poverty_parlimen)dosm_hh_poverty_state) · sampledosm_hh_profile)dosm_hh_profile_state)dosm_hies_district)dosm_hies_malaysia_percentile)dosm_hies_state)dosm_hies_state_percentile)dosm_iowrt)dosm_iowrt_2d)dosm_iowrt_3d)dosm_ipi)dosm_ipi_1d)dosm_ipi_domestic) · sampledosm_ipi_export) · sampledosm_lfs_district)dosm_lfs_dun)dosm_lfs_month) · sampledosm_lfs_month_duration)dosm_lfs_month_sa)dosm_lfs_month_status)dosm_lfs_month_youth)dosm_lfs_parlimen)dosm_lfs_qtr) · sampledosm_lfs_qtr_sru_age)dosm_lfs_qtr_sru_sex)dosm_lfs_qtr_state) · sampledosm_lfs_qtr_tru_age)dosm_lfs_qtr_tru_sex)dosm_lfs_state_sex)dosm_lfs_year) · sampledosm_lfs_year_sex)dosm_marriages)dosm_marriages_age)dosm_marriages_state) · sampledosm_marriages_state_age) · sampledosm_mcoicop)dosm_msic)dosm_population_malaysia) · sampledosm_population_parlimen) · sampledosm_population_state) · sampledosm_ppi) · sampledosm_ppi_1d)dosm_ppi_sitc)dosm_productivity_annual)dosm_productivity_annual_priority)dosm_productivity_lookup)dosm_productivity_qtr)dosm_sitc)dosm_sitc_sop)dosm_sppi)dosm_sppi_1d)dosm_sppi_2d)dosm_trade_enduse_bec) · sampledosm_trade_headline) · sampledosm_trade_sitc_1d) · sampleeconomic_indicators)employment_sector)fdi_flows)fertility)gdp_annual_nominal_supply)gdp_annual_real_supply)gdp_gni_annual_nominal)gdp_qtr_nominal)gdp_qtr_real)gdp_qtr_real_sa)gdp_state_real_supply)hh_expenditure_dun)hh_expenditure_parlimen)hh_income)hh_income_district)hh_income_state)hh_inequality)hh_inequality_district)hh_inequality_state)hh_poverty)hh_poverty_district)hh_poverty_state)ipi_2d)ipi_3d)ipi_5d)ipi_domestic)ipi_export)lfs_month)lfs_qtr)lfs_qtr_state)lfs_year)marriages_state)marriages_state_age)population_district)population_dun)population_malaysia)population_parlimen)population_state)ppi)ppi_2d)ppi_3d)ppi_sop)sdg_04-6-1)sdg_10-c-1)sppi_3d)trade_headline)trade_sitc_1d)energy_commission)electricity_access)electricity_supply) · samplest_cogenerators)st_consumers)st_current_cogen_licensees)st_current_ipp_licensees)st_current_lss_licensees)st_current_re_licensees)st_elesca)st_energy_balance_pdf)st_generation_mix_gwh)st_installed_capacity_mw)st_ipps)st_max_demand_mw)st_re_projects)st_sales_unit_gwh)st_sales_value_rm_million)epf)epf_dividend) · sampleforestry_department)dosm_forest_reserve)dosm_forest_reserve_state)dosm_timber_production)immigration)arrivals)arrivals_soe)passports)jbg)legal_advisory_branch)legal_advisory_case_type)legal_advisory_category)legal_advisory_subcategory)jdn)currency_codes)datasets)government_apps)government_apps_active)government_apps_downloads)government_apps_reviews)metrics_content)metrics_dataset_cumul)usage_metrics)usage_metrics_openapi)usage_metrics_openapi_cumul)jmg)dosm_mineral_extraction)jpj)dgm_vehicle_registrations_type_fuel) · sampleregistration_transactions_all)registration_transactions_car)registration_transactions_motorcycle)registrations_type_fuel)jpn)births)deaths)dosm_births_annual)dosm_births_annual_sex_ethnic)dosm_births_annual_sex_ethnic_state)dosm_births_annual_state)dosm_births_district_sex)dosm_deaths_district_sex)dosm_deaths_early_childhood)dosm_deaths_early_childhood_sex)dosm_deaths_early_childhood_state)dosm_deaths_early_childhood_state_sex)dosm_deaths_maternal)dosm_deaths_maternal_state)dosm_deaths_sex_ethnic)dosm_deaths_sex_ethnic_state)dosm_deaths_state)kkm)covid_cases)covid_cases_age)covid_cases_vaxstatus)covid_deaths_linelist)dosm_stillbirths)dosm_stillbirths_state)healthcare_staff) · samplehospital_beds)infant_immunisation) · samplekkm_idengue) · samplekkmnow_bedutil)kkmnow_blood)kkmnow_covidepid)kkmnow_covidnow)kkmnow_covidvax)kkmnow_facilities)kkmnow_organ)kkmnow_pekab40)mnha) · samplemnha_moh)nutrition_children_sex)nutrition_children_strata)sanitation_access)sdg_03-3-1)std_state) · samplevaxreg_covid)vaxreg_covid_demog)kpdn)dosm_lookup_item)dosm_lookup_premise)pricecatcher) · samplektmb)dgm_ktmb_ridership_monthly) · samplegtfs_realtime_ktmb)gtfs_static_ktmb)ridership_ktmb_daily)ridership_ktmb_monthly)ridership_od_ets)ridership_od_intercity)ridership_od_komuter)ridership_od_komuter_utara)ridership_od_shuttle_tebrau)mbpp)mbpp_weather_stations)mcmc)cellular_subscribers) · sampleposkod)met)almanak_astronomi)met_weather) · samplemha)sdg_16-2-2)mhlg)local_authority_sex) · samplemoe)completion_school_state)enrolment_school_district)schools_district) · sampleteachers_district)mof)eperolehan-diklankan) · samplefederal_budget_moe)federal_budget_moh)federal_finance_qtr_de)federal_finance_year_revenue)fuelprice) · samplemohe)lecturers_uni)mot)ridership_headline)mynic)domains)domains_dnssec)domains_idn)domains_ipv6)national_audit)state_finance_expenditure)state_finance_revenue)national_blood_centre)blood_donations)blood_donations_state) · samplenpra)cosmetic_notifications)cosmetic_notifications_cancelled)cosmetics_manufacturers)pharmaceutical_importers)pharmaceutical_manufacturers)pharmaceutical_products)pharmaceutical_products_cancelled)pharmaceutical_wholesalers)nres)ghg_emissions)ntrc)organ_pledges)organ_pledges_state)parliament)hansard_mps)hansard_parliamentary_terms)hansard_sittings)parliament_sex) · samplepaynet)trnsc_daily_directdebit)trnsc_daily_fpx)trnsc_daily_jompay)trnsc_daily_san)pdrm)drug_arrests_age)drug_arrests_ethnicity)sdg_16-1-1)prasarana)gtfs_realtime_prasarana_bus_kl)gtfs_realtime_prasarana_bus_mrtfeeder)gtfs_realtime_prasarana_bus_penang)gtfs_static_prasarana_bus_kl)gtfs_static_prasarana_bus_kuantan)gtfs_static_prasarana_bus_mrtfeeder)gtfs_static_prasarana_bus_penang)gtfs_static_prasarana_rail_kl)ridership_od_brt_daily)ridership_od_rapidrail_daily)prisons)prisoners_prison)prisoners_state) · sampleprotecthealth)pekab40_screenings)pekab40_screenings_state) · samplesg-datagov)sg_datagov_coe_bidding)sg_datagov_hdb_metadata)sg_datagov_hdb_resale_prices)sg_datagov_taxi_availability)sg_datagov_weather_readings)span)water_access) · samplewater_consumption)water_production) · sampletnb)electricity_consumption)| Dataset | Refresh cadence |
|---|---|
air_pollution | monthly |
almanak_astronomi | daily |
arrivals | monthly |
arrivals_soe | monthly |
births | daily |
blood_donations | daily |
blood_donations_state | daily |
bnm_base_rate | monthly |
bnm_interbank_swap | daily (weekdays) |
bnm_interest_rate | monthly |
bnm_interest_volume | monthly |
bnm_kijang_emas | daily |
bnm_kl_usd_myr | daily (weekdays) |
bnm_myor | daily |
bnm_opr | monthly |
bop_balance | quarterly |
cellular_subscribers | annual |
completion_school_state | annual |
cosmetic_notifications | monthly |
cosmetic_notifications_cancelled | monthly |
cosmetics_manufacturers | daily |
covid_cases | daily |
covid_cases_age | daily |
covid_cases_vaxstatus | daily |
covid_deaths_linelist | annual |
cpi_3d | monthly |
cpi_4d | monthly |
cpi_5d | monthly |
cpi_core | monthly |
cpi_core_inflation | monthly |
cpi_headline | monthly |
cpi_state | monthly |
cpi_state_inflation | monthly |
crops_state | annual |
currency_codes | as-required |
currency_in_circulation | monthly |
currency_in_circulation_annual | annual |
datasets | monthly |
deaths | annual |
dgm_interest_rates | monthly |
dgm_interest_rates_annual | annual |
dgm_ktmb_ridership_monthly | monthly |
dgm_money_aggregates | monthly |
dgm_payments_channels | monthly |
dgm_payments_instruments | monthly |
dgm_payments_systems | monthly |
dgm_payments_transactions_fpx | daily |
dgm_vehicle_registrations_type_fuel | monthly |
doe_apims | hourly |
doe_mqims | monthly |
doe_rqims | hourly |
domains | monthly |
domains_dnssec | monthly |
domains_idn | monthly |
domains_ipv6 | monthly |
dosm_arc_dosm | daily |
dosm_bec | as-required |
dosm_birth_state | annual |
dosm_births_annual | annual |
dosm_births_annual_sex_ethnic | annual |
dosm_births_annual_sex_ethnic_state | annual |
dosm_births_annual_state | annual |
dosm_births_district_sex | annual |
dosm_cpi_annual | annual |
dosm_cpi_annual_inflation | annual |
dosm_cpi_core_inflation | monthly |
dosm_cpi_headline_inflation | monthly |
dosm_cpi_inflation | monthly |
dosm_cpi_lowincome | monthly |
dosm_cpi_state | monthly |
dosm_cpi_state_inflation | monthly |
dosm_cpi_strata | monthly |
dosm_crime_district | annual |
dosm_crops_district_area | annual |
dosm_crops_district_production | annual |
dosm_death_district_sex | annual |
dosm_death_maternal | annual |
dosm_death_maternal_state | annual |
dosm_death_state | annual |
dosm_deaths_district_sex | annual |
dosm_deaths_early_childhood | annual |
dosm_deaths_early_childhood_sex | annual |
dosm_deaths_early_childhood_state | annual |
dosm_deaths_early_childhood_state_sex | annual |
dosm_deaths_maternal | annual |
dosm_deaths_maternal_state | annual |
dosm_deaths_sex_ethnic | annual |
dosm_deaths_sex_ethnic_state | annual |
dosm_deaths_state | annual |
dosm_employment_sector | annual |
dosm_fertility | annual |
dosm_fertility_state | annual |
dosm_forest_reserve | annual |
dosm_forest_reserve_state | annual |
dosm_gdp_annual_nominal_demand | annual |
dosm_gdp_annual_nominal_demand_granular | annual |
dosm_gdp_annual_nominal_income | annual |
dosm_gdp_annual_nominal_supply | annual |
dosm_gdp_annual_nominal_supply_granular | annual |
dosm_gdp_annual_real_demand | annual |
dosm_gdp_annual_real_demand_granular | annual |
dosm_gdp_annual_real_supply | annual |
dosm_gdp_annual_real_supply_granular | annual |
dosm_gdp_district_real_supply | annual |
dosm_gdp_gni_annual_nominal | annual |
dosm_gdp_gni_annual_real | annual |
dosm_gdp_lookup | as-required |
dosm_gdp_qtr_nominal | quarterly |
dosm_gdp_qtr_nominal_demand | quarterly |
dosm_gdp_qtr_nominal_demand_granular | quarterly |
dosm_gdp_qtr_nominal_supply | quarterly |
dosm_gdp_qtr_nominal_supply_granular | quarterly |
dosm_gdp_qtr_real | quarterly |
dosm_gdp_qtr_real_demand | quarterly |
dosm_gdp_qtr_real_demand_granular | quarterly |
dosm_gdp_qtr_real_sa | quarterly |
dosm_gdp_qtr_real_sa_demand | quarterly |
dosm_gdp_qtr_real_sa_supply | quarterly |
dosm_gdp_qtr_real_supply | quarterly |
dosm_gdp_qtr_real_supply_granular | quarterly |
dosm_gdp_state_real_supply | annual |
dosm_hh_access_amenities | annual |
dosm_hh_expenditure_dun | biennial to triennial (survey years) |
dosm_hh_expenditure_parlimen | biennial to triennial (survey years) |
dosm_hh_income | biennial to triennial (survey years) |
dosm_hh_income_district | biennial to triennial (survey years) |
dosm_hh_income_dun | annual |
dosm_hh_income_parlimen | annual |
dosm_hh_income_state | biennial to triennial (survey years) |
dosm_hh_inequality | biennial to triennial (survey years) |
dosm_hh_inequality_district | biennial to triennial (survey years) |
dosm_hh_inequality_dun | annual |
dosm_hh_inequality_parlimen | annual |
dosm_hh_inequality_state | biennial to triennial (survey years) |
dosm_hh_poverty | biennial to triennial (survey years) |
dosm_hh_poverty_district | biennial to triennial (survey years) |
dosm_hh_poverty_dun | annual |
dosm_hh_poverty_parlimen | annual |
dosm_hh_poverty_state | biennial to triennial (survey years) |
dosm_hh_profile | annual |
dosm_hh_profile_state | annual |
dosm_hies_district | annual |
dosm_hies_malaysia_percentile | annual |
dosm_hies_state | annual |
dosm_hies_state_percentile | annual |
dosm_iowrt | monthly |
dosm_iowrt_2d | monthly |
dosm_iowrt_3d | monthly |
dosm_ipi | monthly |
dosm_ipi_1d | monthly |
dosm_ipi_domestic | monthly |
dosm_ipi_export | monthly |
dosm_lfs_district | annual |
dosm_lfs_dun | annual |
dosm_lfs_month | monthly |
dosm_lfs_month_duration | monthly |
dosm_lfs_month_sa | monthly |
dosm_lfs_month_status | monthly |
dosm_lfs_month_youth | monthly |
dosm_lfs_parlimen | annual |
dosm_lfs_qtr | quarterly |
dosm_lfs_qtr_sru_age | quarterly |
dosm_lfs_qtr_sru_sex | quarterly |
dosm_lfs_qtr_state | quarterly |
dosm_lfs_qtr_tru_age | quarterly |
dosm_lfs_qtr_tru_sex | quarterly |
dosm_lfs_state_sex | annual |
dosm_lfs_year | annual |
dosm_lfs_year_sex | annual |
dosm_lookup_item | as-required |
dosm_lookup_premise | as-required |
dosm_marriages | annual |
dosm_marriages_age | annual |
dosm_marriages_state | annual |
dosm_marriages_state_age | annual |
dosm_mcoicop | as-required |
dosm_mineral_extraction | monthly |
dosm_msic | as-required |
dosm_population_malaysia | annual |
dosm_population_parlimen | annual |
dosm_population_state | annual |
dosm_ppi | monthly |
dosm_ppi_1d | monthly |
dosm_ppi_sitc | monthly |
dosm_productivity_annual | annual |
dosm_productivity_annual_priority | annual |
dosm_productivity_lookup | as-required |
dosm_productivity_qtr | quarterly |
dosm_sitc | as-required |
dosm_sitc_sop | as-required |
dosm_sppi | quarterly |
dosm_sppi_1d | quarterly |
dosm_sppi_2d | quarterly |
dosm_stillbirths | annual |
dosm_stillbirths_state | annual |
dosm_timber_production | annual |
dosm_trade_enduse_bec | monthly |
dosm_trade_headline | monthly |
dosm_trade_sitc_1d | monthly |
drug_addicts_age | annual |
drug_addicts_drugtype | annual |
drug_addicts_education | annual |
drug_addicts_occupation | annual |
drug_arrests_age | annual |
drug_arrests_ethnicity | annual |
economic_indicators | monthly |
electricity_access | annual |
electricity_consumption | monthly |
electricity_supply | monthly |
employment_sector | monthly |
enrolment_school_district | annual |
eperolehan-diklankan | hourly |
epf_dividend | annual |
exchangerates | monthly |
exchangerates_daily_0900 | daily (weekdays, 0900 MYT) |
exchangerates_daily_1130 | daily (weekdays, 1130 MYT) |
exchangerates_daily_1200 | daily (weekdays, 1200 MYT) |
exchangerates_daily_1700 | daily (weekdays, 1700 MYT) |
fdi_flows | quarterly |
federal_budget_moe | annual |
federal_budget_moh | annual |
federal_finance_qtr | quarterly |
federal_finance_qtr_de | quarterly |
federal_finance_qtr_oe | quarterly |
federal_finance_qtr_revenue | quarterly |
federal_finance_year | annual |
federal_finance_year_de | quarterly |
federal_finance_year_oe | annual |
federal_finance_year_revenue | annual |
fertility | monthly |
fish_landings | monthly |
fuelprice | weekly |
gdp_annual_nominal_supply | annual |
gdp_annual_real_supply | annual |
gdp_gni_annual_nominal | annual |
gdp_qtr_nominal | quarterly |
gdp_qtr_real | quarterly |
gdp_qtr_real_sa | quarterly |
gdp_state_real_supply | annual |
ghg_emissions | annual |
government_apps | monthly |
government_apps_active | monthly |
government_apps_downloads | monthly |
government_apps_reviews | monthly |
gtfs_realtime_ktmb | 30 seconds |
gtfs_realtime_mybas_alor_setar | 30 seconds |
gtfs_realtime_mybas_ipoh | 30 seconds |
gtfs_realtime_mybas_johor | 30 seconds |
gtfs_realtime_mybas_kangar | 30 seconds |
gtfs_realtime_mybas_kota_bharu | 30 seconds |
gtfs_realtime_mybas_kuala_terengganu | 30 seconds |
gtfs_realtime_mybas_kuching | 30 seconds |
gtfs_realtime_mybas_melaka | 30 seconds |
gtfs_realtime_mybas_seremban_a | 30 seconds |
gtfs_realtime_mybas_seremban_b | 30 seconds |
gtfs_realtime_prasarana_bus_kl | 30 seconds |
gtfs_realtime_prasarana_bus_mrtfeeder | 30 seconds |
gtfs_realtime_prasarana_bus_penang | 30 seconds |
gtfs_static_ktmb | daily |
gtfs_static_mybas_alor_setar | as-required |
gtfs_static_mybas_ipoh | as-required |
gtfs_static_mybas_johor | as-required |
gtfs_static_mybas_kangar | as-required |
gtfs_static_mybas_kota_bharu | as-required |
gtfs_static_mybas_kuala_terengganu | as-required |
gtfs_static_mybas_kuching | as-required |
gtfs_static_mybas_melaka | as-required |
gtfs_static_mybas_seremban_a | as-required |
gtfs_static_mybas_seremban_b | as-required |
gtfs_static_prasarana_bus_kl | as-required |
gtfs_static_prasarana_bus_kuantan | as-required |
gtfs_static_prasarana_bus_mrtfeeder | as-required |
gtfs_static_prasarana_bus_penang | as-required |
gtfs_static_prasarana_rail_kl | as-required |
hansard_mps | as-required |
hansard_parliamentary_terms | as-required |
hansard_sittings | as-required |
healthcare_staff | annual |
hh_expenditure_dun | monthly |
hh_expenditure_parlimen | monthly |
hh_income | monthly |
hh_income_district | monthly |
hh_income_state | monthly |
hh_inequality | monthly |
hh_inequality_district | monthly |
hh_inequality_state | monthly |
hh_poverty | monthly |
hh_poverty_district | monthly |
hh_poverty_state | monthly |
hospital_beds | annual |
infant_immunisation | annual |
interestrates | monthly |
interestrates_annual | annual |
ipi_2d | monthly |
ipi_3d | monthly |
ipi_5d | monthly |
ipi_domestic | monthly |
ipi_export | monthly |
kkm_idengue | daily |
kkmnow_bedutil | daily |
kkmnow_blood | daily |
kkmnow_covidepid | weekly |
kkmnow_covidnow | daily |
kkmnow_covidvax | daily |
kkmnow_facilities | annual |
kkmnow_organ | daily |
kkmnow_pekab40 | daily |
lecturers_uni | annual |
legal_advisory_branch | monthly |
legal_advisory_case_type | monthly |
legal_advisory_category | monthly |
legal_advisory_subcategory | monthly |
lfs_month | monthly |
lfs_qtr | quarterly |
lfs_qtr_state | quarterly |
lfs_year | annual |
local_authority_sex | annual |
lookup_federal_finance | as-required |
lookup_money_banking | as-required |
marriages_state | annual |
marriages_state_age | annual |
mbpp_weather_stations | hourly |
met_weather | daily |
metrics_content | monthly |
metrics_dataset_cumul | daily |
mnha | annual |
mnha_moh | annual |
monetary_aggregates | monthly |
nutrition_children_sex | annual |
nutrition_children_strata | annual |
organ_pledges | daily |
organ_pledges_state | daily |
parliament_sex | annual |
passports | monthly |
payment_channels | monthly |
payment_instruments | monthly |
payment_systems | monthly |
pekab40_screenings | daily |
pekab40_screenings_state | daily |
pharmaceutical_importers | monthly |
pharmaceutical_manufacturers | monthly |
pharmaceutical_products | monthly |
pharmaceutical_products_cancelled | monthly |
pharmaceutical_wholesalers | monthly |
population_district | annual |
population_dun | annual |
population_malaysia | annual |
population_parlimen | annual |
population_state | annual |
poskod | as-required |
ppi | monthly |
ppi_2d | monthly |
ppi_3d | monthly |
ppi_sop | monthly |
pricecatcher | monthly |
prisoners_prison | annual |
prisoners_state | annual |
registration_transactions_all | daily |
registration_transactions_car | daily |
registration_transactions_motorcycle | daily |
registrations_type_fuel | monthly |
ridership_headline | daily |
ridership_ktmb_daily | daily |
ridership_ktmb_monthly | monthly |
ridership_od_brt_daily | daily |
ridership_od_ets | daily |
ridership_od_intercity | daily |
ridership_od_komuter | daily |
ridership_od_komuter_utara | daily |
ridership_od_rapidrail_daily | daily |
ridership_od_shuttle_tebrau | daily |
sanitation_access | annual |
schools_district | annual |
sdg_03-3-1 | annual |
sdg_04-6-1 | annual |
sdg_10-c-1 | annual |
sdg_16-1-1 | annual |
sdg_16-2-2 | annual |
sg_datagov_coe_bidding | monthly |
sg_datagov_hdb_metadata | monthly |
sg_datagov_hdb_resale_prices | monthly |
sg_datagov_taxi_availability | daily |
sg_datagov_weather_readings | daily |
sppi_3d | monthly |
st_cogenerators | annual |
st_consumers | monthly |
st_current_cogen_licensees | as-required |
st_current_ipp_licensees | as-required |
st_current_lss_licensees | as-required |
st_current_re_licensees | as-required |
st_elesca | annual |
st_energy_balance_pdf | annual |
st_generation_mix_gwh | annual |
st_installed_capacity_mw | monthly |
st_ipps | annual |
st_max_demand_mw | monthly |
st_re_projects | annual |
st_sales_unit_gwh | monthly |
st_sales_value_rm_million | monthly |
state_finance_expenditure | annual |
state_finance_revenue | annual |
std_state | annual |
teachers_district | annual |
trade_headline | monthly |
trade_sitc_1d | monthly |
trnsc_daily_directdebit | daily |
trnsc_daily_fpx | daily |
trnsc_daily_jompay | daily |
trnsc_daily_san | daily |
usage_metrics | daily |
usage_metrics_openapi | daily |
usage_metrics_openapi_cumul | daily |
vaxreg_covid | daily |
vaxreg_covid_demog | annual |
water_access | annual |
water_consumption | annual |
water_pollution_basin | annual |
water_production | annual |
DataPulse currently tracks the portfolio declared in datapulse.json.
Start with datapulse.json to discover datasets and their
official sources. Follow each health_report link for a plain-language
assessment, or consume the matching file under data/json/ in an automated
workflow.
For example, a data pipeline can inspect status, content_freshness_date, and
freshness_signal_source before processing a source, while a researcher can
review the known quirks before designing a collection method.
For a clone-less, independent check of the published Ed25519 dataset envelope, GitHub source parity, and Rekor/Sigstore health witness, see Verify DataPulse externally.
Every dataset in this catalogue ships with a publicly-signed Sigstore
DSSE evidence receipt that an agent can verify offline, without trusting
the DataPulse server. An agent (human or MCP) can obtain, for any dataset,
the full health row + evidence + signed-receipt-verification in three MCP
tool calls or fewer: verify_dataset → get_freshness_summary. The standard
offline path is the verify_external.py command above.
For the portfolio-level health bundle, verify
/signatures/health.latest.sigstore.json with the exact companion manifest
at /signatures/datapulse.json. That signed-manifest snapshot is distinct
from /datapulse.json, the current discovery manifest: the latter can change
when generated metadata is refreshed. A valid signature proves the integrity
of DataPulse's attested observation, not that upstream data is semantically
true. Every refresh publishes signed bundles to the public Rekor log.
datapulse-health.timer wakes every 5 minutes and runs only the
datasets whose cadence tier is due.Know a Malaysian public dataset that deserves dependable health metadata? Adopt it: verify its source and licence, document its schema and quirks, and submit a health report. See CONTRIBUTING.md for the expected three-file contribution model.
New contributors can start with the repository's
Good first issues
or propose a dataset through the GitHub issue forms. Maintainers use
good first issue (yellow), adopt-a-dataset (blue), freshness-check
(blue), bug (red), documentation (blue), question (purple), and
wontfix (gray) to route contributions.
DataPulse is released under the MIT License. Source datasets remain subject to the licences and attribution requirements stated in their individual health reports.
See PRIVACY.md for what DataPulse collects (transient operational logs for rate limiting and usage aggregation) and what it does not collect (no credentials, no accounts, no personal data).
DataPulse probes publicly-published open-data sources. We do not bypass authentication, CAPTCHAs, or terms-of-service restrictions. Every source we probe is publicly available without login; the data is aggregate/non-personal; and the probe respects each dataset's declared refresh frequency.
All scraping is rate-limited (5-minute cadence, dataset-tier cadence applied)
and identifies itself via User-Agent. Sources we cannot probe without
authentication, CAPTCHA bypass, or ToS violation are marked unreachable or
browser-dependent — never silently scraped through a workaround.
If you are a data source maintainer and would like DataPulse to adjust its probe cadence, exclude a dataset, or remove it from the manifest, please open a GitHub issue or contact the maintainers.