# Australia ASX Form 605 Substantial Holding Tracker (`nexgendata/australia-asic-form-605-substantial-holdings`) Actor

Track every ASX Form 603/604/605 substantial-holder filing under Corporations Act s671B. Filer name, target ticker, current vs prior voting power %, share counts, transaction dates. Bloomberg/Refinitiv ASX-feed alternative for event-driven funds, M\&A desks, activist trackers.

- **URL**: https://apify.com/nexgendata/australia-asic-form-605-substantial-holdings.md
- **Developed by:** [Stephan Corbeil](https://apify.com/nexgendata) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Australia ASX Form 605 Substantial Holding Tracker — s671B Disclosures

> **Track every Form 603 / 604 / 605 substantial-holder filing lodged with the ASX under Corporations Act 2001 s671B. Filer name, target ticker, current vs prior voting power %, share counts, transaction dates. The Australian equivalent of SEC Schedule 13D/G. Bloomberg / Refinitiv / Capital IQ alternative for Sydney hedge funds, M&A research desks, activist trackers, and dual-listed ASX/US fund managers — without the $24K-per-seat-per-year terminal.**

When a holder of an ASX-listed company's voting shares **crosses 5% — or moves their existing stake by ≥1% — they have 2 business days to lodge a Form 603, 604, or 605** under Corporations Act 2001 section 671B. These are the single most-watched regulatory disclosures for Australian event-driven trading strategies. Activists, takeover bidders, sovereign wealth funds, and large institutionals show their hand here first. By the time CNBC reports it, the smart money has already positioned.

This actor monitors the **ASX Market Announcements Platform** for every Form 603 ("becoming a substantial holder"), Form 604 ("change in substantial holding"), and Form 605 ("ceasing to be a substantial holder") filing across the entire ASX listed universe. It resolves the underlying PDF, parses the structured Form 605 sections, and returns a clean JSON record for your event-driven model, dashboard, alert pipeline, or compliance audit.

---

### What ASIC Form 603 / 604 / 605 Are

Under Corporations Act 2001 **section 671B**, any person who becomes — or ceases to be — a **substantial holder** of voting shares in an ASX-listed company (≥5% of voting power) must lodge a public notice with the ASX within **2 business days**:

| Form | Trigger | Plain-English Translation |
|---|---|---|
| **Form 603** | First crossing of 5% voting power | "I just became a substantial holder" |
| **Form 604** | ≥1% movement (up or down) while above 5% | "My stake changed materially while I was above 5%" |
| **Form 605** | Falling below 5% | "I just stopped being a substantial holder" |

Each form discloses:
- The filer's full legal name (and ACN if an Australian company)
- The class of voting securities held
- Number of voting shares + total votes
- **Voting power % (present notice)** and **voting power % (previous notice)**
- Dates of each acquisition / disposal in the change window
- Consideration per share (where applicable)
- Associates / persons whose interest changed
- Custodian / nominee structure where shares are held via intermediaries

These filings are the Australian functional equivalent of the SEC's **Schedule 13D / 13G**. They are the highest-signal pre-positioning disclosures available on the ASX.

---

### Output Schema

Each dataset item is one Form 603 / 604 / 605 record:

| Field | Type | Example |
|---|---|---|
| `announcement_id` | `str` | `2924-03090694-6A1325731` |
| `filing_date` | `str` (ISO) | `2026-05-15T08:44:35.000Z` |
| `form_type` | `enum` | `605` / `604` / `603` |
| `target_ticker` | `str` | `TBR` |
| `target_name` | `str` | `TRIBUNE RESOURCES LIMITED` |
| `holder_name` | `str` | `BlackRock Investment Management (Australia) Limited` |
| `holder_acn` | `str` | `230814119` (where disclosed) |
| `holder_type` | `enum` | `corporate` / `fund` / `sovereign` / `trust` / `individual` / `unknown` |
| `prior_voting_power_pct` | `float` | `5.12` |
| `current_voting_power_pct` | `float` | `6.74` |
| `change_voting_power_pct` | `float` (signed) | `+1.62` |
| `total_shares_held` | `int` | `9,184,317` |
| `change_shares` | `int` (signed) | `+1,920,000` |
| `transaction_dates` | `array[str]` (ISO) | `["2026-05-12", "2026-05-13"]` |
| `consideration_per_share` | `float` (AUD) | `41.85` |
| `is_new_substantial_holder` | `bool` | `true` for first 5% crossing (Form 603) |
| `is_ceasing` | `bool` | `true` for falling below 5% (Form 605) |
| `pdf_url` | `str` | `https://announcements.asx.com.au/asxpdf/...` |
| `pdf_text_sample` | `str` | First 2000 chars of OCR/parsed body |
| `source_url` | `str` | ASX announcement viewer URL |
| `headline` | `str` | `Change in substantial holding` |
| `is_price_sensitive` | `bool` | ASX-flagged price-sensitive announcement |
| `_pdf_unparseable` | `bool` | `true` if the PDF is scanned / gated — review manually |

---

### Input Filters

| Filter | Type | Description |
|---|---|---|
| `mode` | enum | `recent` / `by_ticker` / `by_holder` / `by_date_range`. Default `recent`. |
| `daysBack` | int (1–90) | How many days of recent filings to scan. Default 7. |
| `ticker` | str | ASX ticker code for `by_ticker` mode (e.g. `BHP`, `CBA`, `CSL`, `RIO`). |
| `holder` | str | Filer-name regex for `by_holder` mode (e.g. `BlackRock`, `Vanguard`, `L1 Capital`). |
| `dateFrom` / `dateTo` | str (ISO date) | Explicit date window for `by_date_range` mode. |
| `maxFilings` | int (1–500) | Hard cap on returned records. Default 50. |
| `includeFormType` | array | Subset of `["603", "604", "605"]`. Default `["605"]`. Pass all three for full lifecycle coverage. |
| `proxyConfiguration` | object | Apify Proxy. Default RESIDENTIAL + country=AU. |

---

### Use Cases

#### 1. Event-Driven Hedge Funds (Sydney / Melbourne / NYC)
Long companies seeing **fresh Form 603 5% crossings by activists or strategics** within 48 hours of the filing — classic pre-bid accumulation pattern. Short companies where insiders / family-office holders are filing Form 605s (ceasing).

#### 2. M&A Research / Sell-Side Desks
Macquarie, UBS, Goldman Sachs Australia, Jarden — monitor every 5% crossing across your coverage universe. Activist accumulation patterns typically precede a public takeover by 6-12 weeks.

#### 3. Activist Trackers
Caledonia, Cooper Investors, Tribeca, L1 Capital, Wilson Asset Management, Allan Gray — get notified the moment a peer crosses 5% in any ASX 300 name. Reverse-engineer their theses.

#### 4. Dual-Listed Fund Managers
Lone Pine, Tiger Global, Templeton EM, Wellington — if you trade BHP / RIO / CSL on both the NYSE and ASX, you need to monitor both sides. ASX Form 603-605 is the leading indicator; SEC Schedule 13D / 13F follows by weeks.

#### 5. Sovereign-Wealth Fund Monitoring
Future Fund (Australia), GIC (Singapore), Norges Bank (Norway), Qatar Investment Authority, Temasek — track every disclosed >5% stake-build in ASX-listed names.

#### 6. Activist / Corporate Defense Advisory
King & Wood Mallesons, Allens, Herbert Smith Freehills, MinterEllison — alert clients within hours of an activist crossing 5% in their stock.

---

### Comparison vs Bloomberg / Refinitiv / Capital IQ / Sentinel

| Capability | This Actor | Bloomberg | Refinitiv Eikon | Capital IQ | Smartshare / Sentinel |
|---|---|---|---|---|---|
| ASX Form 603/604/605 coverage | yes | yes | yes | yes | yes |
| Real-time (≤2 hours of filing) | yes | yes | yes | yes | partial |
| Filer name + ACN parsing | yes | yes | partial | yes | yes |
| Voting power % (current vs prior) | yes | yes | yes | yes | yes |
| Transaction-date extraction | yes | partial | partial | partial | yes |
| Sovereign / fund / corporate tagging | yes | yes | yes | yes | partial |
| Programmatic API access | yes | yes ($24K/yr) | yes ($22K/yr) | yes ($15K/yr) | no |
| Pay-per-result pricing | **$0.10 / record** | flat seat | flat seat | flat seat | flat AUD 5K–15K |
| Annual cost @ 100 records/week | **~$520** | $24,000+ | $22,000+ | $15,000+ | $5,000-15,000 |

**Bottom line:** if you don't need a full Bloomberg terminal (and most teams don't need 99% of what Bloomberg sells), this actor gets you the substantial-holder feed at **2-3% of the cost of Bloomberg or Refinitiv**.

