SGX's API has a bouncer. So bring a browser.
Everything listed companies must tell the market lands on SGX's announcements page: earnings, share buy-backs, CEO interest changes, placements. Each filing links to a PDF on links.sgx.com. And the JSON API behind the page sits behind Akamai, which denies datacenter traffic outright — tokens, headers, proxies, none of it matters. We tried.
So this actor does what a human does: drives a real headless browser through a proxy to the announcements page, waits for the SPA to render, and reads the table. Same filings a trader sees, as typed rows.
{
"daysBack": 3,
"issuerFilter": "dbs",
"maxItems": 100
}
One row per filing:
{
"ann_date": "25 Aug 2026",
"issuer": "OVERSEA-CHINESE BANKING CORP",
"title": "Disclosure of Interest::Changes in Interest of Substantial Shareholder",
"pdf_url": "https://links.sgx.com/1.0.0/corporate-announcements/…"
}
Where it earns its keep
Compliance monitoring: every filing for your watchlist, minutes after publication. Event-driven research: catch buy-backs and placements while they are still news. NLP pipelines: titles split cleanly on SGX's category::headline convention, PDFs one hop away. Give it 2 GB of RAM — Chromium eats — and keep the date window short for scheduled monitoring.
The honest limits: proxy traffic is mandatory (the actor ships configured for Apify proxy groups), and extraction speed follows the portal's render time. Twenty filings in about twenty seconds is typical.
Try it: sgx announcements watcher on Apify — every SGX filing, PDF link included.