OrbTop

KLSE Screener — Bursa Malaysia Listed Companies

BUSINESS

KLSE / Bursa Malaysia Listed Company Scraper

Scrape the entire Bursa Malaysia (KLSE) listed-company universe. Returns the full Main / ACE / LEAP market roster with current prices and fundamentals, per-company deep financials, and the live company-announcement stream mirrored from Bursa LINK.

What you get

Roster snapshot — a single call returns ~1,139 rows covering every stock listed on Bursa Malaysia's three market boards:

Field Description
stock_code Bursa 4-digit code (e.g. 1155 = Maybank)
stock_name Ticker short name
company_full_name Full registered company name
market_board MAIN / ACE / LEAP
sector Bursa sector classification
last_price Last traded price (MYR)
price_change / price_change_pct Intraday movement
volume Traded volume
market_cap_rm Market capitalisation (MYR millions)
eps Earnings per share (sen)
pe_ratio Price/earnings ratio
dividend_yield_pct Dividend yield (%)
roe_pct Return on equity (%)
nta Net tangible assets per share
week_52_high / week_52_low 52-week range

Company deep-dive — per-company financials for specific stock codes:

  • Annual revenue and net profit history
  • 52-week price range, ROE, EPS, NTA, market cap, shares outstanding
  • Supply a list of stock codes or leave blank to derive from the roster

Announcement stream — the live Bursa company-announcement feed, paginated:

  • Announcement title, category, company name, datetime
  • Categories: Financial Results, General Announcement, Changes in Corporate Info, etc.
  • Filter by category or scrape all

Modes

Mode Input Description
roster_snapshot Full ~1,139-company roster with fundamentals
company_deep stockCodes Per-company financials for supplied codes
announcements announcementCategories Live announcement stream (paginated)

Why KLSE Screener (not Bursa Malaysia official)

The official bursamalaysia.com site is Cloudflare-challenged on every market-data path (verified 403 + "Just a moment" interstitial). KLSE Screener mirrors the same Bursa data without Cloudflare. The roster endpoint returns all listed companies in a single AJAX call (~2.9 MB) with complete fundamentals — no page-by-page pagination required.

Input

{
    "mode": "roster_snapshot",
    "maxItems": 200,
    "stockCodes": ["1155", "1023"],
    "sectors": [],
    "announcementCategories": [],
    "sp_intended_usage": "Building a screener for MY retail investors",
    "sp_improvement_suggestions": ""
}

Parameters

Parameter Default Description
mode roster_snapshot Which data to scrape
maxItems 200 Maximum records to return
stockCodes [] For company_deep mode: Bursa 4-digit codes. Empty = use roster
sectors [] For roster_snapshot: filter by sector name. Empty = all sectors
announcementCategories [] For announcements: filter by category. Empty = all

Output sample (roster_snapshot)

{
    "record_type": "company",
    "stock_code": "1155",
    "stock_name": "MAYBANK",
    "company_full_name": "MALAYAN BANKING BERHAD",
    "market_board": "MAIN",
    "sector": "Banking",
    "sub_sector": "Financial Services",
    "last_price": 11.1,
    "price_change": 0.04,
    "price_change_pct": 0.36,
    "volume": 12340000,
    "market_cap_rm": 134300,
    "eps": 86.93,
    "pe_ratio": 12.77,
    "dividend_yield_pct": 5.68,
    "roe_pct": 11.24,
    "nta": 7.73,
    "week_52_high": 12.42,
    "week_52_low": 9.39,
    "source_url": "https://www.klsescreener.com/v2/screener/quote_results",
    "scraped_at": "2026-05-17T00:37:00.000Z"
}

Use cases

  • Quant screeners: Pull the entire ~1,139-company universe with P/E, DY, ROE, EPS in one run — filter for value/dividend/growth criteria
  • Retail investor tools: Power a portfolio tracker or stock discovery app for the Malaysian market
  • Research desks: Monitor the Bursa announcement feed for material information, substantial-shareholding changes, and quarterly results
  • Data pipelines: Feed an automated screener or alerting system — run on a schedule, compare snapshots to detect price movement or new announcements

Pricing

Per-result pricing via Apify PPE. The roster snapshot fetches all ~1,139 companies in a single network call, making it exceptionally cost-efficient for full-universe pulls.

Notes

  • No API key required
  • Datacenter proxy sufficient — KLSE Screener has no Cloudflare protection
  • Self-throttle applies (~1 req/2s for detail pages) to respect the site's AdSense-funded free model
  • Data is sourced from KLSE Screener which mirrors Bursa Malaysia's official listing; prices may lag real-time by minutes