---

### Pricing

**$0.10 per Form 603/604/605 record returned**, plus **$0.005 per actor start**.

- Smoke test (10 records): **$1.01**
- Weekly monitor (30-100 records): **$3.00 – $10.00 / week**, ~$13–$43 / month
- Full backfill (500 records): **$50.01**

A typical week sees 30–100 Form 603/604/605 filings across the entire ASX listed universe. The high-volume blue-chips (BHP, CBA, CSL, RIO, WBC) generate 10-30 Form 605s per year each as substantial holders cross the 1% reporting threshold.

---

### Quickstart

#### Apify Console
1. Click **Start** on the actor page.
2. Default input runs a 7-day recent scan: `{"mode":"recent","daysBack":7,"maxFilings":50}`.
3. Results appear in the dataset within ~60 seconds.

#### cURL
```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~australia-asic-form-605-substantial-holdings/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"recent","daysBack":7,"maxFilings":100,"includeFormType":["603","604","605"]}'
````

#### Python SDK

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("nexgendata/australia-asic-form-605-substantial-holdings").call(run_input={
    "mode": "by_ticker",
    "ticker": "BHP",
    "maxFilings": 30,
    "includeFormType": ["603", "604", "605"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(
        f"{item['filing_date']} {item['target_ticker']} {item['form_type']} "
        f"{item.get('holder_name')} {item.get('prior_voting_power_pct')}% -> "
        f"{item.get('current_voting_power_pct')}%"
    )
```

