# ASX Company Announcements and Data Tracker (Australia) (`scrapemint/asx-announcements-tracker`) Actor

Australian Securities Exchange data, keyless: every listed company with market cap, industry and five day move in one request, plus announcements carrying the ASX price sensitive flag, and fundamentals with dividend yield and franking. No login or proxy.

- **URL**: https://apify.com/scrapemint/asx-announcements-tracker.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## ASX Company Announcements and Data Tracker (Australia)

Australian Securities Exchange company data as clean JSON: **every listed company in one request**, **company announcements carrying the ASX price sensitive flag**, and **fundamentals with dividend yield and franking percent**.

No API key, no login, no browser, no proxy. It reads the same keyless public JSON that asx.com.au itself reads.

### Why the price sensitive flag matters

ASX listing rules require a company to mark an announcement that a reasonable person would expect to move the price. `priceSensitive` is therefore **the regulator's own flag, not a guess**. You get a market moving event feed without classifying any text yourself, which is the part that usually goes wrong.

It is selective in practice. A recent run over BHP, CBA and CSL returned 15 announcements, of which only 2 were price sensitive. The rest were routine notices about unquoted securities and director interests.

### Modes

#### `directory` (default)

The whole listed market in **a single HTTP request**: 1,840 companies with market cap, industry, listing date, five day price change and a recent listing flag. It doubles as a screener.

| Field | |
| --- | --- |
| `symbol`, `name`, `industry` | ASX code, company name, GICS style industry |
| `marketCapAud` | Market cap in AUD, `null` when ASX publishes none |
| `dateListed`, `recentListing` | Listing date and the ASX recent float flag |
| `priceChangeFiveDayPct` | Five day price change, signed |

Filter with `industry`, `minMarketCap`, `minFiveDayMovePct` and `recentListingsOnly`. For example Energy companies above 50m AUD, or everything that moved more than 10% in five days.

#### `announcements`

The latest announcements per company: `headline`, `announcementType`, `announcedAt`, `priceSensitive`, `fileSize`, `documentKey`.

- `priceSensitiveOnly` keeps only the flagged ones.
- `newOnly` remembers what it has already returned **across runs**, so a scheduled run reports only what is new and you are not billed twice for the same announcement.

#### `keyStatistics`

Per company fundamentals: ISIN, 52 week high and low, day high and low, average volume, shares on issue, EPS, price earnings ratio, free cash flow yield, dividend, annual dividend yield, ex dividend, record and pay dates, and **`frankingPercent`**.

Franking is the Australian dividend imputation credit and is the number an Australian investor actually reads. 100 means fully franked. CBA, BHP and FMG all currently report 100.

### Choosing which companies to read

Give `symbols` an explicit watchlist, or leave it empty and let the directory filters pick. "Every Energy company above 50m AUD" works without you listing them.

Use the plain ASX code, `BHP`, not `BHP.AX`.

### Honest limits

- **Announcements are capped at the 5 most recent per company** by the source. There is no pagination and no archive: `itemsPerPage`, `count`, `pageSize` and `page` all still return 5. This is a monitor, not a history tool. Run it on a schedule with `newOnly` to build your own history.
- **Per company calls cost roughly 850ms**, so reading all 1,840 companies would take about 26 minutes and cannot finish in a normal run. The fan out is capped at 250 companies per run; narrow the filters or pass `symbols` to choose which ones.
- **A missing market cap stays `null`**, it never becomes 0. Setting `minMarketCap` drops those rows rather than treating them as worthless.

### Input

| Field | Description |
| --- | --- |
| `mode` | `directory`, `announcements` or `keyStatistics` |
| `symbols` | ASX codes, e.g. `["BHP","CBA","CSL"]`. Empty = use the filters |
| `industry` | Match part of an industry name, e.g. `Energy` |
| `minMarketCap` | Minimum market cap in AUD |
| `minFiveDayMovePct` | Minimum five day move, either direction |
| `recentListingsOnly` | Only recent floats |
| `priceSensitiveOnly` | Announcements mode: only flagged announcements |
| `newOnly` | Announcements mode: only what was not returned before |
| `maxRows` | Stop after this many rows (billing is per row) |

### Example

```json
{ "mode": "announcements", "symbols": ["BHP", "CBA", "CSL"], "priceSensitiveOnly": false, "maxRows": 40 }
```

Every Energy company above 50m AUD:

```json
{ "mode": "directory", "industry": "Energy", "minMarketCap": 50000000, "maxRows": 200 }
```

### Billing

One charge per row. The first 2 rows of every run are free, and note rows explaining an empty result are never charged.

# Actor input Schema

## `mode` (type: `string`):

directory = every listed company with market cap, industry and five day move, in a single request. announcements = the latest announcements per company, each carrying the ASX price sensitive flag. keyStatistics = fundamentals, dividend and franking per company.

## `symbols` (type: `array`):

ASX codes such as BHP, CBA, CSL. Use the plain code, not BHP.AX. Leave empty to let the filters below choose the companies for you.

## `industry` (type: `string`):

Match part of the industry name, for example Energy, Materials, Software. Used when no codes are given.

## `minMarketCap` (type: `integer`):

Drop companies below this market cap. Companies with no published cap are dropped when this is set.

## `minFiveDayMovePct` (type: `integer`):

Keep only companies whose five day price change is at least this big in either direction. 10 means moved 10% up or down.

## `recentListingsOnly` (type: `boolean`):

Keep only companies ASX flags as recently listed, for tracking new floats.

## `priceSensitiveOnly` (type: `boolean`):

Announcements mode only. ASX listing rules require companies to mark announcements expected to move the price, so this is the regulator's own flag rather than a guess. Each company exposes only its 5 most recent announcements, so turning this on can return very little on a quiet week.

## `newOnly` (type: `boolean`):

Announcements mode only. Remembers what it has already returned across runs, so a scheduled run reports only what is new.

## `maxRows` (type: `integer`):

Stop after this many rows. Billing is per row.

## Actor input object example

```json
{
  "mode": "announcements",
  "symbols": [
    "BHP",
    "CBA",
    "CSL"
  ],
  "recentListingsOnly": false,
  "priceSensitiveOnly": false,
  "newOnly": false,
  "maxRows": 40
}
```

# Actor output Schema

## `rows` (type: `string`):

Listed companies with market cap, industry and five day move; announcements carrying the ASX price sensitive flag; and key statistics with dividend yield and franking.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "announcements",
    "symbols": [
        "BHP",
        "CBA",
        "CSL"
    ],
    "priceSensitiveOnly": false,
    "maxRows": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/asx-announcements-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "announcements",
    "symbols": [
        "BHP",
        "CBA",
        "CSL",
    ],
    "priceSensitiveOnly": False,
    "maxRows": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/asx-announcements-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "announcements",
  "symbols": [
    "BHP",
    "CBA",
    "CSL"
  ],
  "priceSensitiveOnly": false,
  "maxRows": 40
}' |
apify call scrapemint/asx-announcements-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapemint/asx-announcements-tracker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/c3ygJuJ5PHh6CyMjE/builds/ORRUXBynVCy2CVWdf/openapi.json
