KLSE / Bursa Malaysia Stock Fundamentals Scraper
Pricing
Pay per usage
KLSE / Bursa Malaysia Stock Fundamentals Scraper
Scrape KLSE (Bursa Malaysia) stock fundamental data including P/E ratio, EPS, dividend yield, and financial metrics for Malaysian-listed companies.
Pricing
Pay per usage
Rating
0.0
(0)
Developer

lewxiangang
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape fundamental financial data for 1,000+ Malaysian stocks listed on Bursa Malaysia (KLSE). Get quarterly results, annual summaries, dividends, and financial ratios in machine-readable JSON or CSV format.
The first and only Apify actor dedicated to Malaysian stock fundamentals.
What data does it collect?
| Data Type | Fields |
|---|---|
| Company Info | Name, sector, market (Main/ACE/LEAP), current price, market cap |
| Quarterly Results | Revenue, net profit, EPS (sen), profit margin per quarter |
| Annual Summary | Revenue, net profit, EPS, PE, ROE, NTA, dividend yield, DPS per year |
| Dividends | Ex-date, payment date, dividend per share (sen), type (interim/final/special) |
| Financial Ratios | PE, PB, ROE, ROA, debt-to-equity, current ratio, dividend yield |
Why use this actor?
| Alternative | Cost | Coverage | Machine-readable? |
|---|---|---|---|
| Bloomberg Terminal | ~$25,000/year | Full | Yes |
| EODHD API | $19.99-$99.99/month | Partial KLSE | Yes |
| KLSE Screener | RM5/month | Full KLSE | No (web only) |
| This Actor | Pay-per-use | Full KLSE | Yes (JSON/CSV) |
No subscriptions. No minimums. Pay only for what you scrape.
Use Cases
- Retail investors: Screen all 1,000+ Bursa stocks by PE, ROE, dividend yield
- Quant trading: Feed fundamentals into algorithmic trading models
- Fintech apps: Power stock screeners, portfolio trackers, robo-advisors
- Academic research: Analyze Malaysian market trends across decades
- Financial advisors: Generate client reports with up-to-date fundamentals
Input
{"stockCodes": ["MAYBANK", "CIMB", "TENAGA"],"market": "all","dataTypes": ["quarterly_results", "annual_summary", "dividends", "ratios"],"yearsHistory": 5,"maxConcurrency": 3}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
stockCodes | array | [] | Stock codes to scrape (e.g., ["MAYBANK", "CIMB"]). Leave empty for all stocks. |
stockNumbers | array | [] | Alternative: Bursa stock numbers (e.g., ["1155", "1023"]) |
market | string | "all" | Filter by market: all, main, ace, leap |
dataTypes | array | all | Data to collect: quarterly_results, annual_summary, dividends, ratios |
yearsHistory | integer | 5 | Years of historical data (1-10) |
outputFormat | string | "json" | Output format: json or csv |
maxConcurrency | integer | 3 | Max concurrent requests (1-10). Keep low to avoid blocks. |
proxyConfiguration | object | Apify proxy | Proxy settings. Recommended for large scrapes. |
Output Example
{"stockCode": "MAYBANK","stockNumber": "1155","companyName": "Malayan Banking Berhad","market": "Main Market","sector": "Financial Services","currentPrice": 9.45,"marketCap": 112000,"currency": "MYR","quarterly": [{"quarter": "Q3 2025","date": "2025-09-30","revenue": 18234000,"netProfit": 2456000,"eps": 21.5,"margin": 13.47},{"quarter": "Q2 2025","date": "2025-06-30","revenue": 17890000,"netProfit": 2380000,"eps": 20.8,"margin": 13.30}],"annual": [{"year": 2024,"revenue": 70123000,"netProfit": 9234000,"eps": 80.5,"pe": 11.7,"roe": 10.8,"nta": 7.45,"dividendYield": 5.82,"dps": 55.0}],"dividends": [{"exDate": "2025-03-15","paymentDate": "2025-04-10","dividendPerShare": 30.0,"type": "interim"},{"exDate": "2024-09-20","paymentDate": "2024-10-15","dividendPerShare": 25.0,"type": "final"}],"ratios": {"pe": 11.7,"pb": 1.27,"roe": 10.8,"roa": 1.05,"debtToEquity": null,"currentRatio": null,"dividendYield": 5.82},"scrapedAt": "2026-03-09T08:30:00.000Z"}
Notes on Data Units
- EPS and DPS are in sen (1 MYR = 100 sen)
- Revenue and net profit are in MYR thousands (as reported by source)
- Market cap is in MYR millions
- Percentages (ROE, ROA, margin, dividend yield) are raw numbers (e.g.,
10.8means 10.8%) - Currency: Most companies report in MYR. Offshore companies reporting in USD are flagged with
"currency": "USD"
Supported Stocks
The actor includes a built-in mapping of 100+ top KLSE stocks covering:
- All 30 FBMKLCI component stocks
- Major stocks across all sectors: banking, plantations, technology, property, energy, healthcare, REITs, telecommunications
- Selected ACE Market stocks
For stocks not in the built-in list, simply pass the stock code as shown on i3investor — the actor will attempt to scrape it.
How It Works
- Accepts stock codes (or numbers) as input
- Fetches stock overview, quarterly financials, annual financials, and dividend pages from i3investor.com
- Parses HTML tables using Cheerio (fast, no browser needed)
- Merges data per stock into a single comprehensive record
- Outputs to Apify dataset in JSON or CSV format
Data is sourced from i3investor.com, which aggregates public Bursa Malaysia regulatory filings.
Performance
| Scenario | Estimated Time | Estimated Cost |
|---|---|---|
| 10 stocks, all data | ~2 minutes | ~$0.01 |
| 100 stocks, all data | ~15 minutes | ~$0.05 |
| All 1,000+ stocks | ~2 hours | ~$0.50 |
Estimates based on Apify platform pricing. Actual costs depend on proxy usage and retries.
Tips
- Start small: Test with 3-5 stocks before running full market scans
- Use proxy: Enable Apify proxy for reliable scraping, especially for 100+ stocks
- Rate limiting: Keep
maxConcurrencyat 3 or below to avoid being blocked - Schedule runs: Set up weekly/monthly schedules for regular data updates
- Combine with other actors: Pair with Yahoo Finance actors for cross-referencing price data
Cost Estimation
| Results | Estimated Cost |
|---|---|
| 100 results | ~$0.10 |
| 1,000 results | ~$1.00 |
| 5,000 results | ~$5.00 |
| 10,000 results | ~$10.00 |
Costs include Apify platform usage fees. Actual cost depends on proxy usage, retries, and data volume per stock. Check the Apify pricing page for current platform rates.
Integrations
Access your scraped data through multiple channels:
- API: Programmatic access to datasets via Apify API
- Webhooks: Trigger external services when a scrape completes
- Zapier: Connect to 5,000+ apps via the Apify Zapier integration
- Google Sheets: Export results directly to Google Sheets from the Apify console
- Make.com: Build automated workflows with the Apify Make integration
FAQ
How fresh is the data? Data is sourced from public regulatory filings via i3investor.com. Financial results are typically available 1-2 trading days after companies file with Bursa Malaysia.
Can I scrape all 1,000+ stocks at once?
Yes. Leave the stockCodes and stockNumbers fields empty to scrape all available stocks. This takes approximately 2 hours and costs around $0.50.
What format is the output? JSON by default. You can export to CSV, Excel, or Google Sheets directly from the Apify console or via the API.
Is this real-time stock data? No. This actor collects fundamental data from regulatory filings (quarterly results, annual reports, dividends, ratios). It does not provide real-time or delayed stock prices. For price data, pair this with a dedicated stock price actor.
Is scraping KLSE data legal?
This actor scrapes publicly available data from i3investor.com. All financial data originates from public regulatory filings submitted to Bursa Malaysia.
- This is not real-time data — all prices and financials are delayed
- This is not investment advice — always do your own research
- This actor does not scrape bursamalaysia.com directly
- Users are responsible for complying with the terms of service of data sources
- Data is provided "as-is" without warranty of accuracy or completeness
Related actors
Looking for Malaysian marketplace data? Check out Mudah.my Scraper for car prices, property listings, and electronics deals.