#### Monitor a Specific Holder

```python
## Track every BlackRock substantial-holder move on the ASX
client.actor("nexgendata/australia-asic-form-605-substantial-holdings").call(run_input={
    "mode": "by_holder",
    "holder": "BlackRock|Vanguard|State Street",
    "daysBack": 30,
    "maxFilings": 200,
})
```

***

### How It Works

**Primary source:** ASX Markit Digital announcements API

- `https://asx.api.markitdigital.com/asx-research/1.0/markets/announcements` — paginated whole-market feed
- `https://asx.api.markitdigital.com/asx-research/1.0/companies/{TICKER}/announcements` — per-ticker history

We filter on the standardised ASX announcement headlines:

- `"Becoming a substantial holder"` → Form 603
- `"Change in substantial holding"` / `"Change of substantial holding"` → Form 604
- `"Ceasing to be a substantial holder"` → Form 605

For each candidate announcement, we resolve the underlying PDF (the form body), extract the text with `pypdf`, and apply regex-based field extraction over the standard Form 605 sections (filer name, ACN, voting-power %, transaction dates, consideration per share).

**Throttle:** 1 request per 2 seconds to ASX, with exponential backoff (1s → 2s → 4s → 8s) on 429/5xx responses. This keeps the actor under ASX's anti-abuse threshold even on full-backfill runs.

**Proxy:** Defaults to Apify Residential proxy with country=AU for the best ASX connectivity. The ASX rate-limits cloud IPs aggressively but rarely blocks legitimate AU residential traffic.

**Scanned-PDF fallback:** Some older or counterparty-prepared Form 605 PDFs are scanned image files rather than machine-readable text. Where text extraction returns <100 characters, we mark the record with `_pdf_unparseable: true` and include the source URL so you can flag it for manual review.

***

### FAQ

**Q: How fresh is the data?**
A: Filings appear on the ASX feed within seconds of lodgement. The Corporations Act's 2-business-day filing deadline is the binding constraint — even Bloomberg can't show you a Form 605 before the holder files it.

**Q: Does this cover NZX / Hong Kong / Singapore substantial-holder filings?**
A: No. This actor is ASX-only. NZX uses Substantial Product Holder Disclosure (SPH) notices, HKEX uses the Disclosure of Interests (DI) regime, and SGX uses the s.137 disclosure regime — each is structurally different and requires its own actor.

**Q: What about Schedule 13D / 13G from SEC EDGAR?**
A: See our sister actor **SEC Schedule 13D/G Activist Tracker** (link below).

**Q: How do you handle nominee / custodian structures?**
A: Form 605 requires disclosure of the *beneficial* holder where known. We capture whatever name appears in the "name of substantial holder" field — typically the asset manager (BlackRock, Vanguard) rather than the underlying custodian (HSBC Custody Nominees, JPMorgan Nominees). Where the form discloses both, we capture the beneficial holder.

**Q: Can I get historical data going back 10 years?**
A: The ASX Markit feed surfaces the last ~2 years of announcements per ticker. For deeper history, iterate the actor in `by_ticker` mode across your watchlist with `maxFilings: 500` — the per-ticker endpoint returns the full available archive.

**Q: How do I detect activist accumulation patterns?**
A: Long companies with multiple Form 603 / 604 filings from the same holder within 90 days where each filing shows an increase in voting power. Cross-reference with the headline being flagged `is_price_sensitive: true`.

***

### Related Actors — Build A Full Global Substantial-Holder Stack

| Actor | What It Does |
|---|---|
| [SEC Schedule 13D/G Activist Tracker](https://apify.com/nexgendata/sec-schedule-13dg-activist-tracker) | 5%+ ownership stakes in US-listed companies (Icahn, Ackman, Loeb, ValueAct). |
| [SEC Form 4 Insider Trading Tracker](https://apify.com/nexgendata/sec-form4-insider-tracker) | CEO/CFO/Director open-market buys & sells across every US-listed stock. |
| [SEC Form 13F Holdings Tracker](https://apify.com/nexgendata/sec-form-13f-holdings-tracker) | Quarterly institutional holdings — every fund with $100M+ AUM. |
| [ASX Australia Stock Screener](https://apify.com/nexgendata/asx-australia-stock-screener) | Filter the full ASX 300 / All Ordinaries universe by 60+ technical & fundamental criteria. |
| [Hong Kong Companies Registry Search](https://apify.com/nexgendata/hk-companies-registry-search) | HK-listed corporate-registry lookups for nominee / beneficial-owner tracing. |
| [Singapore ACRA Companies Search](https://apify.com/nexgendata/singapore-acra-companies-search) | Singapore corporate-registry equivalent. |
| [Finance MCP Server](https://apify.com/nexgendata/finance-mcp-server) | LLM-ready finance data — give Claude / GPT access to substantial-holder feeds, fundamentals, charts. |

***

### Disclaimer

This actor returns **public ASX Market Announcement data** sourced from the ASX Markit Digital announcements feed. All filing details (filer name, voting power %, transaction dates) are lodged by the substantial holders themselves under Corporations Act 2001 s671B — we add no proprietary signal, ranking, or recommendation. **This is not investment advice.** Substantial-holder activity is one input among many; past patterns do not predict future returns. Verify all records against the official ASX Market Announcement before acting on them.

***

### Affiliate / Referral

Like this actor? **Sign up for Apify with our referral link** to support more builds like this one:
[**https://apify.com/nexgendata?fpr=2ayu9b**](https://apify.com/nexgendata?fpr=2ayu9b)

You get the same free tier; we get a small commission. No price difference for you.

# Actor input Schema

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

How to fetch Form 605 filings. 'recent' pulls everything from the ASX Announcements feed for the last N days. 'by\_ticker' fetches the announcement history for a single ASX ticker. 'by\_holder' filters recent filings by substantial-holder filer-name regex. 'by\_date\_range' uses an explicit ISO date window. Most event-driven monitoring teams use 'recent' on a daily/weekly schedule.

## `daysBack` (type: `integer`):

How many days of recent ASX announcements to scan in 'recent' mode. The ASX Atom feed surfaces the last ~24 hours so deeper windows fan out through the per-ticker announcement archive. Typical weekly monitor: 7. Daily monitor: 1-2. Backfill: up to 90.

## `ticker` (type: `string`):

ASX ticker code (e.g. 'BHP', 'CBA', 'CSL', 'RIO', 'WBC'). Used only when mode='by\_ticker'. High-volume tickers like BHP or CBA can produce 10-30 Form 605 filings per year as substantial holders cross the 1% reporting threshold up or down.

## `holder` (type: `string`):

Case-insensitive substring or regex matched against the substantial-holder filer name. Use partial names for fund families (e.g. 'BlackRock', 'Vanguard', 'L1 Capital', 'Caledonia'). Used only when mode='by\_holder'.

## `dateFrom` (type: `string`):

ISO date (YYYY-MM-DD) — inclusive lower bound on filing date. Used only when mode='by\_date\_range'.

## `dateTo` (type: `string`):

ISO date (YYYY-MM-DD) — inclusive upper bound on filing date. Used only when mode='by\_date\_range'.

## `maxFilings` (type: `integer`):

Hard cap on the number of Form 603/604/605 records pushed to the dataset. A typical week sees 30-100 filings across the entire ASX. Increase to 500 for full backfill runs.

## `includeFormType` (type: `array`):

Which substantial-holder form types to capture. Form 605 ('change of interests') is the core event-driven signal. Form 603 ('becoming a substantial holder', first 5% crossing) and Form 604 ('ceasing to be a substantial holder', falling below 5%) provide the full lifecycle.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Defaults to RESIDENTIAL with country=AU for the most reliable ASX connectivity — ASX is generally accessible globally but rate-limits aggressively from cloud IPs. If AU residential IPs are unavailable, fall back to unrestricted RESIDENTIAL.

## Actor input object example

```json
{
  "mode": "recent",
  "daysBack": 7,
  "ticker": "BHP",
  "holder": "BlackRock",
  "dateFrom": "2026-04-01",
  "dateTo": "2026-05-01",
  "maxFilings": 50,
  "includeFormType": [
    "605",
    "603",
    "604"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}
```

# 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": "recent",
    "daysBack": 7,
    "ticker": "BHP",
    "holder": "BlackRock",
    "dateFrom": "2026-04-01",
    "dateTo": "2026-05-01",
    "maxFilings": 50,
    "includeFormType": [
        "605",
        "603",
        "604"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AU"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/australia-asic-form-605-substantial-holdings").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": "recent",
    "daysBack": 7,
    "ticker": "BHP",
    "holder": "BlackRock",
    "dateFrom": "2026-04-01",
    "dateTo": "2026-05-01",
    "maxFilings": 50,
    "includeFormType": [
        "605",
        "603",
        "604",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AU",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/australia-asic-form-605-substantial-holdings").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "recent",
  "daysBack": 7,
  "ticker": "BHP",
  "holder": "BlackRock",
  "dateFrom": "2026-04-01",
  "dateTo": "2026-05-01",
  "maxFilings": 50,
  "includeFormType": [
    "605",
    "603",
    "604"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}' |
apify call nexgendata/australia-asic-form-605-substantial-holdings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/australia-asic-form-605-substantial-holdings",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Australia ASX Form 605 Substantial Holding Tracker",
        "description": "Track every ASX Form 603/604/605 substantial-holder filing under Corporations Act s671B. Filer name, target ticker, current vs prior voting power %, share counts, transaction dates. Bloomberg/Refinitiv ASX-feed alternative for event-driven funds, M&A desks, activist trackers.",
        "version": "0.0",
        "x-build-id": "OJSI9FJaw7o2ZgX7r"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~australia-asic-form-605-substantial-holdings/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-australia-asic-form-605-substantial-holdings",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nexgendata~australia-asic-form-605-substantial-holdings/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-australia-asic-form-605-substantial-holdings",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nexgendata~australia-asic-form-605-substantial-holdings/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-australia-asic-form-605-substantial-holdings",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Lookup mode",
                        "enum": [
                            "recent",
                            "by_ticker",
                            "by_holder",
                            "by_date_range"
                        ],
                        "type": "string",
                        "description": "How to fetch Form 605 filings. 'recent' pulls everything from the ASX Announcements feed for the last N days. 'by_ticker' fetches the announcement history for a single ASX ticker. 'by_holder' filters recent filings by substantial-holder filer-name regex. 'by_date_range' uses an explicit ISO date window. Most event-driven monitoring teams use 'recent' on a daily/weekly schedule.",
                        "default": "recent"
                    },
                    "daysBack": {
                        "title": "Days back (recent mode)",
                        "minimum": 1,
                        "maximum": 90,
                        "type": "integer",
                        "description": "How many days of recent ASX announcements to scan in 'recent' mode. The ASX Atom feed surfaces the last ~24 hours so deeper windows fan out through the per-ticker announcement archive. Typical weekly monitor: 7. Daily monitor: 1-2. Backfill: up to 90.",
                        "default": 7
                    },
                    "ticker": {
                        "title": "ASX ticker (by_ticker mode)",
                        "type": "string",
                        "description": "ASX ticker code (e.g. 'BHP', 'CBA', 'CSL', 'RIO', 'WBC'). Used only when mode='by_ticker'. High-volume tickers like BHP or CBA can produce 10-30 Form 605 filings per year as substantial holders cross the 1% reporting threshold up or down.",
                        "default": ""
                    },
                    "holder": {
                        "title": "Filer name regex (by_holder mode)",
                        "type": "string",
                        "description": "Case-insensitive substring or regex matched against the substantial-holder filer name. Use partial names for fund families (e.g. 'BlackRock', 'Vanguard', 'L1 Capital', 'Caledonia'). Used only when mode='by_holder'.",
                        "default": ""
                    },
                    "dateFrom": {
                        "title": "Start date (by_date_range mode)",
                        "type": "string",
                        "description": "ISO date (YYYY-MM-DD) — inclusive lower bound on filing date. Used only when mode='by_date_range'.",
                        "default": ""
                    },
                    "dateTo": {
                        "title": "End date (by_date_range mode)",
                        "type": "string",
                        "description": "ISO date (YYYY-MM-DD) — inclusive upper bound on filing date. Used only when mode='by_date_range'.",
                        "default": ""
                    },
                    "maxFilings": {
                        "title": "Maximum filings to return",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap on the number of Form 603/604/605 records pushed to the dataset. A typical week sees 30-100 filings across the entire ASX. Increase to 500 for full backfill runs.",
                        "default": 50
                    },
                    "includeFormType": {
                        "title": "Form types to include",
                        "type": "array",
                        "description": "Which substantial-holder form types to capture. Form 605 ('change of interests') is the core event-driven signal. Form 603 ('becoming a substantial holder', first 5% crossing) and Form 604 ('ceasing to be a substantial holder', falling below 5%) provide the full lifecycle.",
                        "default": [
                            "605"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. Defaults to RESIDENTIAL with country=AU for the most reliable ASX connectivity — ASX is generally accessible globally but rate-limits aggressively from cloud IPs. If AU residential IPs are unavailable, fall back to unrestricted RESIDENTIAL.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "AU"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
